Date工具遇到的一个坑
private Date contractBeginDate(){
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DATE,1);
calendar.set(Calendar.HOUR,0);
calendar.set(Calendar.MINUTE,0);
calendar.set(Calendar.SECOND,0);
calendar.set(Calendar.MILLISECOND,0);
// calendar.set(Calendar.AM,0);
return calendar.getTime();
}
private Date contractEndDate(Date beginDate){
Calendar calendar = Calendar.getInstance();
calendar.setTime(beginDate);
calendar.add(Calendar.YEAR,1);
return calendar.getTime();
}
calendar.set(Calendar.AM,0);
这一句会导致 代码并不是加1年 反而是减一年
测试代码:
@Test
public void testEndDate(){
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Date tomer = contractBeginDate();
Date endDate = contractEndDate(tomer);
Date yearLater = contractEndDate(new Date());
System.out.println(format.format(new Date()));
System.out.println(format.format(tomer));
System.out.println(format.format(endDate));
System.out.println(format.format(yearLater));
}
private Date contractEndDate(Date beginDate){
Calendar calendar = Calendar.getInstance();
calendar.setTime(beginDate);
calendar.add(Calendar.YEAR,1);
return calendar.getTime();
}
private Date contractBeginDate(){
Calendar calendar = Calendar.getInstance();
calendar.setTime(new Date());
calendar.add(Calendar.DATE,1);
calendar.set(Calendar.HOUR,0);
calendar.set(Calendar.MINUTE,0);
calendar.set(Calendar.SECOND,0);
calendar.set(Calendar.MILLISECOND,0);
calendar.set(Calendar.AM,0);
return calendar.getTime();
}
输出的结果:
2019-10-15 09:47:49
2019-10-16 00:00:00
2018-10-16 00:00:00
2020-10-15 09:47:49
并不是预期的
需要注意
删除这一行 就正常预期的
calendar.set(Calendar.AM,0);

浙公网安备 33010602011771号