2016-04-07 3 views
1

Pythonのタイムゾーン以下の例を考えると認識して日時とUTCの変換

import datetime 
import pprint 
import time 

now_unaware = datetime.datetime.now() 
print "Time gotten from the OS: " 
pprint.pprint now_unaware     
    #OUTPUT: datetime.datetime(2016, 4, 7, 17, 4, 54, 689054) 
    #COMMENT: The time is correct for the zone, but now_unaware doesn't explicitly know what zone is this. 
print "My timezone:" 
pprint.pprint(time.tzname[time.daylight]) 
    ##OUTPUT: 'CEST' 

確認したり、私の仮定を反証してください。私は十分な情報を持っていなければならない上に、上記の情報が与えられ

仮定

:「CEST」は明確に関係を定義するため

  • は、任意のタイムゾーンのハードコーディングせずにタイムゾーンのnow_unawareを認識させます
  • 追加ライブラリをインポートせずにnow_unawareをUTCに変換できるようにする
  • は、上記の情報与えられ、これを行うことができないが、Pythonの設計上の欠陥または

答えて

1

あなたの最初の仮定が正しい問題に近づいて上の間違った考え方のどちらかです。あなたがにローカライズしたいと思うように聞こえます。あなたの未知の時間オブジェクト。

あなたの2番目の仮定は多少正しいです。 Python 3では、datetime.timezoneのおかげで、標準ライブラリのみでタイムゾーンを扱う方が簡単です。

しかし、Python 2では、標準ライブラリだけでは簡単にはできません。 tzinfoをサブクラス化する必要があります。 tzinfoリンクの "Example tzinfo classes"を見てください。

最後に、問題に近づくための正しい考え方があります。実際には、標準ライブラリを使用してこれを行うだけでいいです。私はPython 3がこれを扱っていると思います。そのため、Python 2のユーザーはpytzパッケージをプロジェクトに追加する傾向があります。

興味がありましたら、それについての長い議論がありますhere

+0

「CEST」で動作するpytzのリファレンスはありますか? – TheMeaningfulEngineer

+0

@Alan申し訳ありませんが、私は以前CESTとpytzで働いていません。この[質問](http://stackoverflow.com/q/10913986/245915)が役に立ちます。 – nofinator

関連する問題