日期工具类

需求:
  给定当前日期,查询当前日期本月、本周、本年等时间,查询周一、周日、月初、月末、年初、年末等时间。

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)));
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值