mongoDBに格納されたデータを受け取り、bson.json_util.dumps()関数を介してJSONとしてエクスポートしました。それを日時オブジェクトに戻すことを試みるとき、通常のパーサのどれも動作しません。python:unix/posixのエポックタイムスタンプをdatetimeに変換する(monogdb、date_util jsonエクスポート後)
{
u'_group': 0,
u'_range': u'',
u'canon': 0,
u'comment_id': 0,
u'created': {u'$date': 1491468607000L},
u'description': u''
}
とすべての日付は、次のようになります:ここではサンプルです
[{u'$date': 1491457629000L}, {u'$date': 1491458993000L}, {u'$date': 1491457072000L}, {u'$date': 1491457035000L}, {u'$date': 1491457330000L}, {u'$date': 1491458323000L}, {u'$date': 1491458147000L}, {u'$date': 1491458277000L}, {u'$date': 1491459839000L}, {u'$date': 1491466340000L}, {u'$date': 1491463804000L}, {u'$date': 1491464304000L}, {u'$date': 1491465145000L}, {u'$date': 1492073749000L}, {u'$date': 1492073750000L}, {u'$date': 1492075415000L}, {u'$date': 1492155813000L}, {u'$date': 1492608582000L}, {u'$date': 1492671698000L}, {u'$date': 1493001047000L}, {u'$date': 1493714117000L}]
私のテスト:
y = {u'$date': 1491457629000L}
>>> y['$date']
1491457629000L
、様々な試みが失敗した:
print(
datetime.datetime.fromtimestamp(
y['$date']
).strftime('%Y-%m-%d %H:%M:%S')
)
ValueError: timestamp out of range for platform localtime()/gmtime() function
from dateutil import parser
parser.parse(str(y['$date']))
OverflowError: Python int too large to convert to C long
utc_time = datetime.datetime(1970, 1, 1) + datetime.timedelta(seconds=y['$date'])
OverflowError: date value out of range
任意のUNIXタイムスタンプコンバータは、これを読むことができなければならないようです。なぜそれは働いていないのですか?私も年と月だけが必要なので、タイムゾーンの特異性は私の要求の範囲外です。
注:ここでの解決策は、関連のないタイムスタンプで再フォーマットするのではなく、mongodbから変換された方法を反映する別のJSONパーサーを使用することだったので、converting epoch time with milliseconds to datetimeの複製ではありません。パーサ。私はすでに他のリンクを調べて、それが私の問題を解決していないことを発見しました。
[エポックタイムをミリ秒でdatetimeに変換]の可能な複製(https://stackoverflow.com/questions/21787496/converting-epoch-time-with-milliseconds-to-datetime) –
タイムゾーンは重要です、btw。例:タイムスタンプの値が「2017-12-31T23:00Z」に対応する場合、年と月は、タイムゾーンに応じて、2017年12月または2018年1月のいずれかになります。実際には、月の最初または最後の日付は、タイムゾーンによって月の値が異なります。もちろん、システムのデフォルトのタイムゾーン(または特定のタイムゾーン)を常に使用すると想定できます。それでも、それはあなたが考慮する必要があるものです。 –