1

1.我想在 JDateChooser 中设置setMaxSelectableDate= 18years,所以我通过增加毫秒来提供日期,但是我应该如何将它增加 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));
4

5 回答 5

9

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

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

它负责闰年、历史 GMT 偏移变化、历史夏令时时间表变化等。

于 2013-03-12T20:56:19.793 回答
1

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

365L* ...

于 2013-03-12T20:52:58.697 回答
1

乔达时间

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

以下是如何转换为java.util.Date

Date in18Years = new DateTime( ).plusYears( 18 ).toDate( );
于 2013-03-12T21:06:33.487 回答
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

于 2013-03-12T20:53:39.437 回答
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();

希望这可以帮助你

于 2013-03-12T20:55:58.840 回答