日常白痴_Date的比较及增减操作
背景提要
一直以来,获取日期都是用new Date(),再不然,顶多用个SimpleDateFormat规范一下格式
忽然遇到需求,需要对日期增加和比较大小的时候,就又懵住了,唉,每天都为自己太白目感到心累
主要就是用Calendar类进行操作
获取当前时间的年月日
Calendar current = Calendar.getInstance();
Integer curYear = current.get(Calendar.YEAR);
Integer curMonth = current.get(Calendar.MONTH) + 1;
Integer curDay = current.get(Calendar.DAY_OF_MONTH);
这里需要注意的就是月份是从0开始计算的,所以需要获得实际的月份的话,需要加1操作
日期增减
private String handleEndTime(String endTime) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
String endTimeStr = "";
try {
Date end = sdf.parse(endTime);
Calendar endCal = new GregorianCalendar();
endCal.setTime(end);
endCal.add(Calendar.DATE, 1);
endTimeStr = sdf.format(endCal.getTime());
} catch (ParseException e) {
e.printStackTrace();
log.error("时间转换错误,请检查时间格式");
}
return endTimeStr;
}
如果需要增加月份的话,就把endCal.add(Calendar.DATE, 1);
换成endCal.add(Calendar.MONTH, 1);
就可以了
日期比较
如果需要在一个startTime-endTime中循环所有的天或者月的话,就需要同时用到日期比较和日期增加了
>=和<=对于Date类型都是失效的,实际需要用到compareTo函数和equals函数
compareTo返回-1,说明小于,返回1,说明大于,返回0,说明等于
举个栗子:
sdf = new SimpleDateFormat("yyyy-MM");
Calendar cd = Calendar.getInstance();
//Calendar中放入时间startTime startTime是String类型,endTime也是String类型
cd.setTime(sdf.parse(startTime));
while (cd.getTime().compareTo(sdf.parse(endTime)) == -1 || cd.getTime().equals(sdf.parse(endTime))) {
//增加一个月,类比for循环中i++这种操作
cd.add(Calendar.MONTH, 1);
}
白目的一天呐,祝你快乐!