Python – 日付と時間を扱う datetime オブジェクト タイムゾーン
2009年6月12日 2:35 AM by Abalone




昨日datetimeクラスを使ってみた。
簡単に日時を扱えそうというのは分かったので、次はタイムゾーンを使ってみる。

タイムゾーンをdatetimeオブジェクトで使うためには、まず、datetimeモジュールのサブクラス、tzinfoクラスを継承したクラスを自分で作成し、必要なメソッドを実装する。

class GMT(datetime.tzinfo):
    def utcoffset(self,dt):
        return datetime.timedelta(hours=0)
    def dst(self,dt):
        return datetime.timedelta(0)
    def tzname(self,dt):
        return "GMT"


これを、datetimeオブジェクトのコンストラクタに渡すと、そのタイムゾーンでdeltatimeオブジェクトが生成される。

  dt = datetime.datetime(2009,06,12,1,34,45,0,GMT())
  print dt


この実行結果は、

2009-06-12 01:34:45+00:00

こんな風になる。tzinfoにGMTオブジェクトを渡したので、GMT時間として扱われている。さらにJSTクラスを定義してみる。

class JST(datetime.tzinfo):
    def utcoffset(self,dt):
        return datetime.timedelta(hours=9)
    def dst(self,dt):
        return datetime.timedelta(0)
    def tzname(self,dt):
        return "JST"


このJSTクラスを使って、上のやつと同じことをしてみると、次のようになる。

  dt = datetime.datetime(2009,06,12,1,34,45,0,JST())
  print dt


この実行結果は以下。

2009-06-12 01:34:45+09:00

日本時間として扱われている。これを、datetimeクラスのastimezone()メソッドで、GMT時間に変換したdatetimeオブジェクトを生成してみる。

  dt2 = dt.astimezone(GMT())
  print dt2


この実行結果は、以下の通り。

  2009-06-11 16:34:45+00:00

日付の変更も含めて、GMT時間に変更されている。
こんな感じでdatetimeオブジェクトを使ってタイムゾーンを扱うことができる。





トラックバックURL


この記事に対するコメント/トラックバックはまだありません


コメントをどうぞ

お名前(必須)
Eメールアドレス(公開されません)(必須)