2016-09-25 22 views
4

は何のpython timeと、うるう秒のdatetimeモジュール復帰?うるう秒でPythonのリターンを何

我々は23にあるとき、私は何を得るのだろう:59:60.5私は呼び出す場合:また

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

、PY2との差額.7およびpy3?


それは(少なくとも私にとっては)混乱して理由:

を私が見るdatetime docsから:

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

time docsstrptimeで解析するとうるう秒の "サポート"があります。しかし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で何を期待するべきですか?

注:私はそれについて、その介護を行うには良いものを持っていない場合、あなたが疑問に思う場合は、うるう秒が近づいている!!!!

+0

http://stackoverflow.com/questions/21027639/python-datetime-not-accounting-for-leap-second-properly –

+1

私は何も起こりません。あなたの*コンピュータクロック*は閏秒を守らないでしょう。それは次のntpクロックが同期するまで続きます。その後、コンピュータの時計は再び正しくなります。 –

+0

@PadraicCunningham:すべての日時投稿は、datetimeを使ってうるう秒を表現する*方法についてですが、それはできません。これは、あなたが正確な飛躍秒で*を処理しようとするとどうなるかについてです。現在のコンピュータでは、コンピュータクロックとして「何も」を意味しません。これは、コンピュータクロックを事前に通知する機能がないため、閏秒を尊重しません。 –

答えて

3

うるう秒は、手動で時折ある予定さ。現在、コンピュータのクロックは、うるう秒を称えるために何の機能を持っていません。それらを前もって挿入するように指示する標準はありません。その代わりに、コンピュータクロックは定期的にNTPプロトコルで時刻を再同期し、うるう秒が挿入された後に自動的に調整されます。

次に、コンピュータクロックは、通常、時代が秒(時)以来の時刻を報告します。その第2のカウントにうるう秒を含むように変換するときに、会計を調整するのはdatetimeモジュールまでです。これは現在のところ行われません。 time.time()は、エポックからの秒数に基づいて時間カウントを報告するだけです。

は、閏秒が正式に有効になったときに発生します。それ以外の場合は、コンピュータの時計は少し遅れて1秒になります。datetime

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

+0

これは単に「指定されていない」ことを意味し、あなたのコードはあなたのマシンにNTPがどのように配置されるのかを認識する必要がありますか? ( 'datetime'を使い続け、' astropy.time'、thanks @MaxNoeのようなライブラリに移動しないと仮定します) –

+1

@MarioCorchero:いいえ、指定されていないとは言いませんでした。あなたのコンピュータの時計はうるう秒について知らず、その問題は単に無視されます。あなたのコンピュータの時計は、* NTPが使用されているので、*とにかく*正確ではありません。コンピュータは常にそのプロトコルを使用してクロックを定期的に調整します。あなたがコードで行う必要があるのは、NTPの調整とタイムゾーンが時間を後ろ向きにする可能性があるため、時間が常に前進するとは限りません。 –

+0

@MarioCorchero:大部分のプログラムでは、これはまったく問題ではありません。 UTCタイムスタンプが非常に重要な*絶対タイミング精度*を必要とするユースケースがある場合は、Pythonを使用せず、コンピュータクロックに頼らないでください。その代わりに、専用のタイミング機器で自分自身をセットアップしてください。 –

関連する問題