204

JavaScript とは異なり、Python 2.7 が UTC 日時オブジェクトの 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
4

13 に答える 13

18

簡潔な答え

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'
于 2020-09-03T21:02:44.343 に答える
3

投稿には多くの良い回答がありますが、JavaScript とまったく同じ形式で表示されるようにしたかったのです。これは私が使用しているもので、うまく機能します。

In [1]: import datetime

In [1]: now = datetime.datetime.utcnow()

In [1]: now.strftime('%Y-%m-%dT%H:%M:%S') + now.strftime('.%f')[:4] + 'Z'
Out[3]: '2018-10-16T13:18:34.856Z'
于 2018-10-16T13:22:16.410 に答える