1

* (UTC +0) ヨーロッパ/ロンドンのように、 tz データベースのタイムゾーン リストに UTC オフセットを追加したい

タイムゾーンのリストにはpytz .common_timezones を使用しますが、タイムゾーン オブジェクトのすべてのメソッドが dt オブジェクト、時刻、オフセットを計算するタイミングを必要とするため、タイムゾーンの STD utcoffset を取得できません。

特定の日付を操作せずに pytz タイムゾーン オブジェクトから STD オフセットを取得することは可能ですか?

ありがとう!

4

1 に答える 1

3

pytz tzinfoオブジェクトには、STD と DST の境界を示す UTC 遷移時間が含まれています。ただし、この情報にアクセスするには、プライベート属性、特に , に浸る必要があり tzone._utc_transition_timesますtzone._transition_info。したがって、以下は脆弱 pytzです。将来のバージョンで同じ方法で同じ情報にアクセスできることを保証するものではありません。

それにもかかわらず、少なくとも pytz バージョン 2010b では、上記の属性を使用して、STD にあった最新の期間の日付を見つけることができます。その後、 を使用std_date.strftime('%z')してオフセットを印刷できます。

import pytz
import datetime as DT

NOW = DT.datetime.now()
ZERO = DT.timedelta(0)

for tname in pytz.common_timezones:
    tzone = pytz.timezone(tname)
    std_date = None
    try:
        for utcdate, info in zip(
                tzone._utc_transition_times, tzone._transition_info):
            utcoffset, dstoffset, tzname = info
            if dstoffset == ZERO:
                std_date = utcdate
            if utcdate > NOW:
                break
    except AttributeError:
        std_date = NOW
    std_date = tzone.localize(std_date)    
    print('{n} UTC{z}'.format(n=tname, z=std_date.strftime('%z')))

版画

Africa/Abidjan UTC+0000
Africa/Accra UTC+0000
Africa/Addis_Ababa UTC+0235
Africa/Algiers UTC+0000
Africa/Asmara UTC+0235
Africa/Bamako UTC+0000
Africa/Bangui UTC+0114
Africa/Banjul UTC+0000
...
于 2013-08-08T17:57:39.160 に答える