2017-02-03 8 views
3

タイトルが示すように、TAI秒の数字がの00:00:00 UTC、Januaryから見つかるはずです2004年1月(Java版)私はちょうどTAIが何であるかをちょうど学びました。そして、上記を試してみる私の試みは私をちょっと混乱させました。Javaで2004年1月1日00:00:00 UTC以来のTAI秒の数を調べる

を私はJavaであなたは1月1日、1970 UTC(Javadocs)からのミリ秒数を取得するためにSystem.currentTimeMillis()を使用することができます知っている:私が試した何

また、原子時間についての私の短い研究から、私は現在TAIがUTCよりも37秒早いことを理解しています。

したがって、私の思考プロセスをすることでした:

  1. (34歳)1970年から2004年の間の秒数を検索し、現在のUTC時刻からの数を取得することを差し引き2004年
  2. 37を追加する

TAIに秒の実際の数を取得するために、私はここに数学の一定ではなかった(1日= 86400秒):

  • オプション1:86400(秒)365.25(日(1 Julian Year))をX = 1072958400
  • オプション2(年)34×:86400(秒)365(日(1 Common Year))をX(年)34をX =この時点で

1072224000私はUTCに比較するときTAIに追加37うるう秒はうるう年を考慮していたかどうかを疑問始めたので、私はオプション2を使用する必要があります。残念ながら、私の思考プロセスが正しいかどうかは不明ですし、確かめるためにここで質問するほうがよいと思いました。

また、私は(秒)午前12:00(UTC) @2004年1月1日と同等であることを主張しthis citeを見つけました。どちらが私の計算のどちらかと同じではないので、私を投げ捨てた。

+0

。したがって、オプション2を使用することは正しい選択ではありません。毎年0.25を加算することも正確ではありません。これは、四半期がUTCに実際に追加されるのではなく、1日に累積されるときだけです。 – Mordechai

+0

'((currentDate()。getTime() - startOf2004.getTime())/ 1000)+ 37'のようなことはできませんか? 'java.util.Date#getTime()'は、その時刻のEpochからのミリ秒を返します。 –

+1

365または365.25のいずれかで掛けるのは近似値です。 1970年から2004年までの34年間があり、そのうちの8つはうるう年であり、12,418日間に及ぶ。 –

答えて

0

タイ秒は本質的には閏秒を含む原子SI秒です。私のライブラリTime4Jは、この機能をそのまま使用できます。 TAI-サポートの詳細については、クラスMomentjavadoc次を参照してください。うるう__year__ 2月に余分な日を計算するときには、おそらくトラックをオフに取得している

Moment m2004 = PlainTimestamp.of(2004, 1, 1, 0, 0).atUTC(); 
Moment now = SystemClock.currentMoment(); // other clocks based on NTP are possible 
long seconds = SI.SECONDS.between(m2004, now); 

System.out.println(seconds); // 425222084L 
System.out.println(now); // 2017-06-22T13:15:24,570000000Z 
関連する問題