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_Week Number - Fatal编程技术网

Java 从开始日期到结束日期的周数

Java 从开始日期到结束日期的周数,java,date,week-number,Java,Date,Week Number,在Java中,我试图获取介于给定开始日期和结束日期之间的周数。这是ISO8601日期 当前周数为34 对于这个例子,我会得到34,35,36。。。2018年上周数..1,2…2019年上周数等 有好的解决办法吗 目前,我在同一年的日期范围内工作,我尝试的是,我从开始日期和结束日期获得开始周数和结束周数,然后我循环它,给出开始值和结束值。但是如果日期范围在几年内下降,会是怎样的呢?有人能帮我吗?如果您使用的是Java 8,您可以像这样使用API: int addWeek = 0; if(start

在Java中,我试图获取介于给定开始日期和结束日期之间的周数。这是ISO8601日期

当前周数为34

对于这个例子,我会得到34,35,36。。。2018年上周数..1,2…2019年上周数等

有好的解决办法吗


目前,我在同一年的日期范围内工作,我尝试的是,我从开始日期和结束日期获得开始周数和结束周数,然后我循环它,给出开始值和结束值。但是如果日期范围在几年内下降,会是怎样的呢?有人能帮我吗?如果您使用的是Java 8,您可以像这样使用API:

int addWeek = 0;
if(startDate.get(WeekFields.ISO.weekOfYear()) < endDate.get(WeekFields.ISO.weekOfYear())){
    addWeek = 1;
}
long weeks = WEEKS.between(startDate, endDate) + addWeek;//Get the number of weeks in your case (52)
List<Integer> numberWeeks = new ArrayList<>();
if (weeks >= 0) {
    int week = 0;
    do {
        //Get the number of week
        int weekNumber = startDate.plusWeeks(week).get(WeekFields.ISO.weekOfYear());
        numberWeeks.add(weekNumber);
        week++;
    } while (week <= weeks);
}

请注意,您可以从这两个年份获得这两个周数,2018年的周数[34-52],然后是2019年的周数[1-33]

如果您使用的是Java 8,您可以像这样使用API:

int addWeek = 0;
if(startDate.get(WeekFields.ISO.weekOfYear()) < endDate.get(WeekFields.ISO.weekOfYear())){
    addWeek = 1;
}
long weeks = WEEKS.between(startDate, endDate) + addWeek;//Get the number of weeks in your case (52)
List<Integer> numberWeeks = new ArrayList<>();
if (weeks >= 0) {
    int week = 0;
    do {
        //Get the number of week
        int weekNumber = startDate.plusWeeks(week).get(WeekFields.ISO.weekOfYear());
        numberWeeks.add(weekNumber);
        week++;
    } while (week <= weeks);
}
请注意,您从这两个年份中都得到了周数,2018年的周数[34-52],然后是2019年的周数[1-33]

这是正确的

年鉴 您可能希望将ThreeTen额外库添加到项目中,以利用其YearWeek类。此类使用标准ISO 8601周定义表示特定的一周:从星期一开始,第1周包含日历年的第一个星期四,日历年的最后几天结束/开始可能在基于下一周/上一周的年份中

YearWeek ywStart = YearWeek.from( startDate ) ;
增量,如另一个答案所示,但收集YearWeek对象而不是整数

ArrayList< YearWeek > yearWeeks = new ArrayList<>( countOfWeeks + 2 ) ;  // Add one or two for good measure. 
…
YearWeek yw = yw.plusWeeks( 1 ) ;
yearWeeks.add( yw ) ;
要报告,请调用YearWeek::toString方法以标准ISO 8601格式生成文本:yyyy Www,如2018-W43

答案是正确的

年鉴 您可能希望将ThreeTen额外库添加到项目中,以利用其YearWeek类。此类使用标准ISO 8601周定义表示特定的一周:从星期一开始,第1周包含日历年的第一个星期四,日历年的最后几天结束/开始可能在基于下一周/上一周的年份中

YearWeek ywStart = YearWeek.from( startDate ) ;
增量,如另一个答案所示,但收集YearWeek对象而不是整数

ArrayList< YearWeek > yearWeeks = new ArrayList<>( countOfWeeks + 2 ) ;  // Add one or two for good measure. 
…
YearWeek yw = yw.plusWeeks( 1 ) ;
yearWeeks.add( yw ) ;


要报告,请调用YearWeek::toString方法以标准ISO 8601格式生成文本:yyyy Www,如2018-W43

我不太清楚你在问什么,但你能抵消几周吗?如果日期范围跨越几年,你需要检查12月31日是否在第52周或53周,其余的应该是相当直截了当的现在我得到了它的工作。。。显示你的代码永远不要使用糟糕的日期和日历类。它们在几年前就被现代的java.time类取代了。我不太清楚你在问什么,但你能抵消几周吗?如果日期范围跨越几年,你需要检查12月31日是在第52周还是53周,其余的应该很简单,现在我已经开始工作了。。。显示你的代码永远不要使用糟糕的日期和日历类。多年前,它们被现代的java.time类所取代。@JavaProgrammer检查我的编辑,在本例中,我想使用do{}while循环,别忘了检查周数是否很好或等于0,但当我检查以下两个日期2018-08-24T12:18:06166和2018-08-30T12:18:06166时,理想情况下我应该得到34和35,对吗?因为第一个日期属于第34周,第二个日期属于第35周。非常感谢你的帮助。你太快了:@JavaProgrammer啊,我不明白你的问题。在这种情况下,你可以使用WeekFields.SUNDAY\u START.weekOfYear而不是WeekFields.ISO.weekOfYear。你的代码可以是这样的:好的,我想这样就可以了。谢谢you@JavaProgrammer检查我的编辑,在这种情况下,我想使用do{}while循环,别忘了检查周数是否很好或等于0,但当我检查以下两个日期2018-08-24T12:18:06166和2018-08-30T12:18:06166时,理想情况下我应该得到34和35,对吗?因为第一个日期属于第34周,第二个日期属于第35周。非常感谢你的帮助。你太快了:@JavaProgrammer啊,我不明白你的问题在这种情况下,你可以使用WeekFields.SUNDAY\u START.weekOfYear而不是WeekFields.ISO.weekOfYear你的代码可以是这样的:好的,我想这样就可以了。谢谢你2018-W43比43 nice one Basil更清楚,所以我应该这样做我的代码,以获得您的结果感谢巴兹尔和YCF_L@YCF_L在生成自己的ISO 8601字符串时,请确保提取基于周的年数,而不是日历年。如果在几个星期或几个季度内做了大量工作,我建议下载Three Ten Extra library,而不是重新发明它。2018-W43比43 nice one Basil更清晰,因此我应该这样编写代码以获得您的结果,感谢Basil和YCF_L@YCF_L生成自己的ISO 8601字符串时,确保提取基于周的年数,而不是日历年。如果你每天做很多工作 我建议下载额外的“三个十”库,而不是重新创建它。