datetime .isoformat()Python関数が正しい情報を返さないことにちょっと驚いています。fromtimestamp()メソッドにタイムゾーンが指定されている場合、この関数はISO8601形式の文字列を正しく返します。ただし、結果の計算ではタイムゾーンは無視されます。観察:
13:29 msimsonnet:~$ python
Python 2.7.1 (r271:86832, Jan 26 2011, 13:56:46)
[GCC 4.2.1 (Apple Inc. build 5664)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
Running with pythonstartup.py
>>> import pytz,datetime
>>> datetime.datetime.fromtimestamp(1303876413).isoformat()
'2011-04-26T23:53:33'
>>> ny = pytz.timezone('America/New_York')
>>> sf = pytz.timezone('America/Los_Angeles')
>>> datetime.datetime.fromtimestamp(1303876413,ny).isoformat()
'2011-04-26T23:53:33-04:00'
>>> datetime.datetime.fromtimestamp(1303876413,sf).isoformat()
'2011-04-26T20:53:33-07:00'
>>>
私はこれをEDT(GMTから-400)にあるコンピューターで実行しています。1303876413の時刻は、私が最初に質問を書いた2011年4月26日の午後11時53分33秒です。.isoformat()最初の例では、 returnsを要求するだけであることに注意してください'2011-04-26T23:53:33'。これは間違っています---'2011-04-26T23:53:33-04:00'現地時間を返し、Pythonはタイムゾーンを知っているため、を返す必要があります。2番目の例は正しいですが、NYタイムゾーンオブジェクトでジャミングしています。3番目の例は間違っています---Pythonはタイムゾーンを保持していますが、それに応じて時間を調整していません。
補遺:
すべてのコメントを読むと、私が探していた動作は、utcfromtimestampではなくを使用して見つけることができることがわかりますfromtimestamp