Android 自然周计算、(ISO 标准)周计算

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 根据当地的 LocaleCalendar 实现的定义来确定每年有多少周。例如,在美国,Calendar 可能将每周从周日开始,而在欧洲,周一可能是每周的开始。

主要区别:

  1. 周的起始日

    • LocalDate 默认遵循 ISO-8601 标准,通常一周从周一开始。
    • Calendar 通常根据地区设置决定周的开始日,某些地区的 Calendar 会从周日开始计算。
  2. 第一周的定义

    • LocalDate 使用 ISO-8601 定义的规则来确定第一周(第一周必须包含至少 4 天)。
    • Calendar 可能根据地区不同(例如美国或欧洲)的规则来定义第一周,某些 Locale 可能将 1 月 1 日所在的周视为第一周,即使它不符合 ISO-8601 标准的要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值