【问题标题】:Get the last day of next three weeks Java获取未来三周的最后一天 Java
【发布时间】:2014-04-16 08:00:04
【问题描述】:

我想知道接下来三周的最后一天。

例如,如果今天是 4 月 16 日星期三,我会得到 5 月 4 日星期日的结果。

我写过这样的函数

public static Date nexThreeWeekEnd() {
    Date now = new Date();
    Date nextWeeks = DateUtils.truncate(DateUtils.addWeeks(now, 3), Calendar.DATE);
    Calendar calendar = Calendar.getInstance();
    calendar.setTime(nextWeeks);
    calendar.set(Calendar.DATE, calendar.getActualMaximum(Calendar.DAY_OF_WEEK));
    return calendar.getTime();
}

从这个库中使用 DateUtils:

org.apache.commons.lang.time.DateUtils;

但此函数将返回 5 月 7 日星期三,这意味着它将准确返回当前日期。

没有必要重写我的函数。解决我的问题的任何其他方法都将非常受欢迎。 谢谢。

【问题讨论】:

  • 我已经编辑了我的问题并添加了库,谢谢:D
  • 在您给出的示例中,您指定了两到三周,它应该从星期日返回三周还是两周?
  • 问题自相矛盾。你的第一句话说三周后,但你的第二句话的例子 2014-05-04 只是两周后。

标签: java date datetime


【解决方案1】:

使用下面的代码希望对你有帮助

   Calendar cal  = Calendar.getInstance();
   int currentDay = cal.get(Calendar.DAY_OF_WEEK);
   int leftDays= Calendar.SUNDAY - currentDay;
   cal.add(Calendar.DATE, leftDays)

【讨论】:

    【解决方案2】:

    试试看:

    Calendar c = Calendar.getInstance();
    c.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY);
    c.add(Calendar.WEEK_OF_YEAR, 2);
    
    DateFormat df = new SimpleDateFormat("yyyy/MM/dd");
    System.out.println(df.format(c.getTime()));
    

    输出:

    2014/05/04
    

    【讨论】:

      【解决方案3】:

      你可以这样做:

      Calendar calendar = Calendar.getInstance().getFirstDayOfWeek();
      calendar.add(Calendar.WEEK_OF_YEAR, 4);
      calendar.add(Calendar.DAY_OF_MONTH, -1);
      

      【讨论】:

        【解决方案4】:

        在Java中我们可以使用公历

        请检查以下代码是否对您有帮助

            Date d = new Date();
            GregorianCalendar cal1  =  new GregorianCalendar();
            cal1.setTime(d);
            System.out.println(cal1.getTime());
            int day = cal1.get(Calendar.DAY_OF_WEEK );
            cal1.add(Calendar.DAY_OF_YEAR,-(day-1));/*go to start of the week*/
            cal1.add(Calendar.WEEK_OF_YEAR,3); // add 3 weeks 
            day = cal1.get(Calendar.DAY_OF_MONTH );// get the end Day of the 3rd week
            System.out.println("end of the 3rd week  ="+day);
        

        【讨论】:

          【解决方案5】:

          问题和其他答案使用旧的过时类。

          java.time

          java.time 框架内置于 Java 8 及更高版本中。这些类取代了旧的麻烦的日期时间类,例如java.util.Date.Calendar。见Oracle Tutorial。大部分 java.time 功能在ThreeTen-Backport 中向后移植到 Java 6 和 7,并在 ThreeTenABP 中进一步适应 Android。

          LocalDate 类表示没有时间和时区的仅日期值。您可以使用TemporalAdjuster 生成相对于原始值的新LocalDate 值。 TemporalAdjusters(注意复数)类实现了几个方便的此类调整器,包括我们需要的一个,nextOrSame( WeekOfDay )WeekOfDay 类是一个方便的枚举,代表每周 7 天(周一至周日)中的每一天。

          LocalDate start = LocalDate.of ( 2014 , Month.APRIL , 16 );
          LocalDate nextOrSameSunday = start.with ( TemporalAdjusters.nextOrSame ( DayOfWeek.SUNDAY ) );
          LocalDate twoWeeksAfterNextOrSameSunday = nextOrSameSunday.plusWeeks ( 2 );
          

          转储到控制台。

          System.out.println ( "start: " + start + " | nextOrSameSunday: " + nextOrSameSunday + " | twoWeeksAfterNextOrSameSunday: " + twoWeeksAfterNextOrSameSunday );
          

          开始:2014-04-16 | nextOrSameSunday: 2014-04-20 | twoWeeksAfterNextOrSameSunday: 2014-05-04

          【讨论】:

            猜你喜欢
            • 2021-07-21
            • 1970-01-01
            • 1970-01-01
            • 2016-07-18
            • 1970-01-01
            • 2011-11-17
            • 2022-12-06
            • 1970-01-01
            • 2013-11-22
            相关资源
            最近更新 更多