2011-01-12 1 views
1

Я хочу использовать миллисекунды, чтобы установить новую дату в моей программе, но она не работает. Кто-нибудь может сказать мне, почему это не работает?О GregorianCalendar: тот же ввод, но другой вывод в java

Календарь r_1 = новый GregorianCalendar (2011,0,1);

r_1.add (Calendar.DAY_OF_MONTH, 2);

System.out.println (r_1.getTime());

long date_1 = r_1.getTimeInMillis() + 2 * 24 * 60 * 60 * 1000;

r_1.setTimeInMillis (startTime1);

System.out.println (r_1.getTime());

Он работает как очень правильно, но если я изменю день от 2 до 25, то это будет работать.

---------- вывод правилен, то 2011/01/26 ----------

Календарь r_1 = новый GregorianCalendar (2011,0, 1);

r_1.add (Calendar.DAY_OF_MONTH, 25);

System.out.println (r_1.getTime());

----------- выход неправильно сейчас, это 2010/12/07 ------

длиной дата_1 = r_1.getTimeInMillis() + 25 * 24 * 60 * 60 * 1000; // у меня есть изменения 2 до 25

r_1.setTimeInMillis (startTime1);

System.out.println (r_1.getTime());

Благодаря

ответ

3

Выражение 25*24*60*60*1000 представляет собой целое число, и вы захлестнули размер целого, создавая отрицательное число.

Ваше выражение составляет 2,160,000,000 миллисекунд. Наибольшее значение, которое может содержать int, составляет 2 147 483 647.

Чтобы исправить это, вы должны заставить выражение быть длинным, так

25L*24*60*60*1000 
+0

Благодаря его истинная .Есть переполнение! – echo

0

25*24*60*60*1000 слишком велик, чтобы поместиться в int. Попробуйте 25L*24*60*60*1000, который является постоянной постоянной.

+0

ru you r право! благодаря! – echo

0

попробовать что-то вроде этого:

final long k = 25*24*60*60*1000L; 
long date_1 = r_1.getTimeInMillis() + k; 
+0

Спасибо большое. Я пробовал это таким образом, и он работает! – echo

+0

так просто отметьте это как ответ! –