如何检查夏令时是否生效?
发布于 2010-05-21 09:48:41
您可以使用time.localtime
并查看返回值中的tm_isdst
标志。
>>> import time
>>> time.localtime()
(2010, 5, 21, 21, 48, 51, 4, 141, 0)
>>> _.tm_isdst
0
使用time.localtime()
,您可以在任意时间问相同的问题,以查看夏令时是否对您的当前时区有效。
发布于 2019-04-17 20:10:27
如果您在笔记本电脑上运行代码,那么公认的答案很好,但大多数python应用程序运行在使用UTC作为本地时间的服务器上,因此根据公认的答案,它们永远不会在夏令时。
第二个问题是,不同地区在不同的日期和时间实施夏令时。因此,即使你有一个明确的时间,比如datetime.utcnow()
,它可能是一个时区的夏令时,而不是另一个时区的夏令时。
我们能做的最好的事情就是告诉你在夏令时某一特定时区某一给定的时间是否发生了,而我所能找到的最好的方法已经被pytz localize
函数实现了,我们可以用它来得到一个在笔记本电脑和服务器上都能工作的很好的答案。
import pytz
from datetime import datetime
def is_dst(dt=None, timezone="UTC"):
if dt is None:
dt = datetime.utcnow()
timezone = pytz.timezone(timezone)
timezone_aware_date = timezone.localize(dt, is_dst=None)
return timezone_aware_date.tzinfo._dst.seconds != 0
一些例子
>>> is_dst() # it is never DST in UTC
False
>>> is_dst(datetime(2019, 1, 1), timezone="US/Pacific")
False
>>> is_dst(datetime(2019, 4, 1), timezone="US/Pacific")
True
>>> is_dst(datetime(2019, 3, 10, 2), timezone="US/Pacific")
NonExistentTimeError
>>> is_dst(datetime(2019, 11, 3, 1), timezone="US/Pacific")
AmbiguousTimeError
在我们的is_dst
函数中,我们将is_dst=None
指定为timezone.localize
的参数,这将导致无意义的抛出错误。您可以使用is_dst=False
忽略这些错误,并在这些时候返回False
。
发布于 2020-02-11 13:07:09
假设您想要在datetime
上执行此操作
使用pytz
使其能够识别时区,然后检查其dst
属性:
import datetime
import pytz
def is_dst(dt,timeZone):
aware_dt = timeZone.localize(dt)
return aware_dt.dst() != datetime.timedelta(0,0)
timeZone = pytz.timezone("Europe/London")
dt = datetime.datetime(2019,8,2)
is_dst(dt,timeZone)
True
dt = datetime.datetime(2019,2,2)
is_dst(dt,timeZone)
False
https://stackoverflow.com/questions/2881025
复制