Email や RSS2.0 などで使われている
‘Sun, 16 Jun 2013 14:05:15 +0000′
といった表記を python で扱うときにちょっと悩んだ。
大きな流れとしては、
– time.struct_time型に変換
– timestampに変換
– datetimeに変換
1. time.struct_time型に変換
>>> from email.utils import parsedate >>> parsedate('Sun, 16 Jun 2013 14:05:15 +0000') (2013, 6, 16, 14, 5, 15, 0, 1, -1)
2. timestampに変換
struct_time型は、time.mktime() の引数にできるので、前述の戻り値を渡す。
>>> from email.utils import parsedate >>> from time import mktime >>> timestamp = mktime(parsedate('Sun, 16 Jun 2013 14:05:15 +0000'))
3. datetimeに変換
timestamp を fromtimestamp() に渡す。
>>> import datetime >>> datetime.datetime.fromtimestamp(timestamp) datetime.datetime(2013, 6, 16, 14, 5, 15)
Google App Engineのデータストアに格納する際に、
時刻フィールドを「DateTimeProperty」にしたかったので、
このような処理を施した。
実は、手順1. で parsedate()を使っているのは、
タイムゾーン表記「+0000」部分を無視している。
parsedate_tz() を使うと、タイムゾーンも取り込めるのだけど、
そのままでは、mktimeに渡せない。
うまくdatetimeに変換できる方法があれば、教えてもらいたい。m(_ _)m