在java中将日期增加18年

时间:2013-03-12 20:51:18

标签: java date milliseconds jdatechooser

1.我想在JDateChooser中设置 setMaxSelectableDate = 18年,所以我通过递增毫秒来提供日期,但是如何将它增加18年。
2.增加到18年,计算结果为 365 * 18 * 24 * 60 * 60 * 1000 = 56764800000 ,这给出了错误整数到大。

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

5 个答案:

答案 0 :(得分:9)

java.util.Calendar 为您完成这项工作:

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

负责闰年,历史GMT抵消变化,历史夏令时时间表变更等。

答案 1 :(得分:1)

您需要使用long。您可以通过在您的号码中添加L来实现此目的:

365L* ...

答案 2 :(得分:1)

JodaTime

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

以下是转换为java.util.Date

的方法
Date in18Years = new DateTime( ).plusYears( 18 ).toDate( );

答案 3 :(得分:0)

你不能毫不犹豫地添加秒(或毫秒)并期望日历计算正确。基本上,需要花费一些额外的努力来解释所有这些闰年,闰秒和夏令时的变化。

在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

答案 4 :(得分: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();

希望这有助于你