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));
答案 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)
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();
希望这有助于你