无法转换为日期时间对象

时间:2019-07-18 00:23:00

标签: python datetime strptime

我正在尝试使用strptime进行转换,并且我一生无法解决这个问题

'07-17-2019 23:39 PM GMT-4' does not match format '%m-%d-%y %H:%M %p %z'

谢谢您的帮助

2 个答案:

答案 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)

我找到了一种方法,它不是超级灵活,但应该有一些奉献。

首先,几点:

  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。我用它们对它进行了逆向工程

tz = datetime.timezone(datetime.timedelta(hours=-4))
dt = datetime.datetime(2019, 7, 17, 23, 39, tzinfo=tz)