Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 获得接下来三周的最后一天_Java_Date_Datetime - Fatal编程技术网

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

Java 获得接下来三周的最后一天,java,date,datetime,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.getInstan

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

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

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

使用下面的代码,希望对您有所帮助

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

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

您可以这样做:

Calendar calendar = Calendar.getInstance().getFirstDayOfWeek();
calendar.add(Calendar.WEEK_OF_YEAR, 4);
calendar.add(Calendar.DAY_OF_MONTH, -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);

这个问题和其他答案使用了过时的课程

java.time 该框架内置于Java8及更高版本中。这些类取代了旧的麻烦的日期时间类,如
java.util.date
&
.Calendar
。看见大部分java.time功能都在中向后移植到Java6和Java7,并在中进一步适应Android

该类表示只包含日期的值,不包含一天中的时间和时区。可以使用生成相对于原始值的新
LocalDate
值。(注意复数)类实现了几个方便的调整器,包括我们需要的一个。这门课是一个方便的枚举表,代表一周中七天的每一天,周一周日

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下一个星期日:2014-04-20下一个星期日后两周:2014-05-04


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