python - 将字符串转换为日期时间对象

标签 python datetime rfc2822

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

我尝试使用 datetime.strptime() 来转换它。 即,

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

出现如下错误:

Traceback (most recent call last):
  File "", line 1, in datetime.strptime('Thu, 16 Oct 2014 01:16:17 EDT','%a, %d %b %Y %H:%M:%S %Z')
  File "C:\Anaconda\lib_strptime.py", line 325, in _strptime (data_string, format))
ValueError: time data 'Thu, 16 Oct 2014 01:16:17 EDT' does not match format '%a, %d %b %Y %H:%M:%S %Z'

但是,如果我尝试不带“EDT”的字符串,它会起作用。 即,

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 可能不正确(在这种情况下,AEDT 由 pytz 使用)即,时区缩写可能不明确。参见 Parsing date/time string with timezone abbreviated name in Python?

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

如果您的计算机使用 POSIX 时间戳(可能),并且您确定输入日期在您的系统可接受的范围内( future /过去不会太远),并且您不需要保留微秒精度那么你可以使用 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/

相关文章:

python - 是否可以在 Python 3 中直接导入枚举字段?

python - 如何防止matplotlib中左x轴延伸到右x轴?

Python:当函数在后台运行时,是否可以创建一个具有动态字符串的 tkinter 标签?

android - val calendar = Calendar.getInstance() 和 val date = Date() 返回不正确的时间

mysql - MySQL 的 DATETIME 格式的 "formal"名称是什么?

python - multiprocessing.Value 无法正确存储 float

mysql - 如何在脚本中处理MySQL时区

php - 在 PHP 中将一种日期格式转换为另一种日期格式

smtp - 标题中显示名称的验证/格式

python - 如何在 python 中为电子邮件创建消息 ID?