Java如何根据一个时间,得到这个时间所在的这一周的周日?
PHPz
PHPz 2017-04-18 09:57:05
0
3
604

比如给一个时间 2016-09-06(周二)就能得到2016-09-04(2016-09-06这一周的周日)

PHPz
PHPz

学习是最好的投资!

répondre à tous(3)
黄舟
public static String getFirstDayOfWeek(String date){        
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");        
    Calendar cal = Calendar.getInstance();
    try {
        cal.setTime(sdf.parse(date));
        // Calendar默认周日为第一天, 所以设置为1
        cal.set(Calendar.DAY_OF_WEEK, 1);
        // 如果要返回00点0分0秒
        //cal.set(Calendar.HOUR_OF_DAY, 0);
        //cal.set(Calendar.MINUTE, 0);
        //cal.set(Calendar.SECOND, 0);
        //cal.set(Calendar.MILLISECOND, 0);
    } catch (ParseException e) {
            
    }        
    return sdf.format(cal.getTime());
}
迷茫
import org.joda.time.DateTime;
import org.joda.time.DateTimeConstants;

import java.util.Date;

public class SWDateUtils {

  private SWDateUtils() {
  }

  /**
   * 返回截掉DayOfMonth以下的字段的Date,不修改原来的Date <br>
   * 比如 2015-07-27 13:12:12 -> 2015-07-27 00:00:00
   *
   * @param date
   * @return
   */
  public static Date truncateDayOfMonth(Date date) {
    return new DateTime(date).dayOfMonth().roundFloorCopy().toDate();
  }

  /**
   * 返回截掉Hour以下的字段的Date,不修改原来的Date <br>
   * 比如 2015-07-27 13:12:12 -> 2015-07-27 13:00:00
   *
   * @param date
   * @return
   */
  public static Date truncateHour(Date date) {
    return new DateTime(date).hourOfDay().roundFloorCopy().toDate();
  }

  /**
   * 返回截掉Minute以下的字段的Date,不修改原来的Date <br>
   * 比如 2015-07-27 13:12:12 -> 2015-07-27 13:12:00
   *
   * @param date
   * @return
   */
  public static Date truncateMinute(Date date) {
    return new DateTime(date).minuteOfHour().roundFloorCopy().toDate();
  }

  /**
   * 这一天是星期几,1:星期一,7:星期天
   *
   * @param date
   * @return
   */
  public static int getDayOfWeek(Date date) {
    return new DateTime(date).getDayOfWeek();
  }

  /**
   * 根据起始日期获得绝对日期
   *
   * @param startDate         起始日期
   * @param weekOffset        相对周次,0-based
   * @param dayOfWeek         星期几,1:星期一,7:星期天
   * @param weekStartOnSunday 一周第一天是不是星期天,如果false则是星期一
   * @return
   */
  public static Date getDate(Date startDate, int weekOffset, int dayOfWeek, boolean weekStartOnSunday) {

    // truncate掉小时及以后的数据
    DateTime dateTime = new DateTime(truncateDayOfMonth(startDate));

    if (!weekStartOnSunday) {

      // 因为joda-time采用ISO标准,所以一周的第一天是礼拜一
      // http://stackoverflow.com/questions/1801907/joda-time-first-day-of-week
      return
          dateTime
              .withDayOfWeek(DateTimeConstants.MONDAY)
              .plusWeeks(weekOffset)
              .withDayOfWeek(dayOfWeek).toDate();

    } else {

      if (getDayOfWeek(startDate) == 7) {

        dateTime = dateTime.plusWeeks(weekOffset);

        if (dayOfWeek != 7) {
          dateTime = dateTime.plusDays(dayOfWeek);
        }

        return dateTime.toDate();

      } else {

        dateTime = dateTime
            .withDayOfWeek(DateTimeConstants.SUNDAY)
            .minusWeeks(1)    // 回到一周的第一天
            .plusWeeks(weekOffset)  // 增加周数
        ;

        if (dayOfWeek != 7) {
          dateTime = dateTime.plusDays(dayOfWeek);
        }

        return dateTime.toDate();

      }

    }

  }

  /**
   * 获取那一天所在周的第一天
   *
   * @param date
   * @param weekStartOnSunday 一周第一天是否礼拜天
   * @return
   */
  public static Date getFirstDateOfThatWeek(Date date, boolean weekStartOnSunday) {

    return weekStartOnSunday ?
        getDate(date, 0, DateTimeConstants.SUNDAY, weekStartOnSunday) :
        getDate(date, 0, DateTimeConstants.MONDAY, weekStartOnSunday);

  }

  /**
   * 获取那一天所在周的最后一天
   *
   * @param date
   * @param weekStartOnSunday 一周第一天是否礼拜天
   * @return
   */
  public static Date getLastDateOfThatWeek(Date date, boolean weekStartOnSunday) {

    return weekStartOnSunday ?
        getDate(date, 0, DateTimeConstants.SATURDAY, weekStartOnSunday) :
        getDate(date, 0, DateTimeConstants.SUNDAY, weekStartOnSunday);

  }

}
迷茫

Il est recommandé d'utiliser la nouvelle API temporelle de Java8, qui est plus pratique à utiliser

LocalDate localDate = LocalDate.parse("2016-09-15");
LocalDate nextSunday = localDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY));

C'est aussi simple... Ce n'est pas aussi gênant que l'ancien Date API avant. Vous devrez peut-être try catch ou juger de nombreuses situations par lui-même. Maintenant, la méthode a été encapsulée

.

Pour cette méthode encapsulée, on peut dire que Java8, en tant que dernière version de Java, a intégré le style impératif précédent de Java dans le style déclaratif, et le code est plus lisible localDate.withC'est la nouvelle fois. API Le paramètre de la méthode Temporal de la classe abstraite temporelle définie with est une interface TemporalAdjuster, ce qui signifie que l'objet actuel peut ajuster l'objet actuel en fonction de cet ajusteur spécifique TemporalAdjusters.next génère un ajusteur pour ajuster le jour. de la semaine ...signifie la suivante, le paramètre passé DayOfWeek.SUNDAY signifie dimanche

C'est donc vraiment facile de lire localDate.with(TemporalAdjusters.next(DayOfWeek.SUNDAY)); ce code dans son intégralité. Ce que vous voyez est ce que vous obtenez. Ajustez l'heure actuelle localDate en fonction de l'ajusteur (dimanche prochain) et revenez

.
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal