metaclass: (Default)
[personal profile] metaclass
Белорусско-украинские линуксоиды познакомили меня с кромешным адом - номера дней недели в локалях линукса это пиздец живородящий.
https://github.com/GNOME/gnome-shell/blob/master/js/ui/calendar.js#L599
https://git.gnome.org/browse/gnome-shell/tree/src/shell-util.c#n181
https://bugzilla.gnome.org/show_bug.cgi?id=747346#c5
https://sourceware.org/glibc/wiki/Locales

Дни недели существуют в следующих вариантах:
ISO8601 - 1..7 начиная с понедельника
жабаскриптовый Date.getDay - 0..6 начиная с воскресенья.
Человекочитабельный номер 1..7, зависит от локали.

В локалях линукса есть такие параметры:
week DAYSINWEEK;WEEKSTARTDATE;MINWEEKLEN
first_weekday N - number of day in the week to be shown in the first column of a calendar. Defaults to 1.

Первый параметр состоит из 3 чисед.
DAYSINWEEK is usually 7;
MINWEEKLEN is the minimal length of the first week in year (usually 4).

WEEKSTARTDATE is most confusing - it should be some date that corresponds to the beginning of a week. It is typically either 19971130 (Sunday) or 19971201 (Monday), the former being used almost by all glibc locales (see below). Это параметр NL_TIME_WEEK_1STDAY/week-1stday.

Единственная локаль, в которой я нашел 19971201 (неделя начинается с понедельника) - это ru_UA. Все остальные либо по умолчанию, либо явно указанный 19971130 (неделя начинается с воскресенья)
Причем эти два числа - они захардкожены в gnome-shell/tree/src/shell-util.c для расчета нумерации дней недели.

first_weekday - это безумный параметр, отвечающий за отображение дней недели по колонкам календаря. Это вот самый адовый параметр, его значение, как я понимаю, относится к домену "человекочитабельных номеров для недели, зависящих от локали".

Т.е. мы имеем три разных типа чисел определяющих дни недели, первый и второй - данные, нейтральные по отношению к локали (я надеюсь), но имеющие разные диапазоны значений, третий - данные, зависящие от локали.
И еще число, принадлежащее к третьему типу данных, управляющее отображением календаря.
И хардкодед магическое число, которое определяет соответствие данных третьего типа реальному миру.

Теперь еще вопрос: если в программе-органайзере записано событие "каждое воскресенье" - какой из типов данных там будет использован и не сломается ли оно все в прах, если заменить в локали начало дней недели?
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

Profile

metaclass: (Default)
metaclass

April 2017

S M T W T F S
      1
2345678
9101112 131415
16171819202122
23242526272829
30      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jun. 7th, 2025 08:06 am
Powered by Dreamwidth Studios