首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >转换为datetime对象时出错

转换为datetime对象时出错
EN

Stack Overflow用户
提问于 2019-07-18 00:23:00
回答 2查看 87关注 0票数 0

我正在尝试使用strptime来转换,而对于我的生命来说,我无法理解这一点。

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

谢谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-07-18 00:36:51

到目前为止,我发现%y应该是%Y。最好的方法是一次对它进行一点测试。比如从datetime.strptime('07-17-2019', '%m-%d-%Y')开始。格林尼治时间-4也有问题。%z将匹配-0400罚款,%Z将匹配UTC、EST和其他,如果您想要包含夏时制的话,这可能要比偏移量更好,但是看起来这是您在strptime中得到的全部。

dateutil.parser.parse可能为您提供更多的选项和灵活性。

票数 1
EN

Stack Overflow用户

发布于 2019-07-18 02:03:55

我找到了一种方法来做这个,这不是超级灵活,但应该有一点给予。

第一,有几点:

  1. %y应该是%Y,以匹配4位数的年份.
  2. 使用24小时的AM/PM时间是令人困惑的,所以让我们忽略AM/PM。
  3. GMT-4不是标准的时区名称,因此我们需要手动处理它。
代码语言:javascript
复制
#!/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

附注:我用这些做了一些逆向工程。

代码语言:javascript
复制
tz = datetime.timezone(datetime.timedelta(hours=-4))
dt = datetime.datetime(2019, 7, 17, 23, 39, tzinfo=tz)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57085542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档