无法转换为日期时间对象
Trouble converting to datetime object
我正在尝试使用 strptime 进行转换,但我这辈子都弄不明白
'07-17-2019 23:39 PM GMT-4' does not match format '%m-%d-%y %H:%M %p %z'
感谢您的帮助
到目前为止我发现 %y
应该是 %Y
。解决这个问题的最好方法是一次测试一下。就像从 datetime.strptime('07-17-2019', '%m-%d-%Y')
开始一样。 GMT-4 也有问题。 %z 将匹配 -0400,%Z 将匹配 UTC、EST 和其他,如果你想包括夏令时,这可能比偏移量更好,但看起来这就是你用 strptime
得到的全部.
dateutil.parser.parse
可能会为您提供更多选择和灵活性。
我找到了一个方法来做到这一点,它不是很灵活,但应该有一点让步。
首先说明几点:
%y
应该是 %Y
,以匹配 4 位数的年份。
- 在 AM/PM 中使用 24 小时制令人困惑,所以让我们忽略 AM/PM.
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。我用这些 reverse-engineer 一点点
tz = datetime.timezone(datetime.timedelta(hours=-4))
dt = datetime.datetime(2019, 7, 17, 23, 39, tzinfo=tz)
我正在尝试使用 strptime 进行转换,但我这辈子都弄不明白
'07-17-2019 23:39 PM GMT-4' does not match format '%m-%d-%y %H:%M %p %z'
感谢您的帮助
到目前为止我发现 %y
应该是 %Y
。解决这个问题的最好方法是一次测试一下。就像从 datetime.strptime('07-17-2019', '%m-%d-%Y')
开始一样。 GMT-4 也有问题。 %z 将匹配 -0400,%Z 将匹配 UTC、EST 和其他,如果你想包括夏令时,这可能比偏移量更好,但看起来这就是你用 strptime
得到的全部.
dateutil.parser.parse
可能会为您提供更多选择和灵活性。
我找到了一个方法来做到这一点,它不是很灵活,但应该有一点让步。
首先说明几点:
%y
应该是%Y
,以匹配 4 位数的年份。- 在 AM/PM 中使用 24 小时制令人困惑,所以让我们忽略 AM/PM.
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。我用这些 reverse-engineer 一点点
tz = datetime.timezone(datetime.timedelta(hours=-4))
dt = datetime.datetime(2019, 7, 17, 23, 39, tzinfo=tz)