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();
 }

你可能感兴趣的:(Java基础,java时间计算)