为什么{date} 2016-11-22T11:49:21.826-05:00 python日期时间失败,即使格式匹配

时间:2019-02-28 04:15:51

标签: python python-3.x datetime

我正在尝试按以下方式在python 3.6中格式化日期时间,

datetime.datetime.strptime(date_string, "{Date}%Y-%m-%dT%H:%M:%S.%f%z")

但是,输入字符串{Date}2016-11-22T11:49:21.826-05:00的格式化失败,并出现以下错误。

Traceback (most recent call last):   File "./test-date.py", line 168, in get_date
  date_time_ = datetime.datetime.strptime(date_string, "{Date}%Y-%m-%dT%H:%M:%S.%f%z").replace(tzinfo=None)   
File "/usr/lib/python3.6/_strptime.py", line 565, in _strptime_datetime
  tt, fraction = _strptime(data_string, format)   
File "/usr/lib/python3.6/_strptime.py", line 362, in _strptime
  (data_string, format))
ValueError: time data '{Date}2016-11-22T11:49:21.826-05:00' does not match format '{Date}%Y-%m-%dT%H:%M:%S.%f%z'

2 个答案:

答案 0 :(得分:0)

如果您不介意使用名为dateutil的其他Python程序包,则可以执行以下操作:

from dateutil.parser import parse
ds = '2016-11-22T11:49:21.826-05:00'
print(parse(ds))

输出:

datetime.datetime(2016, 11, 22, 11, 49, 21, 826000, tzinfo=tzoffset(None, -18000))

答案 1 :(得分:0)

因为正确的馈送%z的方式类似于-0500而不是-05:00

>>> datetime.datetime.strptime('2016-11-22T11:49:21.826-0500', "%Y-%m-%dT%H:%M:%S.%f%z")
datetime.datetime(2016, 11, 22, 11, 49, 21, 826000, tzinfo=datetime.timezone(datetime.timedelta(-1, 68400)))