は、次のコードを考える:もしそうなら、これは、OverflowErrorを「範囲外の関数mktime引数」を生成し、するためにPythonのmktimeの往復が「範囲外」で失敗する可能性はありますか?
value = time.mktime(datetime.fromtimestamp(timestamp).timetuple())
が、それは可能ですが、タイムスタンプのどの範囲はこれを引き起こしますか?
は、次のコードを考える:もしそうなら、これは、OverflowErrorを「範囲外の関数mktime引数」を生成し、するためにPythonのmktimeの往復が「範囲外」で失敗する可能性はありますか?
value = time.mktime(datetime.fromtimestamp(timestamp).timetuple())
が、それは可能ですが、タイムスタンプのどの範囲はこれを引き起こしますか?
はい。私はUTCとWindowsの2時間前です。 int32の範囲の最後の2時間でエラーが発生します。
>>> def roundtrip(x):
... return time.mktime(datetime.datetime.fromtimestamp(x).timetuple())
...
>>> roundtrip(2**31-1-7200)
2147476447.0
>>> roundtrip(2**31-7200)
OverflowError: mktime argument out of range
>>> roundtrip(2**31-1)
OverflowError: mktime argument out of range
>>> roundtrip(2**31)
ValueError: timestamp out of range for platform time_t
NB:あなたはそれを求めてきました方法は、私はそれは同じで(おそらく)バインドされているようdatetime.fromtimestamp
が、代わりにValueError
が発生しますので、あなたが探している特定の例外をトリガする一切の可能なタイムスタンプがありません推測します限界。
ここでmktime
の範囲はプラットフォームによって異なりますので、明確な回答はできません。私のLinux 32ビットコンピュータでは、境界は符号付きの32ビット整数の範囲内にあるため、-2147483648(すなわち(1901, 12, 13, 19, 44, 16)
より前)または2147483647より前に変換するタプル、つまり(2038, 1, 19, 3, 14, 7)
がこの例外をトリガーします。 、datetime.fromtimestamp
はそれを早く捕まえるでしょう。
これがなぜ投票されたのかわかりません。私はそれが少し具体的であることを認識していますが、私はPythonの動作/制限について実際の質問をしています。 – DNS
+1はい私にとって有効な質問です –