10.28.2014

Python: How to Parse DateTime with Local Timezone

Python: ローカルのタイムゾーン情報付きで日時表記文字列を読み込む

 

Python の datetime クラスは、"naive" と "aware" の 2種類の顔を持つ。

"aware" な datetime はタイムゾーンの情報を持ち、"naive" は持たない。

プログラム内部では "aware" な datetime を利用し、"naive" は入出力境界のみにとどめるのがセオリーだ。

 

タイムゾーンの自動認識には、dateutil.tz.tzlocal を使うのが最も適当な様子。

たとえば datetime.strptime を使って日時を認識するコードは以下のようになる。

>>> from datetime import datetime
>>> from dateutil.tz import tzlocal
>>> t = datetime.strptime('201410281234', '%Y%m%d%H%M').replace(tzinfo=tzlocal())
>>> t
datetime.datetime(2014, 10, 28, 12, 34, tzinfo=tzlocal())

datetime#astimezone を使ってタイムゾーンを変更する。

>>> import pytz
>>> t.astimezone(pytz.utc)
datetime.datetime(2014, 10, 28, 3, 34, tzinfo=<UTC>)

epoch time への変換には一手間かかる。calendar.timegm を使うのがベストプラクティスのようだ。

>>> import calendar
>>> calendar.timegm(t.timetuple())
1414499640
>>> calendar.timegm(t.astimezone(pytz.utc).timetuple())
1414467240

0 件のコメント:

コメントを投稿