web-dev-qa-db-ja.com

pytzタイムゾーンの一般名を取得する方法。アメリカ/ニューヨークのEST / EDT

特定のユーザーのpytzタイムゾーン(オフセットから計算)を指定すると、そのタイムゾーンの共通名を表示したいと思います。スペルの代わりに[〜#〜] est [〜#〜]または[〜#〜] pst [〜#〜]を参照することに慣れている人を想定しているAmerica/NewYorkのように。

Pytzは標準的な名前をどこかに教えてくれますか、それともテーブルから手動で行う必要がありますか?たとえば場所がシーズン中にESTになり、他の期間中にEDTを表示するようになるため、これは混乱する可能性があります。

35
Sidmitra

特定のユーザーのpytzタイムゾーン(オフセットから計算)を指定すると、そのタイムゾーンの共通名を表示したいと思います。私は、人々がアメリカ/ニューヨークのように綴られるよりも、ESTまたはPSTを見ることに慣れていると思います。

これが必要な場合は、datetimeでローカライズされたpytzオブジェクトから派生します...

>>> import pytz as tz
>>> from datetime import datetime as dt
>>> CT = tz.timezone('America/Chicago')
>>>
>>> summer_day = dt(2010, 7, 4, 0, 1, 1)
>>> bar = CT.localize(summer_day, is_dst=None)
>>> bar.tzname()
'CDT'
>>>
>>> christmas = dt(2010, 12, 25, 0, 1, 1)
>>> foo = CT.localize(christmas, is_dst=None)
>>> foo.tzname()
'CST'
>>> 
37
Mike Pennington

tzinfoインスタンスのtzname()メソッドを使用できます。

>>> tz = timezone('America/St_Johns')
>>> normal = datetime(2009, 9, 1)
>>> tz.tzname(normal, is_dst=False)
'NDT'
6

あなたが略語を探しているなら、頭に浮かぶいくつかの方法があります。

最初は:

>>> from pytz import timezone
>>> eastern = timezone('US/Eastern')
>>> eastern._tzname
'EST'

それは前の単一の下線でプロパティを参照するので、それはプライベートであると考えられるかもしれません、そしてそれをつかむのに最適な場所ではないかもしれません。もう1つは、ローカライズされた日時オブジェクトからのものです。

>>> from datetime import datetime
>>> loc_dt = eastern.localize(datetime.now())
>>> loc_dt.strftime('%Z')
'EST'
4
Philip Southam

これは、この質問が最初に書かれたときはなかったかもしれませんが、タイムゾーンの正式名称を取得するためのスニペットを次に示します。

_>>> eastern = timezone('US/Eastern')
>>> eastern.zone
'US/Eastern'
_

さらに、これはナイーブでない日時オブジェクト(実際のタイムゾーンがpytz.<timezone>.localize(<datetime_object>)またはdatetime_object.astimezone(pytz.<timezone>)を使用して次のように設定されている日時)で使用できます。

_>>> import datetime, pytz
>>> todaynow = datetime.datetime.now(tz=pytz.timezone('US/Hawaii'))
>>> todaynow.tzinfo # turned into a string, it can be split/parsed
<DstTzInfo 'US/Hawaii' HST-1 day, 14:00:00 STD>
>>> todaynow.strftime("%Z")
'HST'
>>> todaynow.tzinfo.zone
'US/Hawaii'
_

もちろん、これはここに上陸した検索エンジンのユーザーを教育するためのものです。 ...詳細は pytzモジュールサイト を参照してください。

1
ingyhere