我试图将字符串转换为日期时间对象。
我从新闻提要中获得的字符串的格式如下:
“2014年10月16日,星期四,美国东部时间(EDT)”

我尝试使用datetime.strptime()进行转换。
IE。,

datetime.strptime('Thu, 16 Oct 2014 01:16:17 EDT','%a, %d %b %Y %H:%M:%S %Z')

并得到以下错误:



但是,如果我尝试不带“EDT”的字符串,则它可以工作。
IE。,
datetime.strptime('Thu, 16 Oct 2014 01:16:17','%a, %d %b %Y %H:%M:%S')

有谁知道如何解析“EDT”部分?

最佳答案

要解析RFC 2822 format中的日期,可以使用email包:

from datetime import datetime, timedelta
from email.utils import parsedate_tz, mktime_tz

timestamp = mktime_tz(parsedate_tz("Thu, 16 Oct 2014 01:16:17 EDT"))
# -> 1413436577
utc_dt = datetime(1970, 1, 1) + timedelta(seconds=timestamp)
# -> datetime.datetime(2014, 10, 16, 5, 16, 17)

注意:parsedate_tz()假定EDT对应于-0400 UTC偏移量,但在澳大利亚,如果EDT为+1100(在这种情况下pytz使用AEDT),则可能不正确,即时区缩写可能不明确。参见Parsing date/time string with timezone abbreviated name in Python?

相关的Python错误:%Z in strptime doesn't match EST and others

如果您的计算机(可能)使用POSIX时间戳,并且您确定输入日期在系统可接受的范围内(距离将来/过去不太远),并且不需要保留微秒的精度,则可以使用 datetime.utcfromtimestamp :
from datetime import datetime
from email.utils import parsedate_tz, mktime_tz

timestamp = mktime_tz(parsedate_tz("Thu, 16 Oct 2014 01:16:17 EDT"))
# -> 1413436577
utc_dt = datetime.utcfromtimestamp(timestamp)
# -> datetime.datetime(2014, 10, 16, 5, 16, 17)

关于python - 将字符串转换为日期时间对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26435530/

10-11 08:34