2013-03-12 4 views
1

1.I хочу установить setMaxSelectableDate = 18years в JDateChooser, поэтому я предоставил ему дату, увеличивая миллисекунды, но как я должен увеличивать ее на 18 лет.
2.Incrementing by 18years расчет приходит 365 * 18 * 24 * 60 * 60 * 1000 = 56764800000, который дает мне целое целое число ошибок.Увеличение даты на 18 лет в java

Date max=new Date(); 
Date oth1=new Date(max.getTime() + (365*18*24*60*60*1000)); //days*hours*minutes*seconds*milliseconds 
SimpleDateFormat maxdateFormatter1 = new SimpleDateFormat("MMM d,yyyy hh:mm:ss a"); 
String maxdate=maxdateFormatter1.format(oth1); 
DateChooser_V1.setMaxSelectableDate(new java.util.Date(maxdate)); 
+0

почему бы вам не использовать длинный тогда? – greenkode

+1

В качестве альтернативы вы можете использовать объект Calendar и 'cal.add (Calendar.YEAR, 18);' – corsiKa

ответ

9

Пусть java.util.Calendar сделать эту работу за вас:

Calendar c = Calendar.getInstance(); 
c.setTime(oldDate); 
c.add(Calendar.YEAR, 18); 
Date newDate = c.getTime(); 

Который заботится о високосные годы, исторические изменения GMT, изменения исторического времени на летнее время и т. д.

+0

Я принимаю ответ правильно, но я не в состоянии делать то, что мне нужно. –

+0

@AbbyD В чем проблема сейчас? –

+0

Проблема теперь кажется отличной от текущего вопроса. Подумайте об этом в качестве отдельного вопроса. –

1

Вам необходимо использовать long. Вы можете достичь этого путем добавления L на Ваш номер:

365L* ...

+1

Он выглядит лучше в верхнем регистре. Он имел в виду L :) –

+1

Используйте '365L' вместо' 365l', чтобы я не ошибался в отношении 1, как это может случиться в некоторых шрифтах. –

+0

Я согласен, что он выглядит лучше в верхнем регистре. – mercutio

0

Вы не можете волей-неволей добавить секунды (или millseconds) и ожидать, что календарные расчеты, чтобы выйти направо. В основном это требует дополнительных усилий, чтобы учесть все эти прыжковые годы, прыжки секунд и сдвиги дневного света.

До Java 1.8 не выходит, использовать java.util.Calendar вместо java.util.Date, есть действительно хорошие причины что java.util.Date практически все в нем устаревшее. Хотя в начале это выглядит хорошо, при достаточном использовании вы часто найдете его «просто не работает (tm)».

GregorianCalendar now = new GregorianCalendar(); 
now.add(Calendar.YEAR, 18); 

И это при условии, что вы не переполнить Integer.MAX_INT.

0

Я хотел бы использовать Calendar объект для достижения этой цели:

Calendar cal = Calendar.getInstance(); 
Date dt = new Date(); 
... 
// Set the date value 
... 
cal.setTime(dt); 
cal.add(Calendar.YEAR, +18); 
dt = cal.getTime(); 

Надеется, что это помогает вам

1

С JodaTime

DateTime in18Years = new DateTime().plusYears(18); 

Вот как преобразовать java.util.Date

Date in18Years = new DateTime().plusYears(18).toDate(); 
+0

вы можете поместить это в код OP, сделав его 'Date oth1 = new DateTime(). PlusYears (18) .toDate();' –