Java判断日期在指定时间段中的第几周

/**
 * 给定开始时间和结束时间,判断当前时间是第几周,七天为一周,按照自然周进行计算
 *
 * @param startTime
 * @return
 */
public static int getWeek(long startTime, long currentTime, long endTime) {
    if (currentTime < startTime || endTime < startTime) {
        return 0;
    }

    Calendar calendar = Calendar.getInstance();
    calendar.setTimeInMillis(getFirstDayOfWeek(startTime).getTime());
    int year = calendar.get(Calendar.YEAR);
    int month = calendar.get(Calendar.MONTH);
    int dayOfMonth = calendar.get(Calendar.DAY_OF_MONTH);

    calendar.clear();
    calendar.set(year, month, dayOfMonth);
    // 当前时间和开始时间0点的毫秒数差值
    long value = currentTime - calendar.getTimeInMillis();
    if (getLastDayOfWeek(endTime).getTime() < currentTime) {
        value = endTime - calendar.getTimeInMillis();
    }
    // 一周的毫秒数
    long oneWeekMillis = 1000 * 60 * 60 * 24 * 7;

    return (int) (value / oneWeekMillis + 1);
}

/**
  * 获取当前时间的周一时间
  *
  * @param date
  * @return
  */
 public static Date getFirstDayOfWeek(long date) {
     Calendar c = Calendar.getInstance();
     c.setTime(new Date(date));
     if (c.get(Calendar.DAY_OF_WEEK) == 1) {
         c.add(Calendar.DAY_OF_MONTH, -1);
     }
     c.add(Calendar.DATE, c.getFirstDayOfWeek() - c.get(Calendar.DAY_OF_WEEK) + 1);
     return c.getTime();
 }

 /**
  * 获取当前时间的周日时间
  *
  * @param date
  * @return
  */
 public static Date getLastDayOfWeek(long date) {
     Calendar c = Calendar.getInstance();
     c.setTime(new Date(date));
     // 如果是周日直接返回
     if (c.get(Calendar.DAY_OF_WEEK) == 1) {
         return new Date(date);
     }
     c.add(Calendar.DATE, 7 - c.get(Calendar.DAY_OF_WEEK) + 1);
     return c.getTime();
 }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值