我在尝试进行时出现以下错误
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'
如果您使用的是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)))
不幸的是,您必须从偏移量中去掉冒号(:
)才能按预期工作。
这适用于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
考虑使用日期解析器:
>>> 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)