Python datetime strptime() 与格式不匹配

问题描述

我收到以下错误,您可以在其中看到我使用的时间数据和格式

time data '20:07:35 EEDT Wed Mar 31 2021' does not match format '%H:%M:%s %Z %a %b %d %Y'

我使用了 VueUse 中的指令,我看到格式与每个指令的描述相匹配。 你能看出这里有什么问题吗?

解决方法

{{1}}
,

问题在于 EEDT。如果您忽略 EEDT(快速修复,不理想),那么您的代码可能如下所示:

text = '20:07:35 EEDT Wed Mar 31 2021';
fmt = '%H:%M:%S EEDT %a %b %d %Y';
datetime.strptime(text,fmt)

--编辑--

用时区解析日期时间对于纯日期时间模块来说是困难的。我不是大专家,但 pytzpython-datetutil 应该是不错的选择,根据此页面:https://medium.com/@nqbao/python-timezone-and-daylight-savings-e511a0093d0

,

您可以通过 IANA time zone name 的解析器将缩写时区映射到 dateutil

import dateutil

s = '20:07:35 EEDT Wed Mar 31 2021'

tzmapping = {"EEDT": dateutil.tz.gettz('Europe/Athens'),"EEST": dateutil.tz.gettz('Europe/Athens')} # add more if needed...

dtobj = dateutil.parser.parse(s,tzinfos=tzmapping)

那会给你

dtobj
# >>> datetime.datetime(2021,3,31,20,7,35,tzinfo=tzfile('Europe/Athens'))
dtobj.utcoffset()
# >>> datetime.timedelta(seconds=10800) # UTC+3

请注意 timedelta 算术正常工作,即包括 DST 更改:

from datetime import timedelta
dtobj -= timedelta(7) # DST change: dtobj is now EEST,UTC+2
dtobj.utcoffset()
# >>> datetime.timedelta(seconds=7200)