将字符串字符串转换为datetime对象

时间:2014-10-08 07:14:02

标签: python string datetime

我的字符串是,

str='2014-09-24T15:18:57+0000'

我正在尝试将此字符串转换为有效的datetime对象。怎么做?

我尝试的是,

>>> from datetime import datetime
>>> datetime.strptime(str,'%Y-%m-%dT%H:%M:%S')

Traceback (most recent call last):
  File "<pyshell#9>", line 1, in <module>
    datetime.strptime(str,'%Y-%m-%dT%H:%M:%S')
  File "C:\Python27\lib\_strptime.py", line 328, in _strptime
    data_string[found.end():])
ValueError: unconverted data remains: +0000

但是当我尝试将字符串更改为str='2014-09-24T15:18:57'时,它可以正常工作,

>>> datetime.strptime('2014-09-24T15:18:57','%Y-%m-%dT%H:%M:%S')
datetime.datetime(2014, 9, 24, 15, 18, 57)

+0000出了什么问题,如何避免第一次出错?

4 个答案:

答案 0 :(得分:2)

如何添加代表UTC offset in the form +HHMM or -HHMM (empty string if the the object is naive)

的模式%z

因此模式看起来像%Y-%m-%dT%H:%M:%S%z

如果您不想+0000并且它始终位于str,您可以将代码更改为datetime.strptime(str[:-5],'%Y-%m-%dT%H:%M:%S')

答案 1 :(得分:0)

你有一个字符串和这种模式

2014-09-24T15:18:57+0000
%Y  -%m-%dT%H:%M:%S[    ]

你错过了+0000

两个选项:

  1. 摆脱+0000
  2. 为您的模式添加内容

答案 2 :(得分:0)

试试这个:

import datetime
dt_str='2014-09-24T15:18:57+0000'
new_dt = dt_str[:19]
dt = datetime.datetime.strptime(new_dt, '%Y-%m-%dT%H:%M:%S')

答案 3 :(得分:0)

  

+0000有什么问题,如何避免第一次错误?

+0000是UTC偏移量,您可以使用%z指令来解析它(自Python 3.2起):

>>> from datetime import datetime
>>> time_string = '2014-09-24T15:18:57+0000'
>>> datetime.strptime(time_string, '%Y-%m-%dT%H:%M:%S%z')
datetime.datetime(2014, 9, 24, 15, 18, 57, tzinfo=datetime.timezone.utc)
旧的Python版本不提供

%z。如果所有时间戳都具有相同的UTC偏移量+0000,那么您可以将其解析为:

>>> datetime.strptime(time_string, '%Y-%m-%dT%H:%M:%S+0000')
datetime.datetime(2014, 9, 24, 15, 18, 57)

注意:该值是一个天真的日期时间对象(没有时区信息)。 要附加tzinfo,请使用How to parse dates with -0400 timezone string in python?