当前是否有特定时区正在使用夏令时?

16

我应该如何让我的Python脚本检查一个存储在变量中的特定时区目前是否使用夏令时?我的服务器设置为UTC。例如,我有:

zonename = Pacific/Wallis

我想运行查询以确定当前是否使用夏令时,并希望回复返回true或false。

2个回答

19
from pytz import timezone
from datetime import datetime

zonename = "Pacific/Wallis"
now = datetime.now(tz=timezone(zonename))
dst_timedelta = now.dst()
### dst_timedelta is offset to the winter time, 
### thus timedelta(0) for winter time and timedelta(0, 3600) for DST; 
### it returns None if timezone is not set

print "DST" if dst_timedelta else "no DST"

另一种选择是使用:

now.timetuple().tm_isdst 

值可以为以下三个之一:0 表示无夏令时,1 表示使用夏令时,-1 表示未设置时区。


我的(独立)解决方案与重复的问题非常相似(包括变量名称)。 - jfs
@J.F.Sebastian:“做一件事应该有一种——最好只有一种——显而易见的方法。” [PEP-20,也称Python之禅] ;-) - vartec
2
这就是为什么我喜欢Python :) - jfs
如何鉴别在不使用夏令时的时区中,tm_isdst = 0代表当前时间是不是夏令时,和那些从不使用夏令时的时区?输入:datetime.datetime.now(pytz.timezone('Asia/Kolkata')).timetuple().tm_isdst输出:0输入:datetime.datetime.now(pytz.timezone('Australia/Melbourne')).timetuple().tm_isdst输出:0 - Deepak

3

Python 3.9添加了zoneinfo模块,用于替换pytz。以下是现代Python版本的新更新版本。

from zoneinfo import ZoneInfo
from datetime import datetime

bool(datetime.now(tz=ZoneInfo("America/Chicago")).dst())

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接