我正在尝试使用strptime进行转换,并且我一生无法解决这个问题
'07-17-2019 23:39 PM GMT-4' does not match format '%m-%d-%y %H:%M %p %z'
谢谢您的帮助
答案 0 :(得分:1)
到目前为止,我发现%y
应该是%Y
。解决此问题的最佳方法是一次对其进行一点测试。就像以datetime.strptime('07-17-2019', '%m-%d-%Y')
开头。 GMT-4也有问题。 %z将与-0400匹配,并且%Z将与UTC,EST和其他匹配,如果要包括夏令时,这可能比偏移更好,但是看起来strptime
就是这样
dateutil.parser.parse
可能会为您提供更多选择和灵活性。
答案 1 :(得分:0)
我找到了一种方法,它不是超级灵活,但应该有一些奉献。
首先,几点:
%y
应该为%Y
,以匹配4位数字的年份。GMT-4
不是标准的时区名称,因此我们需要手动进行处理。#!/usr/bin/env python3
import datetime
s = '07-17-2019 23:39 PM GMT-4'
fmt = '%m-%d-%Y %H:%M' # Excludes AM/PM and timezone on purpose
words = s.split()
# Get just date and time as a string.
s_dt = ' '.join(words[:2])
# Convert date and time to datetime, tz-unaware.
unaware = datetime.datetime.strptime(s_dt, fmt)
# Get GMT offset as int - assumes whole hour.
gmt_offset = int(words[3].replace('GMT', ''))
# Convert GMT offset to timezone.
tz = datetime.timezone(datetime.timedelta(hours=gmt_offset))
# Add timezone to datetime
aware = unaware.replace(tzinfo=tz)
print(aware) # -> 2019-07-17 23:39:00-04:00
P.s。我用它们对它进行了逆向工程
tz = datetime.timezone(datetime.timedelta(hours=-4))
dt = datetime.datetime(2019, 7, 17, 23, 39, tzinfo=tz)