簡潔な答え
datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
長い答え
「Z」が含まれていない理由は、タイムゾーンの単純な日時、つまりタイムゾーン情報が関連付けられていない日時を返すdatetime.now()
ためです。datetime.utcnow()
タイムゾーン対応の日時を取得するには、タイムゾーンを引数として に渡す必要がありますdatetime now
。例えば:
from datetime import datetime, timezone
datetime.utcnow()
#> datetime.datetime(2020, 9, 3, 20, 58, 49, 22253)
# This is timezone naive
datetime.now(timezone.utc)
#> datetime.datetime(2020, 9, 3, 20, 58, 49, 22253, tzinfo=datetime.timezone.utc)
# This is timezone aware
タイムゾーン対応のタイムスタンプを取得すると、isoformat にタイムゾーンの指定が含まれます。したがって、次の方法で ISO 8601 タイムスタンプを取得できます。
datetime.now(timezone.utc).isoformat()
#> '2020-09-03T20:53:07.337670+00:00'
「+00:00」は、UTC の有効な ISO 8601 タイムゾーン指定です。「+00:00」の代わりに「Z」を使用したい場合は、自分で置換する必要があります。
datetime.now(timezone.utc).isoformat().replace("+00:00", "Z")
#> '2020-09-03T20:53:07.337670Z'