我已将时区添加到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
答案 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)