double を期待するメソッドがあり、UTC 時刻を格納したいのですが、このメソッドに渡す変数は long です。
私は使っている:
Date now = new Date();
now.getTime()
UTC 時刻を取得します。
この値は double に収まりませんか?
double
任意の値を表すことができるという意味で「適合」しlong
ますが、遠い将来 (今から 100,000 年後) の日付の精度が失われます。
二重に使用するIEEE 754仕様では、数値の非指数部分に最大 53 ビットしか使用しません。long は 64 ビットであるため、大まかに言えば、long
値が 53 ビットを超えると精度が失われる可能性があります。
ただし、53 ビットで現在のエポック ミリ秒時間 の値を正確に表すことができるlong
ため、41 ビットしか必要としません。
エポック時間が 2 53を超えるまで、精度の低下は発生しません。これは まで発生しませんOct 12 287396
。
最悪の場合でも、11 ビットの「不正確さ」は、約 ±1 秒 (2 ^ 11 = 2048
ミリ秒単位で 2 秒の範囲) の精度で時間値に変換されます。
要するに、エポック時間をに変換してdouble
も問題ありません。