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)
--编辑--
纯日期时间模块很难用时区解析日期时间。我不是专家,但 pytz
或 python-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”在哪里!!
它确实对我有用,不需要任何其他库!祝编码顺利!!!
我收到以下错误,您可以在其中看到我使用的时间数据和格式
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)
--编辑--
纯日期时间模块很难用时区解析日期时间。我不是专家,但 pytz
或 python-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”在哪里!!
它确实对我有用,不需要任何其他库!祝编码顺利!!!