【问题标题】:Parsing Datetime in Python with timezone使用时区在 Python 中解析日期时间
【发布时间】:2018-01-01 11:24:23
【问题描述】:

如何用时区解析这个日期和时间?

date_time=datetime.strptime("2017-06-04T01:00:00+04:00", '%Y-%m-%dT%H:%M:%S%Z')

我收到类似

的错误

ValueError: time data '2017-06-04T01:00:00+04:00' does not match format '%Y-%m-%dT%H:%M:%S %Z'

当我删除“%Z”时,错误就像

ValueError: unconverted data remains: +04:00

我认为错误在于格式化时区。请帮忙。

【问题讨论】:

    标签: python-3.x parsing datetime timezone utc


    【解决方案1】:

    对这种形式的时区使用小写 z

    date_time=datetime.strptime("2017-06-04T01:00:00+04:00", '%Y-%m-%dT%H:%M:%S%z')
    

    【讨论】:

      【解决方案2】:

      你可以使用dateutil package解析

      import dateutil.parser
      
      dateutil.parser.parse('2008-09-03T20:56:35.450686Z')
      
      datetime.datetime(2017, 6, 4, 1, 0, tzinfo=tzoffset(None, 14400))
      

      用于安装包

      pip install python-dateutil
      

      【讨论】:

        【解决方案3】:

        在我看来,strptime 没有处理这种格式的时区信息的指令。表示时区的字符串部分需要不带冒号。

        >>> from datetime import datetime
        >>> datetime.strptime("2017-06-04T01:00:00+0400", '%Y-%m-%dT%H:%M:%S%z')
        datetime.datetime(2017, 6, 4, 1, 0, tzinfo=datetime.timezone(datetime.timedelta(0, 14400)))
        

        您当然可以安排使用正则表达式预处理日期:

        >>> re.sub(r'(?<=[+=][0-9]{2}):', '', "2017-06-04T01:00:00+04:00")
        '2017-06-04T01:00:00+0400'
        

        如果您可以允许自己使用不属于标准发行版的库,那么箭头将适合此,因为它特别适合时间戳。

        >>> import arrow
        >>> arrow.get("2017-06-04T01:00:00+04:00")
        <Arrow [2017-06-04T01:00:00+04:00]>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-28
          • 2016-06-08
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-07-15
          • 2022-01-22
          相关资源
          最近更新 更多