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

时间:2018-03-11 16:54:48

标签: python strptime

我正在尝试从时间数据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。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:0)

%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

答案 1 :(得分:0)

起初:

%Y %m %d2018-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模块的解析函数,这是直截了当的。

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

答案 2 :(得分:0)

这里有两个问题需要解决。

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

From strftime and strptime Behavior:

  

%z(小写)UTC偏移量,格式为+ HHMM或-HHMM(如果对象天真,则为空字符串)。 (空),+ 0000,-0400,+ 1030

第二个是时区偏移'+01:00'中的冒号(:)。可以使用substring: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')