从 python 中的时间格式解析和提取值

Parse and extract values from time format in python

我正在尝试从我的时间数据中解析和提取值 2018-03-11 13:15:31.734874+01:00

我正在使用 strptime()%Y %m %d %H:%M:%S.%f %Z 格式执行此操作,但出现此错误:

ValueError: time data '2018-03-11 13:15:31.734874+01:00' does not match format '%Y %m %d %H:%M:%S.%f %Z'

此外,我不知道如何处理我的时间数据中的 +1:00。有人可以帮忙吗?

%Y %m %d 应更改为 %Y-%m-%d 以匹配时间字符串。此外,您需要从输入中删除最后一个 : 以与 %z 一起使用。

这是你应该做的:

import datetime
s = '2018-03-11 13:15:31.734874+01:00'
print(datetime.datetime.strptime(''.join(s.rsplit(':', 1)), '%Y-%m-%d %H:%M:%S.%f%z'))

# 2018-03-11 13:15:31.734874+01:00

最初:

%Y %m %d 将不匹配 2018-03-11。您需要使其适应时间字符串! %Y-%m-%d 相反应该工作。

其次:

如果您在 python3,则为时间戳添加了 %z。但是时间戳必须没有冒号,例如+0100 而不是 +01:00。因此,如果您使用 python3 这有效:

>>> time_string = '2018-03-11 13:15:31.734874+01:00'
>>> time_string = ''.join(time_string.rsplit(':', 1))

>>> datetime.datetime.strptime(time_string, '%Y-%m-%d %H:%M:%S.%f%z')
datetime.datetime(2018, 3, 11, 13, 15, 31, 734874, tzinfo=datetime.timezone(datetime.timedelta(0, 3600)))

顺便说一下,编辑后的 ​​time_string 看起来像这样:

>>> time_string
'2018-03-11 13:15:31.734874+0100'

如果是python2%z就不行了,这里要用到dateutil模块的parse函数,是直截了当的。

>>> from dateutil.parser import parse
>>> parse('2018-03-11 13:15:31.734874+01:00')
datetime.datetime(2018, 3, 11, 13, 15, 31, 734874, tzinfo=tzoffset(None, 3600))

这里有两个问题需要解决

首先是格式字符串。它应该是 %Y-%m-%d %H:%M:%S.%f%z 以匹配确切的日期分隔符和时区序列(没有 space)。

From strftime and strptime Behavior:

%z (lower case) UTC offset in the form +HHMM or -HHMM (empty string if the object is naive). (empty), +0000, -0400, +1030

第二个是时区偏移“+01:00”中的冒号 (:)。可以使用子字符串将其省略:s[:-3]+s[-2:] 或字符串替换。

所以最终答案如下

from datetime import datetime
s = '2018-03-11 13:15:31.734874+01:00'
datetime.strptime(s[:-3]+s[-2:], '%Y-%m-%d %H:%M:%S.%f%z')