日付を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形式で保存していると思います。そのため、Pythonのdatetime.strptime()
に文字列を読み取らせる方法があるはずです。
次のフォーマットを試してください。
%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
別の方法を提供するために、 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())