我正在尝试从我的时间数据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。有人能帮忙吗?
发布于 2018-03-11 17:19:50
这里有两个问题需要解决。
首先是格式字符串。应该是%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')发布于 2018-03-11 17:11:38
%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发布于 2018-03-11 17:15:41
一开始:
%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))https://stackoverflow.com/questions/49222571
复制相似问题