我正在尝试从时间数据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
。有人可以帮忙吗?
答案 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 %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模块的解析函数,这是直截了当的。
>>> 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')