【发布时间】:2011-07-29 02:46:15
【问题描述】:
如何从 python 中的时区名称中获取 UTC 偏移量?
例如:我有Asia/Jerusalem,我想得到+0200
【问题讨论】:
-
对于 Python 3.9,您将使用
datetime.datetime.now(zoneinfo.ZoneInfo('Asia/Jerusalem')).utcoffset(),不需要任何第三方库。
标签: python
如何从 python 中的时区名称中获取 UTC 偏移量?
例如:我有Asia/Jerusalem,我想得到+0200
【问题讨论】:
datetime.datetime.now(zoneinfo.ZoneInfo('Asia/Jerusalem')).utcoffset(),不需要任何第三方库。
标签: python
由于 DST(夏令时),结果取决于一年中的时间:
import datetime, pytz
datetime.datetime.now(pytz.timezone('Asia/Jerusalem')).strftime('%z')
# returns '+0300' (because 'now' they have DST)
pytz.timezone('Asia/Jerusalem').localize(datetime.datetime(2011,1,1)).strftime('%z')
# returns '+0200' (because in January they didn't have DST)
【讨论】:
您是否尝试过使用pytz 项目和utcoffset method?
例如
>>> import datetime
>>> import pytz
>>> pacific_now = datetime.datetime.now(pytz.timezone('US/Pacific'))
>>> pacific_now.utcoffset().total_seconds()/60/60
-7.0
【讨论】:
tzinfo 对象。见pytz.sourceforge.net/#tzinfo-api
timezone.utcoffset() 的日期时间被假定为该时区的本地时间,如果超过夏令时开始或结束的时间,则将失败。 datetime.datetime.utcnow().replace(tzinfo=pytz.utc).astimezone(pytz.timezone('US/Pacific')).utcoffset().total_seconds() / 60 / 60 是更好的方法。
我在从 python 日期时间对象转换为 UTC 时间戳时遇到了类似的问题。我的日期时间与时区无关(非常幼稚),因此astimezone 不起作用。
为了缓解这个问题,我让我的 datetime 对象知道时区,然后使用上述魔法。
import pytz
system_tz = pytz.timezone(constants.TIME_ZONE)
localized_time = system_tz.localize(time_of_meeting)
fmt = "%Y%m%dT%H%M%S" + 'Z'
return localized_time.astimezone(pytz.utc).strftime(fmt)
在这里,constants.TIME_ZONE 是我的持久对象的默认时区。
希望这有助于尝试将 python 日期时间对象转换为 UTC 的人。转换后,按您喜欢的方式格式化。
【讨论】: