java - 为什么 en_GB 语言环境认为 1 月 1 日是一年中的第 52 周?

标签 java locale date

事实证明,使用 ww 作为 java 日期格式字符串的一年中的星期为 2011 年 1 月 1 日的 52,当时语言环境为 en_GB。这是证明(使用 scala REPL,尽管我可以使用 Java 程序完成此操作)

首先获取我的语言环境

scala> val en = java.util.Locale.getAvailableLocales.find(_.toString == "en") getOrElse error("no en")
en: java.util.Locale = en

scala> val en_GB = java.util.Locale.getAvailableLocales.find(_.toString == "en_GB") getOrElse error("no en_GB")
en_GB: java.util.Locale = en_GB

现在定为 1 月 1 日

scala> import java.util.Calendar; import Calendar._
import java.util.Calendar
import Calendar._

scala> Calendar.getInstance
res23: java.util.Calendar = java.util.GregorianCalendar[time=1300708839128,....]

scala> res23.set(MONTH, JANUARY); res23.set(DAY_OF_MONTH, 1)

scala> val firstJan = res23.getTime
firstJan: java.util.Date = Sat Jan 01 12:00:39 GMT 2011

现在声明一个方法以依赖于语言环境的方式打印它:

scala> def weekInLocale(l : java.util.Locale) = { java.util.Locale.setDefault(l); new java.text.SimpleDateFormat("ww").format(firstJan) }
weekInLocale: (l: java.util.Locale)java.lang.String

现在调用它:

scala> weekInLocale(en)
res24: java.lang.String = 01

scala> weekInLocale(en_GB)
res26: java.lang.String = 52

这样对吗?

最佳答案

根据 ISO8601,第 1 周定义为包含 1 月 4 日的那一周。由于 2011-01-01 是星期六,因此属于前一周。

因为没有第0周,那么2011-01-01也可以写成2010-W52-6。

另一方面,那些古怪的美国人允许只有不到几周的时间。来自 Wikipedia :

The US system has weeks from Sunday through Saturday, and partial weeks at the beginning and the end of the year.

因此,他们会将其定义为第 1 周的最后一天。

关于java - 为什么 en_GB 语言环境认为 1 月 1 日是一年中的第 52 周?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5377353/

相关文章:

java - Volatile:为什么要阻止编译器重新排序代码

java - Marklogic Java,指定查询结果的长度

npm - 如何从dayjs https ://www. npmjs.com/package/dayjs动态获取语言环境?

css - YML 文件中的格式化字符串

java - 日期和时区转换

java - Eclipse 如何生成 setter 和 getter?

java - 设置jre环境参数时,是使用java控制面板系统选项卡还是用户选项卡

java - 仅当满足以下条件时,区域设置才被视为完整

javascript - 从 yyyy/mm/dd 到 dd/mm/yyyy 的反向日期 javascript

sql - 每条记录的倒数第二个日期