以编程方式获得时钟变化的时间

时间:2014-04-13 17:11:57

标签: java datetime timezone dst

我对时区和国家的时间变化感到困惑。上午7点,纽约时间上午10点改变时间。

如何在加利福尼亚州接下来的时间发生变化时以编程方式获取信息?

1 个答案:

答案 0 :(得分:4)

要查找DST转换,您可以访问Olson timezone database,例如,在Python中查找下一次DST转换的时间:

#!/usr/bin/env python
from bisect import bisect
from datetime import datetime
import pytz # $ pip install pytz

def next_dst(tz):    
    dst_transitions = getattr(tz, '_utc_transition_times', [])
    index = bisect(dst_transitions, datetime.utcnow())
    if 0 <= index < len(dst_transitions):
        return dst_transitions[index].replace(tzinfo=pytz.utc).astimezone(tz)
例如,在洛杉矶:

dt = next_dst(pytz.timezone('America/Los_Angeles'))
print(dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'))

输出:

2014-11-02 01:00:00 PST-0800

或在当地时区:

from tzlocal import get_localzone # $ pip install tzlocal

dt = next_dst(get_localzone())
if dt is not None:
   print(dt.strftime('%Y-%m-%d %H:%M:%S %Z%z'))
else:
   print("no future DST transitions")