【问题标题】:How to find next dates of some specific day occured after specific date using java?如何使用java查找特定日期之后某个特定日期的下一个日期?
【发布时间】:2013-06-20 11:08:37
【问题描述】:
String specificDate=2013+"-"+06+"-"+20;
String day="Monday";

如何找到specificDate之后的下一个星期一到来的日期?

【问题讨论】:

  • 听起来像是一个家庭作业问题。你可以使用 java.util.Calendar 然后增加它直到你到达下一个星期一。

标签: java


【解决方案1】:

您要么想查看Java's CalendarJodaTime,因为您正在查看日期规则,我推荐 Joda。

【讨论】:

    【解决方案2】:

    您确实应该使用更高级别的日期库来为您执行此操作。不幸的是,java 内置的 Date 和 Calendar 类远不理想。在新的 JDK 设计最终确定之前,您可以查看这个库,它已成为 Java 开发人员中日期操作的事实标准。

    http://joda-time.sourceforge.net/

    【讨论】:

      【解决方案3】:

      您应该为此使用 Calendar 类。

      Calendar c1 = Calendar.getInstance();  
      c1.set(2013, Calendar.JUNE, 20);
      
      int weekday = now.get(Calendar.DAY_OF_WEEK);  
      if (weekday != Calendar.MONDAY) {
          // calculate how much to add
          // the 2 is the difference between Saturday and Monday
          int days = (Calendar.SATURDAY - weekday + 2) % 7;
          now.add(Calendar.DAY_OF_YEAR, days);
      }
      

      【讨论】:

        【解决方案4】:

        试试这个

            Calendar c = new GregorianCalendar(2013, 5, 20);
            int diff = Calendar.MONDAY - c.get(Calendar.DAY_OF_WEEK);
            if (diff < 0) {
                diff = 7 + diff;
            }
            c.add(Calendar.DATE, diff);
            Date monday = c.getTime();
        

        【讨论】:

          【解决方案5】:
           Calendar now = Calendar.getInstance();  
           SimpleDateFormat sdf = new SimpleDateFormat(formatString);
           now.setTime(sdf.parse(dateString));
           int weekday = now.get(Calendar.DAY_OF_WEEK);  
           if (weekday != Calendar.MONDAY)  
           {  
          
               int days = (Calendar.SATURDAY - weekday + 2) % 7;  
               now.add(Calendar.DAY_OF_YEAR, days);  
           }  
           Date monday = now.getTime();  
          

          【讨论】:

            【解决方案6】:

            使用标准 API 执行此操作的最简单方法是将星期几设置为星期一,然后提前一周:

            Calendar c = Calendar.getInstance();
            c.set(Calendar.DAY_OF_WEEK, Calendar.MONDAY); // Sets c to this week's Monday
            c.add(Calendar.DATE, 7);                      // Advances c to next week's Monday
            

            请注意,如果您的文化中一周的第一天是星期日,并且您的开始日期是星期日,set 方法会将日期移动到下一个星期一(而不是前一个星期一)并且您最终会计算给定日期后的第二个星期一。如果一周的第一天是星期一,一切都会按预期进行。

            【讨论】:

              【解决方案7】:

              对于 Java 8,您可以使用类似...

              LocalDate date = LocalDate.of(2013, Month.JUNE, 20);
              LocalDate nextWed2 = date.with(TemporalAdjusters.nextOrSame(DayOfWeek.MONDAY));
              

              或者...

              LocalDate date = LocalDate.of(2013, Month.JUNE, 20);
              LocalDate nextWed2 = date.with(TemporalAdjusters.next(DayOfWeek.MONDAY));
              

              如果选择日期是MONDAY,但您想要下一个MONDAY

              here 所展示的更详细的说明

              或者,如果您更喜欢使用 JodaTime...

                  LocalDate date = new LocalDate(2013, DateTimeConstants.JUNE, 20);
                  LocalDate nextMonday = new LocalDate(date);
                  if (date.getDayOfWeek() >= DateTimeConstants.FRIDAY) {
                      nextMonday = date.plusWeeks(1);
                  }
                  nextMonday = nextMonday.withDayOfWeek(DateTimeConstants.FRIDAY);
              

              这是基于this answer

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 2017-04-22
                • 2013-02-05
                • 2021-06-01
                • 1970-01-01
                • 1970-01-01
                • 2011-09-27
                • 2015-10-05
                • 1970-01-01
                相关资源
                最近更新 更多