2012-12-21 2 views

答えて

47

をタイムゾーン情報tzを追加する方法

d = datetime.datetime.now() 
tz = pytz.timezone('Asia/Taipei') 

documentation

最初に、pytzライブラリによって提供されるlocalize()メソッドを使用します。これは、(なしタイムゾーン情報と日時)ナイーブ日時をローカライズするために使用されています。あなたがいない使用tz.localize()を行う場合

>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0)) 
>>> print(loc_dt.strftime(fmt)) 
2002-10-27 06:00:00 EST-0500 

が、datetime.replace()を使用し、チャンスはオフセット歴史が代わりに使用されていることです; tz.localize()は、指定された日付に有効な正しいオフセットを選択します。たとえば、米国東部標準時のDSTの開始日と終了日が時間とともに変化しています。

夏時間から冬時間またはその逆の遷移期間に跨っているためにあいまいなdatetime値をローカライズしようとすると、結果として得られるdatetimeオブジェクトに.dst()がTrueまたはFalseを返すかどうかを確認するためにタイムゾーンを調べます。

dt = tz.localize(naive, is_dst=True) 

あるいはis_dst=Noneを設定することにより、完全な選択をオフに:あなたは.localize()ためis_dstキーワード引数とタイムゾーンのデフォルトを上書きすることができます。その場合、まれに、で、タイムゾーンにデフォルトが設定されていないと、あいまいな日時値によってAmbiguousTimeError例外が発生します。 is_dstフラグは、あいまいなdatetime値に対してのみ参照され、それ以外の場合は無視されます。

は、他の道を戻ってナイーブオブジェクトに戻ってタイムゾーンを意識したオブジェクトを有効にするには、使用.replace(tzinfo=None)

naivedt = awaredt.replace(tzinfo=None) 
+0

完璧なソリューション、ありがとう。 – waitingkuo

+0

tzinfoを持つ 'datetime'から素朴な' datetime'を得る便利な方法はありますか? – waitingkuo

+4

@waitingkuo: 'datetime'オブジェクトの' .replace(tzinfo = None) 'を呼び出します。戻り値は素朴な 'datetime'インスタンスです。 –

2

あなたは、元の日時はあなたが時間帯に「測定」であったことがわかっている場合それに追加しようとすると、localizeではなくreplaceを使用することができます(ただし、おそらくそうはなりません)。お使いのサーバーのロケールが正しくないタイムゾーンに設定されていて、datetimeを修正しようとしている

  1. # d = datetime.datetime.now() 
    # tz = pytz.timezone('Asia/Taipei') 
    d = d.replace(tzinfo=tz) 
    

    私は、これは意味をなさない可能性がある2回(1秒が私に起こった)想像することができますこの誤ったタイムゾーンを認識させることで、おそらく "正しい"タイムゾーンにローカライズしてnow()の値が他の時刻と一致するようにする(

  2. 「タグ」にtimeインスタンス(NOT a datetime)とtime zone(tzinfo)属性を使用して、属性を後でフルdatetimeインスタンスを形成するために使用できるようにします。
関連する問題