2012-04-18 4 views
0

У меня проблема, которую я не могу удержать - если я добавлю более 24 дней, сдвинутую дату в прошлом.Shifted Java Дата в прошлом

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

Вы выполняете умножение целых чисел, а затем преобразуете результат в длинный. Переполнение переполняется, поэтому результат отрицательный.

Используйте следующий код, чтобы сделать длинное умножение:

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(); 
Смежные вопросы