我在尝试执行此操作时遇到错误
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'
答案 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)