1.
LocalDate.now().get(WeekFields.of(Locale.getDefault()).weekOfYear())
LocalDate
是 Java 8 引入的日期时间 API,WeekFields.of(Locale.getDefault())
方法用于获取当前地区的“周”规则。这个规则是基于 ISO-8601 标准,它可能与不同地区的文化和习惯有关。特别地,ISO-8601 定义了以下几点:
- 一年中的第一周是包含第一个星期四的周,或者说,第一周包含了该年最少的 4 天。
- 一年中的第一天不一定是 1 月 1 日,它可能是 1 月 4 日之后的某一天。
因此,不同国家/地区的 WeekFields
(例如美国和欧洲)可能使用不同的规则来确定“第一周”的起始点。
2.
Calendar.getInstance().get(Calendar.WEEK_OF_YEAR)
Calendar.getInstance()
返回一个 Calendar
实例,默认情况下,它使用的是默认的 Locale
(通常是基于当前操作系统的地区设置)和 GregorianCalendar
(格里历)。不同的 Calendar
实现也可能有不同的周数计算规则,尤其是在不同地区的情况下。
Calendar.WEEK_OF_YEAR
根据当地的Locale
和Calendar
实现的定义来确定每年有多少周。例如,在美国,Calendar
可能将每周从周日开始,而在欧洲,周一可能是每周的开始。
主要区别:
-
周的起始日:
LocalDate
默认遵循 ISO-8601 标准,通常一周从周一开始。Calendar
通常根据地区设置决定周的开始日,某些地区的Calendar
会从周日开始计算。
-
第一周的定义:
LocalDate
使用 ISO-8601 定义的规则来确定第一周(第一周必须包含至少 4 天)。Calendar
可能根据地区不同(例如美国或欧洲)的规则来定义第一周,某些Locale
可能将 1 月 1 日所在的周视为第一周,即使它不符合 ISO-8601 标准的要求。