如何将像'2016-08-01 13:39:00+05:30'这样的字符串解析为 python 的日期时间对象



我在尝试进行时出现以下错误

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)

相关内容

  • 没有找到相关文章