import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class test3 { /** * 获取当前日期上一季度 开始时间 * * @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(); } /** * 获取当前日期上一季度 结束时间 * * @return */ public static Date getLastQuarter(Date date) { Calendar endCalendar = Calendar.getInstance(); endCalendar.setTime(date); endCalendar.set(Calendar.MONTH, ((int) endCalendar.get(Calendar.MONTH) / 3 - 1) * 3 + 2); endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH)); setMaxTime(endCalendar); return endCalendar.getTime(); } /** * 最小时间 * * @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)); } /** * 计算某日期所在季度开始日期 * 季度划分: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 String getYearBefore() { SimpleDateFormat formats = new SimpleDateFormat("yyyy"); Calendar c = Calendar.getInstance(); c.add(Calendar.YEAR, -1); Date date = c.getTime(); return formats.format(date); } /** * 获取当月(开始时间) * * @return */ public static String getCurrentMonthStartDate() { // 获取当前年份、月份、日期 Calendar cale = null; // 获取当月第一天 SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); String firstday; cale = Calendar.getInstance(); cale.add(Calendar.MONTH, 0); cale.set(Calendar.DAY_OF_MONTH, 1); firstday = format.format(cale.getTime()); return firstday; } /** * 获取当月(结束时间) * * @return */ public static String getCurrentMonthEndDate() { // 获取当前年份、月份、日期 Calendar cale = null; // 获取当月最后一天 SimpleDateFormat format = new SimpleDateFormat("yyyyMMdd"); String lastday; cale = Calendar.getInstance(); cale.add(Calendar.MONTH, 1); cale.set(Calendar.DAY_OF_MONTH, 0); lastday = format.format(cale.getTime()); return lastday; } /** * 获取当季 * * @return */ public static DateRange getThisQuarter() { Calendar startCalendar = Calendar.getInstance(); startCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3) * 3); startCalendar.set(Calendar.DAY_OF_MONTH, 1); setMinTime(startCalendar); Calendar endCalendar = Calendar.getInstance(); endCalendar.set(Calendar.MONTH, ((int) startCalendar.get(Calendar.MONTH) / 3) * 3 + 2); endCalendar.set(Calendar.DAY_OF_MONTH, endCalendar.getActualMaximum(Calendar.DAY_OF_MONTH)); setMaxTime(endCalendar); return new DateRange(startCalendar.getTime(), endCalendar.getTime()); } public static void main(String[] args) throws ParseException { SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd"); SimpleDateFormat f = new SimpleDateFormat("yyyy"); String str = "2022-01-01"; Date parse = format.parse(str); System.out.println(format.format(parse)); // Date startQuarter = getStartQuarter(new Date()); Date startQuarter = getStartQuarter(parse); System.out.println("获取当前日期上一季度 开始时间"+format.format(startQuarter)); // Date lastQuarter = getLastQuarter(new Date()); Date lastQuarter = getLastQuarter(parse); System.out.println("获取当前日期上一季度 结束时间:"+format.format(lastQuarter)); System.out.println("计算某日期所在季度开始日期:"+format.format(getSeasonStartDate(new Date()))); System.out.println("计算某日期所在季度结束日期:"+format.format(getSeasonEndDate(new Date()))); System.out.println("当前年的上一年:"+getYearBefore()); System.out.println("获取当月(开始时间):"+getCurrentMonthStartDate()); System.out.println("获取当月(结束时间):"+getCurrentMonthEndDate()); DateRange thisQuarter = getThisQuarter(); System.out.println("获取当季:"+thisQuarter.getStart()+"----"+thisQuarter.getEnd()); } }