Почему локаль en_GB считает, что 1 января - 52-я неделя года? - PullRequest
3 голосов
/ 21 марта 2011

Оказывается, что неделя года с использованием ww в качестве строки формата даты Java составляет 52 для 1 января 2011 года, когда языковой стандарт - 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 января

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

Это правильно?

Ответы [ 2 ]

9 голосов
/ 21 марта 2011

Начиная с ISO8601, неделя 1 определяется как неделя, содержащая 4 января.Так как 2011-01-01 была суббота, то это на предыдущей неделе.

Поскольку недели 0 нет, то 2011-01-01 можно также записать как 2010-W52-6.

Эти дурацкие американцы, с другой стороны, допускают частичные недели.From Wikipedia :

В системе США есть недели с воскресенья по субботу и отдельные недели в начале и конце года.

Таким образом, они определяют его как последний день недели 1.

3 голосов
/ 21 марта 2011

для Европы 1 января 2011 г. W52 правильный.
Это стандарт ISO для определения недели 01

однако существуют разные нумерации для разных стран. см недельный номер

...