3

私はpython 2.7.3とpytzを使用しています。

地域を表す特定のタイムゾーン (アメリカ/ニューヨークなど) について、そのタイムゾーンが 1 年の一部に DST を遵守しているかどうかを知りたいです。現在有効なタイムゾーンの定義が気になります。質問を言い換えると、現在のタイムゾーンの定義が与えられた場合、このタイムゾーンは次の 365 日以内に DST を観測する (または観測を停止する) ことになりますか?

さらに、DST を観察している場合のこのタイムゾーンの UTC からのオフセットと、DST を観察していない場合のオフセットを知りたいです。

最後に、特定のタイムゾーンが現在 DST を遵守しているかどうかを知りたいです。

最終的な目標は、次のようなリストを生成することです。

Name                    Observes DST     DST Offset     non-DST Offset   Presently DST
--------------------------------------------------------------------------------------
America/New_York        Yes              6              5                No

pytz からこの情報を取得する方法がわかりません。

4

2 に答える 2

1

私の知る限り、パブリックインターフェイスはありません。インスタンス(およびそのサブクラス)_utc_transition_timesに存在する属性を検査できます。DstTzInfo

于 2012-12-12T15:59:46.580 に答える
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)
于 2013-03-26T22:20:15.200 に答える