需求: 给定当前日期,查询当前日期本月、本周、本年等时间,查询周一、周日、月初、月末、年初、年末等时间。 1、查询N周前,周一00:00:00的时间
public static Date getWeekStartTime(int addWeek) { Calendar cal = Calendar.getInstance(); // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 cal.setFirstDayOfWeek(Calendar.MONDAY); // 获得当前日期是一个星期的第几天 int dayWeek = cal.get(Calendar.DAY_OF_WEEK) - 1; if (dayWeek <= 0) { dayWeek = 7; } // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 int offset = 1 - dayWeek; cal.add(Calendar.DATE, offset); cal.add(Calendar.DATE, addWeek * 7); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return cal.getTime(); }
2、查询N周前,周日23:59:59的时间
public static Date getWeekEndTime(int addWeek) { Calendar cal = Calendar.getInstance(); // 设置一个星期的第一天,按中国的习惯一个星期的第一天是星期一 cal.setFirstDayOfWeek(Calendar.MONDAY); // 获得当前日期是一个星期的第几天 int dayWeek = cal.get(Calendar.DAY_OF_WEEK) - 1; if (dayWeek <= 0) { dayWeek = 7; } // 根据日历的规则,给当前日期减去星期几与一个星期第一天的差值 int offset = 7 - dayWeek; cal.add(Calendar.DATE, offset); cal.add(Calendar.DATE, addWeek * 7); cal.set(Calendar.HOUR_OF_DAY, 23); cal.set(Calendar.MINUTE, 59); cal.set(Calendar.SECOND, 59); return cal.getTime(); }
3、查询N月前,月初0点时间
public static Date getMonthStartTime(int addMonth) { Calendar calendar = Calendar.getInstance(); int month = calendar.get(Calendar.MONTH); calendar.set(Calendar.MONTH, month + addMonth); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); }
4、查询N月前,月末23:59:59点时间
public static Date getMonthEndTime(int addMonth) { Calendar calendar = Calendar.getInstance(); int month = calendar.get(Calendar.MONTH); calendar.set(Calendar.MONTH, month + addMonth); //设置日期为本月最大日期 calendar.set(Calendar.DATE, calendar.getActualMaximum(calendar.DATE)); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); return calendar.getTime(); }
5、获取N年前,第一天0:00:00时间
public static Date getYearStartTime(int addYear) { Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); calendar.set(Calendar.YEAR, year + addYear); calendar.set(Calendar.MONTH, 0); //月份从0开始,代表1月 calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); }
6、获取N年前,最后一天0:00:00时间
public static Date getYearEndTime(int addYear) { Calendar calendar = Calendar.getInstance(); int year = calendar.get(Calendar.YEAR); calendar.set(Calendar.YEAR, year + addYear); calendar.set(Calendar.MONTH, 11); calendar.set(Calendar.DAY_OF_MONTH, 31); calendar.set(Calendar.HOUR_OF_DAY, 23); calendar.set(Calendar.MINUTE, 59); calendar.set(Calendar.SECOND, 59); return calendar.getTime(); }
测试类 public static void main(String[] args) { //上个月月初 log.info(DateUtil.formatDateTime(DateUtil.getMonthStartTime(-1))); //上个月月末 log.info(DateUtil.formatDateTime(DateUtil.getMonthEndTime(-1))); //去年第一天 log.info(DateUtil.formatDateTime(DateUtil.getYearStartTime(-1))); //去年最后一天 log.info(DateUtil.formatDateTime(DateUtil.getYearEndTime(-1))); //上周周一 log.info(DateUtil.formatDateTime(DateUtil.getWeekStartTime(-1))); //上周周日 log.info(DateUtil.formatDateTime(DateUtil.getWeekEndTime(-1))); }