我想从Python获取系统的默认时区(PST)。最好的方法是什么?我想避免分支另一个过程。
答案 0 :(得分:83)
这应该有效:
import time
time.tzname
time.tzname
返回两个字符串的元组:第一个是本地非DST时区的名称,第二个是本地DST时区的名称。
示例返回:('MST', 'MDT')
答案 1 :(得分:22)
给出了像ThomasH的回答中的UTC偏移,但考虑了夏令时。
>>> import time
>>> offset = time.timezone if (time.localtime().tm_isdst == 0) else time.altzone
>>> offset / 60 / 60 * -1
-9
time.timezone
或time.altzone
的值以UTC为单位的秒数(UTC以东的区域为负值)。这与我们实际喜欢它的方式相反,因此* -1。
time.localtime().tm_isdst
将为零(尽管如果某个地区最近更改了其夏令时法,这可能不正确)。
答案 2 :(得分:14)
答案 3 :(得分:10)
用于计算偏移量的代码段不正确,请参阅http://bugs.python.org/issue7229。
处理此问题的正确方法是:
def local_time_offset(t=None):
"""Return offset of local zone from GMT, either at present or at time t."""
# python2.3 localtime() can't take None
if t is None:
t = time.time()
if time.localtime(t).tm_isdst and time.daylight:
return -time.altzone
else:
return -time.timezone
这很有可能,不是OP提出的确切问题,但页面上有两个不正确的片段,时间错误很难追踪和修复。
答案 4 :(得分:4)
我发现这很好用:
import datetime
tz_string = datetime.datetime.now(datetime.timezone.utc).astimezone().tzname()
对我来说,这能够区分夏令时与否。
答案 5 :(得分:3)
如果您更喜欢UTC偏移字符串:
time.timezone / -(60*60)
答案 6 :(得分:2)
要获取datetime.tzinfo
对象形式的时区信息,请使用dateutil.tz.tzlocal()
:
from dateutil import tz
myTimeZone = tz.tzlocal()
该对象可以在datetime.datetime.now()
的tz
参数中使用:
from datetime import datetime
from dateutil import tz
localisedDatetime = datetime.now(tz = tz.tzlocal())
或datetime.datetime.astimezone()
的tz
对象的datetime
参数:
from datetime import datetime
from dateutil import tz
unlocalisedDatetime = datetime.now()
localisedDatetime = unlocalisedDatetime.astimezone(tz = tz.tzlocal())
答案 7 :(得分:1)
从UTC得到的偏移量为timedelta
:
from datetime import datetime, timezone
now = datetime.now()
now.replace(tzinfo=timezone.utc) - now.astimezone(timezone.utc)
或者这样(比较晦涩,但也可以):
datetime.now(timezone.utc).astimezone().tzinfo.utcoffset(None)
两个解决方案都给出相同的结果。例如:datetime.timedelta(seconds=7200)
答案 8 :(得分:1)
对于Python 3.6+,可以通过以下代码轻松实现:
import datetime
local_timezone = datetime.datetime.utcnow().astimezone().tzinfo
print(local_timezone)
但是对于Python <3.6,在朴素的日期时间调用astimezone()
无效。因此,我们必须以一种略有不同的方式来做到这一点。
对于Python 3.x,
import datetime
local_timezone = datetime.datetime.now(datetime.timezone.utc).astimezone().tzinfo
print(local_timezone)
样本输出:
在荷兰服务器(Python 3.6.9)上:
CEST
在孟加拉国服务器(Python 3.8.2)上:
+06
可以在此thread上找到更多详细信息。