从python中的时区名称获取UTC偏移量

ale*_*rsh 60 python

如何在python中从时区名称获取UTC偏移量?

例如:我有Asia/Jerusalem,我想得到+0200

eum*_*iro 87

由于夏令时(夏令时),结果取决于一年中的时间:

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)
Run Code Online (Sandbox Code Playgroud)


Jon*_*eet 46

你尝试过使用pytz项目和utcoffset方法吗?

例如

>>> import datetime
>>> import pytz
>>> pacific_now = datetime.datetime.now(pytz.timezone('US/Pacific'))
>>> pacific_now.utcoffset().total_seconds()/60/60
-7.0
Run Code Online (Sandbox Code Playgroud)

  • 等等......什么?Jon Skeet?Python!= C#!!! 不抱怨,只是吓了一跳. (33认同)
  • 我不敢对他投反对票,但据我所知, utcoffset 是日期时间对象的一种方法,因此它不从时区名称提供此信息。 (3认同)
  • 请注意,如果服务器使用的时区不是给定的时区,则在夏令时切换期间会产生不正确的结果。传递给`timezone.utcoffset()` 的日期时间被假定为该时区的本地时间,并且如果超过夏令时开始或结束的小时,则会失败。`datetime.datetime.utcnow().replace(tzinfo=pytz.utc).astimezone(pytz.timezone('US/Pacific')).utcoffset().total_seconds() / 60 / 60` 是一个更好的方法。 (3认同)
  • 顺便说一下,pytz的Ubuntu包是python-tz. (2认同)