5

文字列として保存されているタイムスタンプを日時オブジェクトに変換するためのコードがあり、intタイムスタンプ値がmaxintより大きい日付を変換するときに例外が発生することに気づきました。

datetime.datetime.fromtimestamp(2147570047)

たとえば私に

ValueError: timestamp out of range for platform time_t

この問題を回避するにはどうすればよいですか?32ビットPython(2.7.2を実行)を使い続けたいと仮定します

max intをdatetimeオブジェクトに変換してから、timedeltaを使用して追加できることに気付きましたが、実際にこれを行うための特に効率的または優れた方法は考えられませんでした。これらの2038+タイムスタンプを日時オブジェクトに変換できる良い方法は何ですか?

4

2 に答える 2

8

私はそれを解決したと思います、そして私はこれが同じ例外をスローしないことにちょっと驚いていました

>>> datetime.datetime.fromtimestamp(0) + datetime.timedelta(seconds=2147570047)
datetime.datetime(2038, 1, 20, 4, 14, 7)

編集:これは完璧な解決策ではなく、タイムゾーンに少し問題があるようです(私は現在BST時間(+1)にいるので、これが1時間離れている理由を説明するかもしれません)

>>> datetime.datetime.fromtimestamp(2047570047)
datetime.datetime(2034, 11, 19, 17, 27, 27)
>>> datetime.datetime.fromtimestamp(0) + datetime.timedelta(seconds=2047570047)
datetime.datetime(2034, 11, 19, 18, 27, 27)
于 2012-05-14T17:23:01.023 に答える