java - java.time.Year#range 不返回一年中的具体星期(Java 1.8)
问题描述
我想知道为什么一个具体的实例java.time.Year#range
无法返回具体ValueRange
的可能周数。
我知道以下代码失败,因为IsoFields.WEEK_OF_WEEK_BASED_YEAR
不支持:
ValueRange range = Year.of(2018).range(IsoFields.WEEK_OF_WEEK_BASED_YEAR)
不过,我想知道为什么以下代码返回 a ValueRange
of 0/1 - 52/54
:
ValueRange range = Year.of(2018).range(WeekFields.ISO.weekOfWeekBasedYear())
我知道这是真的,但它是ValueRange
任何Year
.
根据我收集到的信息,给定一年的具体实例,您可以找出适合该特定年份的实际周数范围(在此示例Year.of(2018)
中包含周数1 - 52
(因为 2018-12-31 实际上属于2019-W01
.
同样的咆哮基本上适用于 YearMonth。
我知道获得正确范围的唯一方法是使用以下方法:
LocalDate date = Year.of(2021).atDay(4)
ValueRange range2 = date.range(WeekFields.ISO.weekOfWeekBasedYear()) // 1-52
因为--01-04 始终属于--W01,所以您必须注意以下内容实际上会产生不同的结果:
LocalDate date = Year.of(2021).atDay(1)
ValueRange range = date.range(WeekFields.ISO.weekOfWeekBasedYear()) // 1-53 (incorrect!)
尽管如此,仅仅为了获取给定年份中可能的周数的值范围而创建一些任意日期似乎是错误的。
所以,基本上,我想问的是这是什么原因,你是否知道更好的方法来做到这一点?
另外,我没有改变在 1.8 以外的 Java 版本中尝试这个;也许这在 JDK9/10/11 中得到了改进?
解决方案
推荐阅读
- java - 如何使用 SharedPreferences 保存更改?
- javascript - How do I submit two forms with one button? (the solutions provided by other similar issues are not working for me)
- node.js - AWS throwing CORS
- html - 使用 Pull Push,列不会在移动视图中互换它们的位置
- shell - 如何在期望脚本中将变量传递给 exec 命令?
- logstash - 如何使用 input-jdbc-plugin 修复 logstash 锁定错误?
- netbeans - 如何为 JTable 设置列标题?
- angular - 由于依赖关系,我在运行 Angular 应用程序时遇到问题?
- python-3.x - ODOO 12 menuitem 不出现
- python - 从 html 表单中获取数据并用烧瓶发回