【问题标题】:Get last week date range for a date in Java获取 Java 中某个日期的上周日期范围
【发布时间】:2013-06-20 10:04:42
【问题描述】:

假设我的日期是 2013 年 6 月 20 日

如何获取上周的日期范围,即在本例中为 6 月 9 日至 6 月 15 日。

如果日期是 2013 年 6 月 2 日

范围应为 5 月 26 日至 6 月 1 日

【问题讨论】:

  • @Baadshah,非常有帮助:) +1
  • @Baadshah 感谢您的帮助。我希望这一点,只是因为我还没有在一些花哨的编码大括号中包含我迄今为止尝试过的东西。当然。
  • @RyanMalhotra 但是,如果您发布您迄今为止尝试过的内容,很容易找到错误所在,而不是我们自己编写所有代码。
  • @Ryan Malhotra 没有什么叫花哨的编码大括号,在编码标记中格式化代码真的很有帮助。其次,如果你发布你所做的事情,那么可能会让你的问题看起来比作业更真实!

标签: java datetime


【解决方案1】:

这是基于 Java 日历的解决方案

    Date date = new Date();
    Calendar c = Calendar.getInstance();
    c.setTime(date);
    int i = c.get(Calendar.DAY_OF_WEEK) - c.getFirstDayOfWeek();
    c.add(Calendar.DATE, -i - 7);
    Date start = c.getTime();
    c.add(Calendar.DATE, 6);
    Date end = c.getTime();
    System.out.println(start + " - " + end);

输出

Mon Jun 10 13:22:01 EEST 2013 - Sun Jun 16 13:22:01 EEST 2013

它是本地化的,在我的语言环境周从星期一开始

【讨论】:

  • 非常感谢您的帮助。 :)
  • 仅供参考,麻烦的 Calendar 类现在已被遗留,被 java.time 类所取代。
  • 对于 2109 年 12 月 31 日的日期,它返回 2018-12-23 2018-12-29 这是错误的。
【解决方案2】:

Java 8/11 版本

final ZonedDateTime input = ZonedDateTime.now();
System.out.println(input);
final ZonedDateTime startOfLastWeek = input.minusWeeks(1).with(DayOfWeek.MONDAY);
System.out.println(startOfLastWeek);
final ZonedDateTime endOfLastWeek = startOfLastWeek.plusDays(6);
System.out.println(endOfLastWeek);

