繁体   English   中英

在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以与时间字符串匹配。 另外,您需要从输入中删除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 %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模块的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以匹配确切的日期分隔符和时区顺序(无空格)。

从strftime和strptime行为:

%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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM