获得接下来三周Java的最后一天

时间:2014-04-16 08:00:05

标签: java date datetime

我希望接下来三周的最后一天。

例如,如果今天是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日星期三返回,这意味着它将完全返回当前日期。

没有必要重写我的功能。解决我的问题的任何其他方式将非常适合。 谢谢。

5 个答案:

答案 0 :(得分:1)

使用下面的代码希望它有所帮助

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

答案 1 :(得分:1)

试试:

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

答案 2 :(得分:1)

您可以这样做:

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

答案 3 :(得分:1)

在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);

答案 4 :(得分:1)

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

java.time

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

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

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