5

double を期待するメソッドがあり、UTC 時刻を格納したいのですが、このメソッドに渡す変数は long です。

私は使っている:

Date now = new Date();
now.getTime() 

UTC 時刻を取得します。

この値は double に収まりませんか?

4

1 に答える 1

14

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も問題ありません。

于 2012-11-25T23:42:15.147 に答える