1

終了日が開始日よりも前になるように計算されていました

Date startDate = new Date();
Date endDate = new Date(startDate.getTime() + (24 * 3600000 * 42));
System.out.println(startDate);
System.out.println(endDate);

出力:

Tue Sep 17 01:46:31 EEST 2013
Mon Sep 09 08:43:43 EEST 2013

なぜ出力が正しくないのですか?

4

3 に答える 3

10

整数演算がオーバーフローしました。可能な最大値int2147483647orInteger.MAX_VALUE (20 億強) ですが、整数リテラルを掛けると 3628800000 (約 36 億) になります。結果は負の数 ( -666167296) で、日付が前になります。

リテラルの 1 つを としてキャストして、算術longを強制する (またはリテラルを使用する)ことを試してください。longlong

( (long) 24 * 3600000 * 42)

また

(24L * 3600000 * 42)

この操作は、値の範囲内long(最大値9223372036854775807、9 京以上) に十分収まります。

于 2013-09-16T22:55:43.840 に答える
0

加算しようとしている数値は 24 * 3600000 * 42 で、これは 3,628,800,000 に相当します。これは、指定されたデータ型で表現できる最大値である 2,147,483,647 よりも大きくなっています。あなたが経験しているのはオーバーフローです。つまり、最大値を超えた後、数値が負の最小値にループバックします。したがって、日付に負の値を追加しています。

于 2013-09-16T22:58:14.310 に答える
0

24 * 3600000 * 423,628,800,000に適合しませんint。ロールオーバーが発生します。次のいずれかの要素をキャストして、long の使用を強制します。

24L * 3600000 * 42
于 2013-09-16T22:55:52.937 に答える