获取当前时间的所在季度开始结束日期
/**
* 计算某日期所在季度开始日期
* 季度划分:1、2、3, 4、5、6, 7、8、9, 10、11、12
*/
public static Date getSeasonEndDate (Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int month = calendar.get(Calendar.MONTH);
calendar.set(Calendar.MONTH, (month + 3) / 3 * 3);
calendar.set(Calendar.DATE, 1);
return new Date(calendar.getTime().getTime() - 24 * 60 * 60 *1000);
}
/**
* 计算某日期所在季度结束日期
* 季度划分:1、2、3, 4、5、6, 7、8、9, 10、11、12
*/
public static Date getSeasonStartDate (Date date) {
Calendar calendar = Calendar.getInstance();
calendar.setTime(date);
int month = calendar.get(Calendar.MONTH);
calendar.set(Calendar.MONTH, month / 3 * 3);
calendar.set(Calendar.DATE, 1);
return calendar.getTime();
}
获取当前日期上一季度开始结束日期时间
/**
* 获取当前日期上一季度 开始时间
*
* @return
*/
public static Date getStartQuarter(Date date) {
Calendar startCalendar = Calendar.getInstance();
startCalendar.setTime(date);
startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3 - 1) * 3);
startCalendar.set(Calendar.DAY_OF_MONTH, 1);
setMinTime(startCalendar);
return startCalendar.getTime();
}
/**
* 获取当前日期上一季度 结束时间
*当前日期为31号存在bug已修复
* @return
*/
public static Date getLastQuarter(Date date) {
Calendar endCalendar = Calendar.getInstance();
endCalendar.setTime(date);
int month = endCalendar.get(Calendar.MONTH);
endCalendar.set(Calendar.MONTH, (month/ 3 - 1) * 3 + 3);
endCalendar.set(Calendar.DATE, 1);
return new Date(endCalendar.getTime().getTime() - 24 * 60 * 60 *1000);
}
/**
* 最小时间
*
* @param calendar
*/
private static void setMinTime(Calendar calendar) {
calendar.set(Calendar.HOUR_OF_DAY, 0);
calendar.set(Calendar.MINUTE, 0);
calendar.set(Calendar.SECOND, 0);
calendar.set(Calendar.MILLISECOND, 0);
}
/**
* 最大时间
*
* @param calendar
*/
private static void setMaxTime(Calendar calendar) {
calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY));
calendar.set(Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE));
calendar.set(Calendar.SECOND, calendar.getActualMaximum(Calendar.SECOND));
calendar.set(Calendar.MILLISECOND, calendar.getActualMaximum(Calendar.MILLISECOND));
}
/**
*验证
**/
@Test
public void test3(){
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
try {
System.out.println("当前日期 :2022-12-31");
System.out.println(" 获取当前日期上一季度 结束时间"+sdf.format(getLastQuarter(sdf.parse("2022-12-31"))));
System.out.println(" 获取当前日期上一季度 开始时间"+sdf.format(getStartQuarter(sdf.parse("2022-12-31"))));
System.out.println(" 获取当前日期所在季度 开始时间"+sdf.format(getSeasonStartDate(sdf.parse("2022-12-31"))));
System.out.println(" 获取当前日期所在季度 结束时间"+sdf.format(getSeasonEndDate(sdf.parse("2022-12-31"))));
} catch (ParseException e) {
e.printStackTrace();
}
}
结果
之前有存在31号bug情况,现在修复啦,感谢各位大佬指教~