【问题标题】:How to parse a string like '2016-08-01 13:39:00+05:30' into datetime object of python如何将像'2016-08-01 13:39:00+05:30'这样的字符串解析为python的日期时间对象
【发布时间】:2016-08-01 08:45:09
【问题描述】:

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

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'

【问题讨论】:

  • 尝试删除 %S 和 %z 之间的空白
  • + 将 '/' 替换为 '-'
  • 没有工作...ValueError:时间数据'2016-08-01 13:39:00+05:30'与格式'%Y-%m-%d %H'不匹配:%M:%S%z'
  • 我把'/'换成了'-',还是不行

标签: python datetime


【解决方案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)))

不幸的是,您必须从偏移量中去掉冒号 (:) 才能按预期工作。

【讨论】:

    【解决方案2】:

    这适用于 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
    

    【讨论】:

    • @DombiSzabolcs %z 使用 +HHMM 或 -HHMM 形式
    • 要使其正常工作,您应该删除最后一个 ':' time2 = ':'.join(time1.split(':')[:-1]) + time1.split(':')[-1]
    • 是的,我不假思索地修改了输入数据,打印出来的值不能被datetime解析回来是不是很奇怪? python没有错误或改进吗?
    【解决方案3】:

    考虑使用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)
    

    【讨论】:

      猜你喜欢
      • 2023-03-29
      • 1970-01-01
      • 2020-03-18
      • 1970-01-01
      • 1970-01-01
      • 2016-12-16
      • 2020-05-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多