如何解析像#2016; 2016-08-01 13:39:00 + 05:30'到python的datetime对象

时间:2016-08-01 08:45:10

标签: python datetime

我在尝试执行此操作时遇到错误

from datetime import datetime 

time1 = '2016-08-01 13:39:00+05:30'
x = datetime.strptime(time1, '%Y-%m-%d %H:%M:%S %z')
print(x)

错误是......

ValueError: time data '2016-08-01 13:39:00+05:30' does not match format '%Y-%m-%d %H:%M:%S %z'

3 个答案:

答案 0 :(得分:1)

如果您使用的是Python 2或早期版本的Python 3(3.0和3.1),则可以使用dateutil库将字符串转换为时区感知对象。

执行此操作的代码很简单:

>>> import dateutil.parser
>>> dt = dateutil.parser.parse('2016-08-01 13:39:00+05:30')
>>> dt
datetime.datetime(2016, 8, 1, 13, 39, tzinfo=tzoffset(None, 19800))

如果您使用的是Python 3.2或更高版本,则在解析日期时会添加%z选项作为格式选项。您可以通过以下方式在这些版本中使用dateutil来完成此任务:

>>> import datetime
>>> dt = datetime.datetime.strptime('2016-08-01 13:39:00+0530', "%Y-%m-%d %H:%M:%S%z")
>>> dt
datetime.datetime(2016, 8, 1, 13, 39, tzinfo=datetime.timezone(datetime.timedelta(0, 19800)))

不幸的是,您必须从偏移量中剥离冒号(:),以使其按预期工作。

答案 1 :(得分:0)

这在python 3.4中有效,符合日期时间文档

from datetime import datetime

time1 = '2016-08-01 13:39:00+0530'
x = datetime.strptime(time1, '%Y-%m-%d %H:%M:%S%z')
print(x)

给出

2016-08-01 13:39:00+05:30

答案 2 :(得分:0)

考虑使用dateparser

>>> dateparser.parse('2016-08-01 13:39:00+05:30')
datetime.datetime(2016, 8, 1, 13, 39)
>>> dateparser.parse('2016-08-01 13:39:00+05:30', settings={'TO_TIMEZONE': 'UTC'})
datetime.datetime(2016, 8, 1, 8, 9)