glibc locale inconsistencies (was: [util-linux] cal doesn't honor first_weekday value from locale)

From: Martin Norbäck (d95mback_at_dtek.chalmers.se)
Date: 2001-11-22 17:18:44

tor 2001-11-22 klockan 15.35 skrev Andries.Brouwer@cwi.nl:
> > It is you who is referring to glibc, not me. I am referring to locale
> 
> The POSIX definition of locale does not have the concept of
> "first weekday". It is a GNU extension only present in glibc.

I've been doing some more research on the subject.

There is no standard defining first_weekday, however there is a working
document named ISO/IEC JTC1/SC22/WG20 N553 which describes ISO/IEC FCD
14652 (supposedly to become standard ISO/IEC 14652). The document I've
found is from 1997-12-22, and I don't know it's current status.

glibc uses some of the fields from this document, however, it has
divided the "week" field into "week-ndays", "week-1stday", and
"week-1stweek".

With this definition, it seems that first_weekday=1 actually means the
first day, as defined by the "week" (or "week-1stday") keyword.

So, assuming that the glibc fields have the meaning of this document,
then there are some locales which are in error (in glibc 2.2.4). For
instance the de_DE locale has the following values:

day="Sonntag;Montag;Dienstag;Mittwoch;Donnerstag;Freitag;Samstag"
week-ndays=7
week-1stday=19971201
week-1stweek=4
first_weekday=1

Which would mean that 1997-12-01 is actually a "Sonntag", but it is a
Monday.

The C/POSIX locale has the following values:
day="Sunday;Monday;Tuesday;Wednesday;Thursday;Friday;Saturday"
week-ndays=7
week-1stday=19971130
week-1stweek=4
first_weekday=7

which would mean that the first week day to display is Saturday.

sv_SE has the following values:

sv_SE
day="söndag;måndag;tisdag;onsdag;torsdag;fredag;lördag"
week-ndays=7
week-1stday=19971130
week-1stweek=0
first_weekday=1

but should really have:
day="måndag;tisdag;onsdag;torsdag;fredag;lördag;söndag"
week-ndays=7
week-1stday=19971201 [a Monday]
week-1stweek=4 [Thursday]
first_weekday=1 [Monday]

since Sweden uses ISO 8601.

The full text of this document can be found at:

http://anubis.dkuug.dk/jtc1/sc22/wg20/docs/14652fcd.doc
or
http://anubis.dkuug.dk/jtc1/sc22/wg20/docs/14652fcd.txt
and looking in
http://anubis.dkuug.dk/jtc1/sc22/wg20/docs/
you can find other documents, note for instance
http://anubis.dkuug.dk/jtc1/sc22/wg20/docs/n608.txt
which seems to be a ballot concerning this document.

Following is a small section:
4.6   LC_TIME
The following keywords shall be defined:
[...]
day          Define the full weekday names for calendar systems
             with weeks of constant length, to be referenced by
             the %a field descriptor. The length of the week and
             a gregorian date for the first weekday is defined
             by the "week" keyword. The operand shall consist of
             semicolon-separated strings. The first string shall
             be the full name of the day corresponding to the
             first day of the week (default Sunday), the second
             the full name of the day corresponding to the
             second day of the week (default Monday), and so on.
week         Shall be used to define the number of days in a
             week, which is the first weekday - the first
             weekday has the value 1, and which week is to be
             considered the first in a year. The first operand
             is an integer specifying the number of days in the
             week, The second operand is an integer specifying
             the gregorian date in the format YYYYMMDD with a
             leading <hyphen-minus> if before Christ. The third
             operand is an integer specifying the weekday number
             to be contained in the first week of the year. If
             the keyword is not specified the values are taken
             as 7,  19971130 (a Sunday), and 7 (Saturday),
             respectively. ISO 8601 conforming applications
             should use the values 7, 19971201 (a Monday), and 4
             (Thursday), respectively.
first_weekday    Shall be used to define the first day to be
                 displayed, for example in a calendar display
                 utility. The operand is an integer specifying
                 the day number (1 = first) according to the
                 information specified with the "day" keyword.
                 The keyword may be omitted, and then the value 1
                 is taken, corresponding to Sunday for a week
                 beginning Sunday, or to Monday for a week
                 beginning Monday.
first_workday    Shall be used to define the first workday as an
                 integer according to the day numbering specified
                 with the "week" keyword. 

I'll see if I can find more information about the glibc interpretation
of these fields. It would be a good thing if it was the same as in this
proposed standard.

Regards,

	Martin


-- 
[ http://www.dtek.chalmers.se/~d95mback/ ] [ PGP: 0x453504F1 ] [ UIN:
4439498 ]
    Opinions expressed above are mine, and not those of my future
employees.
SIGBORE: Signature boring error, core dumped

Arkiv genererat av hypermail 2.1.1.