2012-04-18 15 views
0

私は問題を抱えています.24日以上を追加すると、過去にシフトされた日付が追加されます。 25日のシフトのためにシフトされたJavaの日付は過去のものです

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

:24日のシフトのために

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

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

それはこのように動作理由を誰かが私に助言てもらえますか?ありがとうございました。

答えて

4

整数の乗算を行い、その結果をlong型に変換しています。乗算はオーバーフローしますので、結果は負です。

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

long shift = 3600000L * 24 * 24; 
+0

おっと、私のせいで、私も何回か確認した後、これを見ていません。ありがとう。 – Artegon

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(); 
0

たぶん、あなたはちょうど以下のようにjava.util.Calendarのを使用する必要があります。

Calendar c = GregorianCalendar.getInstance(); //time default to now 
c.add(Calendar.DATE, 24); //adds 24 days 
Date end = c.getTime(); 
関連する問題