首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python夏令时

Python夏令时
EN

Stack Overflow用户
提问于 2010-05-21 17:45:16
回答 7查看 60.3K关注 0票数 60

如何检查夏令时是否生效?

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-05-21 17:48:41

您可以使用time.localtime并查看返回值中的tm_isdst标志。

代码语言:javascript
代码运行次数:0
运行
复制
>>> import time
>>> time.localtime()
(2010, 5, 21, 21, 48, 51, 4, 141, 0)
>>> _.tm_isdst
0

使用time.localtime(),您可以在任意时间问相同的问题,以查看夏令时是否对您的当前时区有效。

票数 75
EN

Stack Overflow用户

发布于 2019-04-18 04:10:27

如果您在笔记本电脑上运行代码,那么公认的答案很好,但大多数python应用程序运行在使用UTC作为本地时间的服务器上,因此根据公认的答案,它们永远不会在夏令时。

第二个问题是,不同地区在不同的日期和时间实施夏令时。因此,即使你有一个明确的时间,比如datetime.utcnow(),它可能是一个时区的夏令时,而不是另一个时区的夏令时。

我们能做的最好的事情就是告诉你在夏令时某一特定时区某一给定的时间是否发生了,而我所能找到的最好的方法已经被pytz localize函数实现了,我们可以用它来得到一个在笔记本电脑和服务器上都能工作的很好的答案。

代码语言:javascript
代码运行次数:0
运行
复制
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

一些例子

代码语言:javascript
代码运行次数: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

票数 34
EN

Stack Overflow用户

发布于 2020-02-11 21:07:09

假设您想要在datetime上执行此操作

使用pytz使其能够识别时区,然后检查其dst属性:

代码语言:javascript
代码运行次数:0
运行
复制
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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2881025

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档