Google App Engine の時刻表示について
「一度、UTC をセットしてから JST で取り出す。」
Google App Engine では、"create_date = db.DateTimeProperty(auto_now_add=True)" のように記述したモデルのプロパティを取り出すと、タイムゾーンの設定されていない naive な datetime となる。
値は UTC で記録されるのだが、native オブジェクトは astimezone が使えないため、直接 JST で取り出すことができない。
そこで、replace を使って、一度、タイムゾーンを UTC にセットし、その後で JST を取得するという手続きを踏む必要がある。
# JST class JstTzinfo(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' # UTC class UtcTzinfo(datetime.tzinfo): def utcoffset(self, dt): return datetime.timedelta(0) def dst(self, dt): return datetime.timedelta(0) def tzname(self, dt): return 'UTC' # 日本時間で表示する関数 def strdatetime(val): return '' if not val else val.replace(tzinfo=UtcTzinfo()).astimezone(JstTzinfo()).strftime('%Y.%m.%d %H:%M:%S') # 使用例 print strdatetime(create_date)