[英]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
以与时间字符串匹配。 另外,您需要从输入中删除last :
以便与%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
以匹配确切的日期分隔符和时区顺序(无空格)。
%z
(小写)UTC偏移量,格式为+ HHMM或-HHMM(如果对象是天真对象,则为空字符串)。 (空),+ 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')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.