- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如果您认为那一周将从每年的 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/
我是一名优秀的程序员,十分优秀!