17

GregorianCalendar クラスはうるう秒に対応していますか?

そうでない場合、サードパーティのライブラリは対応していますか?

4

2 に答える 2

14
  1. うるう秒は、GregorianCalendar によって処理されません (Oracle のソース コードのビューはこれを示しています - 1 分 = 60 秒という明示的な仮定が常にそこに与えられています)。さらに、Oracle はうるう秒のサポートを公式に拒否しました - Bug-ID 4272347を参照してください。
  2. Java には、うるう秒をサポートする標準のサードパーティ ライブラリはありません。joda-time でさえありません。このような特殊なソフトウェアだけがそれを行います。
  3. java.util.Date など、サポートしていませんが、多くのライブラリがうるう秒について話していることに注意してください (Dorofeevs の回答を参照)。また、JSR 310 は多くのことを話しますが、この機能はサポートしていません。公式には、JSR 310 は、うるう秒をカウントせず、うるう秒イベントの周囲にゴム秒を塗りつぶすだけを記述する UTC-SLS をサポートしています。実際、JSR 310 は、UNIX 時間または UTC-SLS をサポートするかどうかについて非常に混乱しています (次のポイントを参照)。また、うるう秒情報 ( github/threeten/issues/197 ) が JSR 310 コード ベースから削除されたため、JSR 310 の範囲内で真の UTC うるう秒を実装することは絶対に不可能です。最良の場合、今後の外部モジュール (スリーテンエクストラ) せいぜい初歩的なサポートを提供する JSR 310 の補足として (これは UNIX 時間と TAI 時間スケールの間の変換であり、それ以上ではなく、根本的に間違ったドメイン モデルを使用していると私は考えています)。
  4. System.currentTimeMillis()公式には OS タイマーに関連しています。Microsoft、Linux、Apple など、私が知っているすべての OS は UNIX 仕様にのみ基づいているため、この Java システム タイマーはうるう秒をカウントせず、1970-01-01T00:00:00.000Z 以降の通常のミリ秒のみをカウントします。
  5. これらすべての事実のために、うるう秒を完全にサポートし、LGPLv2.1 ライセンスで v1.0 として利用できるTime4Jという名前の独自の日付と時刻の Java ライブラリをセットアップすることにしました。dzone -articleは、このサポートがバージョン v4.2 でどのように見えるかを示しています。
于 2013-06-17T04:40:22.030 に答える
6

java.util.Date API はそれを言います

「...Date クラスは協定世界時 (UTC) を反映するように意図されていますが、Java 仮想マシンのホスト環境によっては、正確に反映されない場合があります。... ほとんどのコンピューターの時計は、十分に正確ではありません。うるう秒の区別を反映するためです。」

ウィキによると

「地球の自転速度は気候や地質学的事象に応じて変化するため、UTC うるう秒の間隔は不規則であり、予測できません。各 UTC うるう秒の挿入は、通常、国際地球回転参照システム サービス (IERS) によって約 6 か月前に決定されます。 "

つまり、クラスは将来の IERS の決定について知ることができません。

于 2012-12-28T06:35:43.687 に答える