Python 日期时间 strptime() 与格式不匹配

Python datetime strptime() does not match format

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

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

我使用了 here 中的指令,我发现格式与每个指令的描述相匹配。 你能看出这是什么问题吗?

EEDT 有问题。如果您忽略 EEDT(quickfix,不理想),那么您的代码可能如下所示:

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

import datetime

time = '20:07:35 EEDT Wed Mar 31 2021'
time = time.replace('EEDT', '+0300')
datetime.datetime.strptime(time, '%H:%M:%S %z %a %b %d %Y')

您可以将缩写时区映射到 IANA time zone name by 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)

对于那些对类似的不同方法感兴趣的人,比如 GMT 和 BST 或者 EEST 和 EEDT,可以这样表示:

import datetime

try:
    Time1 = datetime.datetime.strptime(DropTm,"%a %b %d %H:%M:%S GMT %Y")
except:
    Time1 = datetime.datetime.strptime(DropTm,"%a %b %d %H:%M:%S BST %Y")

在你的情况下它将是:

import datetime

try:
    Time1 = datetime.datetime.strptime(SomeValue,"%H:%M:%S EEDT %a %b %d %Y")
except:
    Time1 = datetime.datetime.strptime(SomeValue,"%H:%M:%S EEST %a %b %d %Y")

你的数据“SomeValue”在哪里!!

它确实对我有用,不需要任何其他库!祝编码顺利!!!