gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:36:04 25 4
gpt4 key购买 nike

事实证明,使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com