Python strptime ValueError:时间数据与格式不匹配

时间:2018-05-02 10:55:50

标签: python datetime

我已将时区添加到postgreSQL DB中的datetime列。

现在我每次想要比较日期时都会出现上述错误。 在某些方面,我有JSON请求,datetime对象作为字符串传递,所以我需要解析它们,我得到的附加时区信息:

ValueError: time data '2018-05-02 11:52:26.108540+02:00' 
does not match format '%Y-%m-%d %H:%M:%S.%f+%Z' 

早些时候我曾:

2018-05-02 11:52:26.108540

与之完美配合:

%Y-%m-%d %H:%M:%S.%f

已添加的新信息为:+02:00

strptime docu中,它告诉我使用%z%Z,但它不起作用。

修改

我正在使用Python 3

2 个答案:

答案 0 :(得分:2)

问题是你需要移除冒号+02:00的偏移量':'然后它会起作用:

In[48]:
dt.datetime.strptime('2018-05-02 11:52:26.108540+0200', '%Y-%m-%d %H:%M:%S.%f%z')

Out[48]: datetime.datetime(2018, 5, 2, 11, 52, 26, 108540, tzinfo=datetime.timezone(datetime.timedelta(0, 7200)))

因此,您需要浏览所有日期时间字符串并将其删除,以便strptime正确解析它

答案 1 :(得分:0)

您需要删除冒号并使用小%z来实现此目的。

>>> s = '2018-05-02 11:52:26.108540+02:00'
>>> fmt = %Y-%m-%d %H:%M:%S.%f%z'
>>> time.strptime(s, fmt)
time.struct_time(tm_year=2018, tm_mon=5, tm_mday=2, tm_hour=11, tm_min=52, tm_sec=26, tm_wday=2, tm_yday=122, tm_isdst=-1)