如何从日期时间对象获取时区偏移(以分钟为单位)?

问题描述 投票:0回答:2

有谁知道如何获取 ISO8601 时间戳的时区偏移值(以分钟、小时等为单位)?我可以在

tzinfo
对象中看到它,但似乎无法获取该值。这是我到目前为止所做的,但是如何将值 -28800 取出到变量中?

>>> import dateutil.parser
>>> import datetime
>>> firststarttime = '2008-12-31T23:00:00-08:00'
>>> datetime_obj = dateutil.parser.parse(firststarttime)
>>> datetime_obj
datetime.datetime(2008, 12, 31, 23, 0, tzinfo=tzoffset(None, -28800))
>>> datetime_obj.tzinfo
tzoffset(None, -28800)
python datetime timezone iso8601
2个回答
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


0
投票

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

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
© www.soinside.com 2019 - 2024. All rights reserved.