无法转换为日期时间对象

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 可能会为您提供更多选择和灵活性。

我找到了一个方法来做到这一点,它不是很灵活,但应该有一点让步。

首先说明几点:

  1. %y 应该是 %Y,以匹配 4 位数的年份。
  2. 在 AM/PM 中使用 24 小时制令人困惑,所以让我们忽略 AM/PM.
  3. 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)