从开始日期到结束日期的周数 Java
Week numbers from start date to end date Java
我试图获取 Java 中给定开始日期和结束日期之间的周数。这是 ISO8601
日期。
Example
startDate - "2018-08-24T12:18:06,166"
endDate - "2019-08-24T11:18:06,166"
当前周数是 34。
对于这个例子,我会得到 34,35,36... 2018 年的上周数..1,2...2019 年的上周数等等
有好的解决办法吗?
目前我让它在同一年的日期范围内工作,我尝试的是,我从开始日期和结束日期得到开始周数和结束周数,然后我循环它给出开始值和结束价值。但如果日期范围落在多年内,会怎样?谁能帮帮我
如果你正在使用 Java 8 你可以使用 java.time 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);
}
[34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34]
请注意,您会得到这两年的周数,第 2018 [34-52]
周,然后 2019 [1-33]
周
是正确的。
YearWeek
您可能希望将 ThreeTen-Extra 库添加到您的项目中以使用其 YearWeek
class。 class 表示使用标准 ISO 8601 定义的特定周:从星期一开始,第 1 周包含日历年的第一个星期四,日历的最后 ending/beginning 天-year 可能落在 next/previous 基于周的年份。
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
。
我试图获取 Java 中给定开始日期和结束日期之间的周数。这是 ISO8601
日期。
Example
startDate - "2018-08-24T12:18:06,166"
endDate - "2019-08-24T11:18:06,166"
当前周数是 34。
对于这个例子,我会得到 34,35,36... 2018 年的上周数..1,2...2019 年的上周数等等
有好的解决办法吗?
目前我让它在同一年的日期范围内工作,我尝试的是,我从开始日期和结束日期得到开始周数和结束周数,然后我循环它给出开始值和结束价值。但如果日期范围落在多年内,会怎样?谁能帮帮我
如果你正在使用 Java 8 你可以使用 java.time 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);
}
[34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52,
1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34]
请注意,您会得到这两年的周数,第 2018 [34-52]
周,然后 2019 [1-33]
YearWeek
您可能希望将 ThreeTen-Extra 库添加到您的项目中以使用其 YearWeek
class。 class 表示使用标准 ISO 8601 定义的特定周:从星期一开始,第 1 周包含日历年的第一个星期四,日历的最后 ending/beginning 天-year 可能落在 next/previous 基于周的年份。
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
。