私の過去の回答を確認していると、 this などのコードを提案していることに気付きました。
import time
def dates_between(start, end):
# muck around between the 9k+ time representation systems in Python
# now start and end are seconds since Epoch
# return [start, start + 86400, start + 86400*2, ...]
return range(start, end + 1, 86400)
このコードを読み直すと、私の背骨に Tony the Pony の恐ろしい感触を感じざるを得なくなり、耳や他のそのようなひどい、ひどいものに "うるう秒"を優しくつぶやきました。
エポックの「秒」の定義では、「1日は86,400秒の長さ」という仮定はいつ破られますか。 (私はPythonのような関数を想定しています time.mktime
DSTで調整された値がすでに返されているため、上記のスニペットはDSTの切り替え日でも機能するはずです...)
カレンディカルな計算を行うときは常に、Pythonの datetime および calendar モジュールなどのプラットフォームが提供するAPI、または成熟した高品質ライブラリを使用する方が、自分で「より単純な」コードを書くことです。日付とカレンダーのAPIは醜くて複雑ですが、それは実際のカレンダーには奇妙な動作がたくさんあるためです。
たとえば、現在「10:00:00 AM」である場合、「10:00:00 AM tomorrow」までの秒数は、使用しているタイムゾーンに応じて、いくつか異なる場合があります。 DSTが今夜開始するか終了するかなど。
定数86400がコードに表示される場合は常に、正しくないことを行っている可能性が高くなります。
また、週、月、年、四半期などの秒数を決定する必要がある場合、状況はさらに複雑になります。これらのカレンダーライブラリの使用方法を学びます。
Wikipedia によると、
UTCの日数はほとんどの場合86 400秒ですが、「うるう秒」により、86 401秒になることもあり、86 399秒になる場合もあります(後者のオプションは2010年12月の時点では使用されていません)。これにより、日が地球の回転(または世界時)と同期されます。
ダブルリープセカンドが実際に使用された場合、実際には86402が長くなる可能性があります。
再度編集:混乱を招くため、2番目に推測したpythonドキュメント。time.mktime
は常にUTCエポック秒を返します。ありました。 :)
1日の秒数は、使用する時間システムに依存します(例: POSIXでは、定義により1日は正確に86400秒です :
エポック以降の秒数で表されているように、毎日、正確に86400秒で占められます。
UTCでは、うるう秒が含まれる可能性があります。つまり、1日は86401 SI秒(理論的には86399 SI秒)になる可能性があります。 2015年6月30日の時点で、26回発生しています 。
太陽の見かけの動きで日数を測定する場合、 (太陽)日の長さは、年間を通じて平均値から約16分異なります 。
次に、地球の回転(平均太陽時間)にも基づいている T1 とは異なります。 見かけの太陽の日は、平均の太陽の日よりも20秒短い、または30秒長い場合があります 。 UTCは、時々のうるう秒の導入により、UT1の0.9秒以内に維持されます。
ローカルクロックで1日を定義すると、奇妙な政治的タイムゾーンの変更が原因で非常に混乱する可能性があります。 DSTが原因で1日が1時間だけ変わる可能性があると想定することは正しくありません。
「サポート」 夏時間 のすべてのタイムゾーンで、24時間のない年に2日を取得します。彼らはそれぞれ25時間または23時間になります。そして、それらの日付をハードコーディングすることさえ考えないでください。それらは毎年、タイムゾーン間で変更されます。
ああ、これがあなたが考えていなかった 34のその他の理由のリストであり、なぜあなたがやっていることをやるべきではないのか です。