【问题标题】:python get timezone value from datetime objectpython从日期时间对象获取时区值
【发布时间】:2017-11-22 20:44:05
【问题描述】:

有谁知道如何获取 ISO8601 时间戳的时区值(以分钟、小时等为单位)?我可以在 tzinfo 对象中看到它,但似乎无法获取该值。这是我到目前为止所做的,但是如何将值 -28800 放入变量中?

import dateutil.parser
import datetime
firststarttime = '2008-12-31T23:00:00-08:00'
datetime_obj = dateutil.parser.parse(firststarttime)
datetime_obj
Out[57]: datetime.datetime(2008, 12, 31, 23, 0, tzinfo=tzoffset(None, -28800))
datetime_obj.tzinfo
Out[46]: tzoffset(None, -28800)

【问题讨论】:

    标签: python datetime timezone iso8601


    【解决方案1】:

    只需使用(如果您使用的是 Python 2.7 或更高版本):

    datetime_obj.utcoffset().total_seconds()
    

    使用utcoffset() 获取timedelta,并使用total_seconds() 转换为秒。您可以阅读链接的文档,了解他们到底在做什么。

    如果您需要将此偏移量添加到其他一些datetime,那么您可以使用utcoffset() 来取回timedelta。虽然返回值可能看起来有点奇怪:

    datetime.timedelta(-1, 57600)  # equivelant to datetime.timedelta(seconds=-28800)
    

    这是因为timedelta 标准化负值的方式,这也在datetime.timedelta 中注明。

    【讨论】:

      【解决方案2】:

      问题是,这些值似乎是固定在该对象上的。 这不是最有效的方法,事实上,我很乐意知道其他答案,但是,这就是我的做法:

      import dateutil.parser
      import datetime
      import re
      firststarttime = '2008-12-31T23:00:00-08:00'
      datetime_obj = dateutil.parser.parse(firststarttime)
      s = str(datetime_obj.tzinfo)
      p = re.compile(",\s.?\d+")
      result = p.search(s).group()
      result = int(result[2:])
      

      打印

      print(result)
      >>> -28800 # as integer
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-11-09
        • 1970-01-01
        • 2011-05-05
        相关资源
        最近更新 更多