47

日付を JSON に変換する場合、javascript は日付を次の形式で保存します。

2012-05-29T19:30:03.283Z

ただし、これを Python の datetime オブジェクトに入れる方法がわかりません。私はこれらを試しました:

# Throws an error because the 'Z' isn't accounted for:
datetime.datetime.strptime(obj[key], '%Y-%m-%dT%H:%M:%S.%f')

# Throws an error because '%Z' doesn't know what to do with the 'Z'
#  at the end of the string
datetime.datetime.strptime(obj[key], '%Y-%m-%dT%H:%M:%S.%f%Z')

JavaScriptが文字列を公式のISO形式で保存していると思うので、pythondatetime.strptime()に読み取らせる方法があるはずですか?

4

2 に答える 2

64

次の形式を試してください。

%Y-%m-%dT%H:%M:%S.%fZ

例えば:

>>> datetime.datetime.strptime('2012-05-29T19:30:03.283Z', '%Y-%m-%dT%H:%M:%S.%fZ')
datetime.datetime(2012, 5, 29, 19, 30, 3, 283000)

日付のZは、UTC 時間として解釈する必要があることを意味するだけなので、無視しても情報が失われることはありません。この情報は、http ://www.w3.org/TR/NOTE-datetime で確認できます。

于 2012-05-29T19:44:34.927 に答える
13

python-dateutil別の方法として、パッケージのインストールを気にしない場合は、dateutil.parser.parse. parse入力の形式は;によって推測されることに注意してください。無効な入力は、正しく、またはそうでない場合でも解釈できます。ただし、形式を推測すると、明示的に指定するよりも大幅に遅くなります。

タイムゾーンなし

タイムゾーンを設定したくない場合は、内部的にすべての時間を UTC のみで表す場合はまったく問題ありません。次を使用します。

>>> dateutil.parser.parse('2012-05-29T19:30:03.283Z', ignoretz=True)
datetime.datetime(2012, 5, 29, 19, 30, 3, 283000)

タイムゾーンあり

とは異なりdatetime.datetime.strptime、このデフォルトの への呼び出しはparse自動的に UTC タイム ゾーンを保持することに注意してください。

>>> import dateutil.parser
>>> dateutil.parser.parse('2012-05-29T19:30:03.283Z')
datetime.datetime(2012, 5, 29, 19, 30, 3, 283000, tzinfo=tzutc())

等しいかどうかのテスト アサーションが必要な場合、期待されるオブジェクトは次のように構築できます。

>>> import datetime
>>> datetime.datetime(2012, 5, 29, 19, 30, 3, 283000, tzinfo=dateutil.tz.tzutc())
于 2017-05-19T16:15:08.240 に答える