我正在使用python 2.7.3和pytz。
对于描述某个地区(例如America / New_York)的给定时区,我想知道时区是否在一年中的某些时间观察到夏令时。我关心现在的时区定义。为了重新解释这个问题,根据目前的时区定义,这个时区观察员会在接下来的365天内DST(或停止观察它)吗?
此外,我想知道在观察DST时此时区的UTC偏移量是什么,以及当它没有观察到DST时的偏移量。
最后,我想知道某个时区目前是否正在观察夏令时。
最终目标是生成如下列表:
Name Observes DST DST Offset non-DST Offset Presently DST
--------------------------------------------------------------------------------------
America/New_York Yes 6 5 No
我无法弄清楚如何从pytz获取此信息。
答案 0 :(得分:1)
据我所知,没有公共界面。您可以检查_utc_transition_times
(及其子类)实例中存在的DstTzInfo
属性。
答案 1 :(得分:0)
我能够使用此功能解决此问题:
def get_tz_dst_info(tz):
"""
Gets a 3-tuple of info about DST for a timezone. The returned elements are:
- a boolean if this timezone observes DST
- a Decimal UTC offset when not in DST
- a Decimal UTC offset when in DST
>>> from pytz import timezone
>>> get_tz_dst_info(timezone('America/New_York'))
(True, Decimal('-4'), Decimal('-5'))
>>> get_tz_dst_info(timezone('Europe/Paris'))
(True, Decimal('2'), Decimal('1'))
>>> get_tz_dst_info(timezone('UTC'))
(False, Decimal('0'), Decimal('0'))
"""
dec_int_offset = timedelta_utc_offset_to_decimal(
tz.utcoffset(DECEMBER_DATE)
)
jul_int_offset = timedelta_utc_offset_to_decimal(tz.utcoffset(JULY_DATE))
jul_dst = tz.dst(JULY_DATE)
dec_dst = tz.dst(DECEMBER_DATE)
dst_offset = dec_int_offset
non_dst_offset = jul_int_offset
if jul_dst >= timedelta(seconds=0):
dst_offset = jul_int_offset
non_dst_offset = dec_int_offset
elif dec_dst >= timedelta(seconds=0):
dst_offset = jul_int_offset
non_dst_offset = dec_int_offset
return (dec_int_offset != jul_int_offset,
non_dst_offset,
dst_offset)