Python& pytz:确定时区是否支持DST以及DST和非DST UTC偏移是什么

时间:2012-12-12 15:14:35

标签: python pytz

我正在使用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获取此信息。

2 个答案:

答案 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)