PythonでUTCからJSTに変換する方法

TracXML-RPCで取得した時刻がUTCなので、これをJSTに変換する方法を見つけたので、メモ。

ソース

>>> import xml_rpc
>>> server = xml_rpc.XmlRpcServer('http://admin:admin@localhost/trac/TracTest/lo
gin/xmlrpc')
>>> ticket_1 = server.ticket.get(1)
>>> print ticket_1
[1, <DateTime '20100321T18:20:48' at f74d50>, <DateTime '20100321T18:20:48' at f
74d78>, {'status': 'new', 'description': 'bvabafda', 'reporter': 'sinsoku', 'cc'
: '', 'component': u'\u305d\u306e\u4ed6', 'owner': 'somebody', 'summary': 'aaaaa
aaaa', 'priority': u'\u666e\u901a', 'keywords': '', 'version': '', 'milestone':
'', 'due_assign': '', 'type': u'\u30bf\u30b9\u30af', 'due_close': '', 'complete'
: ''}]
>>> import time
>>> utc_date = time.strptime(ticket_1[2].value,'%Y%m%dT%H:%M:%S')
>>> print utc_date
(2010, 3, 21, 18, 20, 48, 6, 80, -1)
>>> import calendar
>>> jst_date = time.localtime(calendar.timegm(utc_date))
>>> print jst_date
(2010, 3, 22, 3, 20, 48, 0, 81, 0)

インタラクティブシェルでやった内容をそのままコピペw
重要なのはこの辺ですね。

>>> print utc_date
(2010, 3, 21, 18, 20, 48, 6, 80, -1)
>>> import calendar
>>> jst_date = time.localtime(calendar.timegm(utc_date))
>>> print jst_date
(2010, 3, 22, 3, 20, 48, 0, 81, 0)

シーケンスをエポック秒に直して、それをJSTに変換しています。
関数の簡単な説明は下記参照。

calendar.timegm(t(シーケンス))

timeモジュールで利用するシーケンスに相当するエポック秒からの経過時間を取得する。

time.localtime([secs(エポック秒からの経過時間])

ローカルのタイムゾーンを考慮した現在時刻のシーケンスを返す。