12

Pythontimedatetimeモジュールはうるう秒で何を返しますか?

23:59:60.5に電話すると、何が得られますか。

  • time.time()
  • datetime.datetime.utcnow()
  • datetime.datetime.now(pytz.utc)

また、py2.7 と py3 の違いはありますか?


なぜ混乱するのか(少なくとも私にとっては):

私が見る日時のドキュメントから:

time モジュールとは異なり、datetime モジュールはうるう秒をサポートしていません。

時間のドキュメントでは、で解析するときにうるう秒が「サポート」されていることがわかりますstrptime。しかし、についてのコメントはありませんtime.time()

私は私が得る使用を参照してくださいtime

>>> time.mktime(time.strptime('2016-06-30T23:59:59', "%Y-%m-%dT%H:%M:%S"))
1467327599.0
>>> time.mktime(time.strptime('2016-06-30T23:59:60', "%Y-%m-%dT%H:%M:%S"))
1467327600.0
>>> time.mktime(time.strptime('2016-07-01T00:00:00', "%Y-%m-%dT%H:%M:%S"))
1467327600.0

そしてdatetimeただ爆破する:

>>> dt.datetime.strptime('2016-06-30T23:59:60', "%Y-%m-%dT%H:%M:%S")
Traceback (most recent call last):
  File "<stdin>", line 1, in &lt;module>
ValueError: second must be in 0..59

では、その正確な時刻 (うるう秒の真ん中) には何が得られるでしょうか?

ラバータイム、時計の減速、秒の繰り返し、あらゆる種類のクレイジーなアイデアについて読んだことがありますが、python について何を期待すればよいでしょうか?

注: うるう秒が近づいています!!!!

4

2 に答える 2

11

うるう秒は、手動でスケジュールされることがあります。現在、コンピュータの時計にはうるう秒を受け入れる機能がありません。挿入するように事前に指示する標準はありません。代わりに、コンピューターの時計は NTP プロトコルを介して定期的に時刻を再同期し、うるう秒が挿入された後に自動的に調整されます。

次に、コンピューターの時計は通常、エポックからの秒数で時間を報告します。datetimeうるう秒を含むようにその秒数を変換するときに、そのアカウンティングを調整するのはモジュール次第です。現在は行っていません。time.time()エポックからの秒数に基づいて時間カウントを報告するだけです。

したがって、うるう秒が正式に有効になっても、コンピューターの時計がしばらくの間 1 秒になること以外は何も変わりません。

datetimeカバーのみがうるう秒のタイムスタンプを表す問題。これはできません。とにかくそうするように求められることはありません。

于 2016-09-25T12:08:58.230 に答える
2

ここでの Python のmktime動作は、POSIX で指定されている C から継承されています。仕様は思ったほど単純ではなく、現実はさらに複雑です。

この記事はさまざまな問題を紹介するのに適していると思います: Unix うるう秒の混乱

あなたが観察したように、datetimeモジュールはうるう秒のようなものがないかのように振る舞います。

于 2019-02-08T22:01:32.343 に答える