gpt4 book ai didi

Java LocalDate 如何将一年的最后一周作为第 53 周而不是新年的第一周?

转载 作者:行者123 更新时间:2023-12-04 10:47:25 27 4
gpt4 key购买 nike

如果您认为那一周将从每年的 1 月 1 日 开始,并且一周的开始时间是 SUNDAY,那么 2019 年将有 53 周。继上述 Jan 29,30,31 2019 将进入 Week-53 of 2019

IsoFields 的文档中给出对于 WEEK_OF_WEEK_BASED_YEAR所有三个字段都根据其有效值范围进行验证。 week-of-week-based-year 字段的验证范围为 1 到 52 或 53,具体取决于基于周的年份。

因此,我假设以下代码的输出应为:WEEK_OF_WEEK_BASED_YEAR 53 & WEEK_BASED_YEAR 2019。

但它的输出为:1 & 2020

import java.time.LocalDate;
import java.time.chrono.IsoChronology;
import java.time.format.DateTimeFormatter;
import java.time.format.ResolverStyle;
import java.time.temporal.IsoFields;

public class WeekStartDemo {
public static void main(String args[]) {
DateTimeFormatter DATE_FORMATTER = DateTimeFormatter
.ofPattern("uuuu-MM-dd")
.withChronology(IsoChronology.INSTANCE)
.withResolverStyle(ResolverStyle.STRICT);

LocalDate updatedDate = LocalDate.parse("2019-12-30", DATE_FORMATTER);

System.out.println(updatedDate.toString());

System.out.println(updatedDate.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR));
System.out.println(updatedDate.get(IsoFields.WEEK_BASED_YEAR));
}
}

如果我将日期作为 2019-12-28 传递,那么它将返回 WEEK_OF_WEEK_BASED_YEAR 52 & WEEK_BASED_YEAR <强>2019 。但不适用于 2019 年的最后一周(即第 53 周)

让我知道我在上面的代码中遗漏了什么。

最佳答案

正如我在评论中提到的,以及来自 IsoFields 的 Javadoc 链接, 基于周的年份本身是相对于标准 ISO proptic 年份定义的。它与标准年的不同之处在于它总是从星期一(而不是星期日)开始。使用您发布的代码,从 1900 迭代到 2300 并解析最后一个 WEEK_OF_WEEK_BASED_YEAR 应该很容易找到有 53 周的年份给定年份的第几天并打印它是 53 的值。比如,

DateTimeFormatter DATE_FORMATTER = DateTimeFormatter.ofPattern("uuuu-MM-dd")
.withChronology(IsoChronology.INSTANCE)
.withResolverStyle(ResolverStyle.STRICT);

for (int i = 1900; i < 2300; i++) {
LocalDate updatedDate = LocalDate.parse(String.format("%d-12-31", i), DATE_FORMATTER);
if (updatedDate.get(IsoFields.WEEK_OF_WEEK_BASED_YEAR) == 53) {
System.out.println(i);
}
}

我得到的前几个值是

1903
1908
1914
1920
1925
1931
1936
1942

略过一点...

2009
2015
2020
2026

所以今年(2020 年)有 53 周,而 2019 年没有。

关于Java LocalDate 如何将一年的最后一周作为第 53 周而不是新年的第一周?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59639964/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com