1. ホーム
  2. python

[解決済み】Python UTC datetime オブジェクトの ISO フォーマットに Z (Zulu または Zero offset) が含まれていない。)

2022-04-14 07:01:50

質問

なぜ python 2.7 は JavaScript と違って UTC datetime オブジェクトの isoformat 文字列の最後に Z 文字 (Zulu またはゼロオフセット) を含めないのですか?

>>> datetime.datetime.utcnow().isoformat()
'2013-10-29T09:14:03.895210'

javascriptの場合

>>>  console.log(new Date().toISOString()); 
2013-10-29T09:38:41.341Z

解決方法は?

パイソン datetime オブジェクトはデフォルトでタイムゾーン情報を持っておらず、タイムゾーン情報がないと、Pythonは実際にISO 8601仕様に違反しています( タイムゾーン情報がない場合、ローカルタイムとみなします。 ). を使用することができます。 pytz パッケージ を使用してデフォルトのタイムゾーンを取得するか、直接 tzinfo を使用します。

from datetime import datetime, tzinfo, timedelta
class simple_utc(tzinfo):
    def tzname(self,**kwargs):
        return "UTC"
    def utcoffset(self, dt):
        return timedelta(0)

次に、タイムゾーンの情報を手動で utcnow() :

>>> datetime.utcnow().replace(tzinfo=simple_utc()).isoformat()
'2014-05-16T22:51:53.015001+00:00'

これは、ISO 8601フォーマットに準拠しており、以下のいずれかを指定することができます。 Z または +00:00 をUTCのサフィックスとして使用します。後者の方が、一般的なタイムゾーンの表し方として、より標準に近いことに注意してください(UTCは特別なケースです)。