0

理解できない問題があります。24日を超えて追加すると、過去のシフトされた日付になります。

long start = System.currentTimeMillis();
long shift = 3600000 * 24 * 24;
System.out.println(new Date(start));
System.out.println(new Date(start + shift));

24日シフトの場合:

start - Wed Apr 18 11:37:12 CEST 2012
end - Sat May 12 11:37:12 CEST 2012

25日シフトの場合:

start - Wed Apr 18 11:37:55 CEST 2012
end - Sat Mar 24 17:35:08 CET 2012

なぜこのように動作するのか誰かにアドバイスしてもらえますか?ありがとうございました。

4

3 に答える 3

4

整数の乗算を行ってから、結果を long に変換しています。乗算はオーバーフローするため、結果は負になります。

長い乗算を行うには、次のコードを使用します。

long shift = 3600000L * 24 * 24;
于 2012-04-18T09:48:35.870 に答える
0

この方法で問題を解決しないことをお勧めします。代わりに java.util.Calendar を使用してください。夏時間の変更などのコーナーケースに対処する可能性が高く、さらに API が優れています。

Calendar cal = Calendar.getInstance();
cal.setTime(new Date(start));
cal.add(Calendar.DAY_OF_MONTH, 24)
Date shifted = cal.getTime();
于 2012-04-18T09:54:59.817 に答える
0

以下のように java.util.Calendar を使用する必要があります。

Calendar c = GregorianCalendar.getInstance(); //time default to now
c.add(Calendar.DATE, 24); //adds 24 days
Date end = c.getTime();
于 2012-04-18T09:55:58.713 に答える