【讨论】:

    【解决方案3】:

    您可以使用JodaTime 获得更清洁的解决方案。使用JodaTime,您可以执行以下操作:

    final DateTime input = new DateTime();
    System.out.println(input);
    final DateMidnight startOfLastWeek = 
               new DateMidnight(input.minusWeeks(1).withDayOfWeek(DateTimeConstants.MONDAY));
    System.out.println(startOfLastWeek);
    final DateMidnight endOfLastWeek = startOfLastWeek.plusDays(6);
    System.out.println(endOfLastWeek);
    

    【讨论】:

    • 谢谢.. 但是在日历类中不可能吗?
    【解决方案4】:

    试试这个

    public static void main(String[] args)
        {
            Calendar calendar = Calendar.getInstance();
            calendar.setTime(new Date());
            System.out.println("First Day : " + SampleDateLimit.firstDayOfLastWeek(calendar).getTime());
            System.out.println("Last Day : " + SampleDateLimit.lastDayOfLastWeek(calendar).getTime());
        }
    
        public static Calendar firstDayOfLastWeek(Calendar c)
        {
            c = (Calendar) c.clone();
            // last week
            c.add(Calendar.WEEK_OF_YEAR, -1);
            // first day
            c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
            return c;
        }
    
        public static Calendar lastDayOfLastWeek(Calendar c)
        {
            c = (Calendar) c.clone();
            // first day of this week
            c.set(Calendar.DAY_OF_WEEK, c.getFirstDayOfWeek());
            // last day of previous week
            c.add(Calendar.DAY_OF_MONTH, -1);
            return c;
        }
    

    【讨论】:

      【解决方案5】:

      使用 JodaTIME 和 Java 8/11

      public class DateUtils {
      private final DateTime date;
      
      public DateUtils(Date date) {
          this.date = new DateTime(date);
      }
      
      public DateMidnight initFirstDayOfLastYear(){
          return new DateMidnight(date.minusYears(1).dayOfYear().withMinimumValue());
      }
      public Date getFirstDayOfLastYear(){
          return initFirstDayOfLastYear().toDate();
      }
      
      public DateMidnight initLastDayOfLastYear(){
          return initFirstDayOfLastYear().dayOfYear().withMaximumValue();
      }
      public Date getLastDayOfLastYear(){
          return initLastDayOfLastYear().toDate();
      }
      
      public DateMidnight initFirstDayOfLastMonth(){
          return new DateMidnight(date.minusMonths(1).dayOfMonth().withMinimumValue());
      }
      
      public Date getFirstDayOfLastMonth(){
          return initFirstDayOfLastMonth().toDate();
      }
      
      public DateMidnight initLastDayOfLastMonth(){
          return new DateMidnight(initFirstDayOfLastMonth().dayOfMonth().withMaximumValue());
      }
      
      public Date getLastDayOfLastMonth(){
          return initLastDayOfLastMonth().toDate();
      }
      
      public DateMidnight initFirstDayOfLastWeek(){
          return new DateMidnight(date.minusWeeks(1).dayOfWeek().withMinimumValue());
      }
      public Date getFirstDayOfLastWeek(){
          return initFirstDayOfLastWeek().toDate();
      }
      
      public DateMidnight initLastDayOfLastWeek(){
          return initFirstDayOfLastWeek().dayOfWeek().withMaximumValue();
      }
      public Date getLastDayOfLastWeek(){
          return initLastDayOfLastWeek().toDate();
      }
      
      public DateMidnight initYesterday(){
          return new DateMidnight(date.minusDays(1));
      }
      public Date getYesterday(){
          return initYesterday().toDate();
      }
      
      // this year
      
      public DateMidnight initFirstDayOfYear(){
          return new DateMidnight(date.dayOfYear().withMinimumValue());
      }
      public Date getFirstDayOfYear(){
          return initFirstDayOfLastYear().toDate();
      }
      
      public DateMidnight initLastDayOfYear(){
          return initFirstDayOfLastYear().dayOfYear().withMaximumValue();
      }
      public Date getLastDayOfYear(){
          return initLastDayOfLastYear().toDate();
      }
      
      public DateMidnight initFirstDayOfMonth(){
          return new DateMidnight(date.dayOfMonth().withMinimumValue());
      }
      
      public Date getFirstDayOfMonth(){
          return initFirstDayOfLastMonth().toDate();
      }
      
      public DateMidnight initLastDayOfMonth(){
          return new DateMidnight(initFirstDayOfMonth().dayOfMonth().withMaximumValue());
      }
      
      public Date getLastDayOfMonth(){
          return initLastDayOfLastMonth().toDate();
      }
      
      public DateMidnight initFirstDayOfWeek(){
          return new DateMidnight(date.dayOfWeek().withMinimumValue());
      }
      public Date getFirstDayOfWeek(){
          return initFirstDayOfLastWeek().toDate();
      }
      
      public DateMidnight initLastDayOfWeek(){
          return initFirstDayOfWeek().dayOfWeek().withMaximumValue();
      }
      public Date getLastDayOfWeek(){
          return initLastDayOfWeek().toDate();
      }
      
      public DateMidnight initToday(){
          return new DateMidnight(date.minusDays(1));
      }
      public Date getToday(){
          return initToday().toDate();
      }
      

      }

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2011-07-30
      • 2019-03-31
      • 1970-01-01
      • 1970-01-01
      • 2021-12-31
      • 2011-03-22
      • 1970-01-01
      • 1970-01-01
      • 2021-12-05
      相关资源
      最近更新 更多