Python で日本時間を表示するには [プログラム三昧]
Python で日本時間を表示するには,何が必要なんでしょうか. この話題は,ググると,わんさか転がっているので,いまさら書かなくてもいいかな.
TZINFOという仕掛け
Pythonでは,夏時間などに代表される,どんなに無茶な時間制度にも対応できるように, "datetime.tzinfo" という abstract クラスが用意されています. このクラスを継承したクラスを準備するだけで,どの国の時間にも対応出来ます.
ただ,逆に言うと,このクラスを準備しないとローカルな時間には対応出来ないのです. そこで,必要最低限のメソッドを実装したクラスを作成してみました.
import datetime class JapanTZ(datetime.tzinfo): def tzname(self, dt): return "JST" def utcoffset(self, dt): return datetime.timedelta(hours=9) def dst(self, dt): return datetime.timedelta(0) print datetime.datetime.now(JapanTZ())
実装したメソッドは, tzname, utcoffset, dst の三つです. メソッドを呼び出す度にインスタンスを生成していますが,お気になさらぬよう.
最後の一行は,日本時間で現在時刻を表示します.
2010-01-18 23:14:24.841000+09:00
今ひとつ,あか抜けない表示ですが,まあ,いいでしょう. 表示方法を工夫したいときは, "datetime.strfdate" をご参照ください.
>>> print datetime.datetime.now(JapanTZ()).strftime("%Y-%m-%d %H:%M:%S %Z") 2010-01-18 23:34:27 JST
参考サイト
- 9.1. datetime — Basic date and time types
- "datetime" モジュールのマニュアルです. よく読んで理解した結果,自分でクラスを作成する必要があることがわかりました.
- World timezone definitions, modern and historical
- 2009年より以前の世界各国の "tzinof" 情報を詰め合わせたモジュールです. ただし,インストールが必要なので, Python に手を加えることができない,レンタルサーバなどで使用することはできません. そんな時は,自分で作るか,あきらめて UTC を使いましょう.
参考文献
ウサギ本には, "dateutil" というパッケージが紹介されていますが,これもインストールしなきゃ使えないみたいです. そもそも, Time Zone の話が少なすぎます.
コメント 0