Document number: SC22/WG14 N715 (J11 97-078) Title: strftime alignment Author: Keld Simonsen Author affiliation: DKUUG Postal address: Fruebjergvej 3, DK-2100 Kbenhavn Email address: keld@dkuug.dk Telephone number: +45 3122-6543 Fax number: +45 3325-6543 Sponsor: DS Date: 1997-06-08 Proposal category: __ Editorial change/non-normative contribution XX Correction XX New feature __ Addition to obsolescent feature list __ Other (please specify) Area of standard affected: XX Environment XX Language __ Preprocessor XX Library XX Macro/typedef/tag name XX Function XX Header __ Other (please specify) Prior art: ISO/IEC 9945 POSIX standards Target audience: general Related documents: N431 (Rationale and analysis), N507, N538, N586, N658, N665 Proposal attached: proposal paper Review committee: Keld Simonsen, Rex Jaeschke, John Benito, John Nestor. This draft has not been reviewed by the review committee due to time constraints. Status: Stage 2, under consideration by WG14 Abstract: The paper gives a proposal for alignment of C9X with the POSIX standards wrt the strftime function. Introduction This paper gives proposals for changes to the C standard to align it with the POSIX standards POSIX System API (C language) (POSIX-1), and ISO/IEC 9945-2:1993 POSIX Shell and Utilities (POSIX-2), with respect to the strftime function. It does not cover newer proposals for POSIX or other related specifications, that are not yet international standards. It builds on the document N431, which gave an overview of internationalisation in C and POSIX standards, a comparison of the functionality and features provided, and also mentioned other incompatibilities between C and POSIX standards. Thus N431 gave the background and rationale for the proposed changes, and it was decided in the Copenhagen meeting to do further work based on N431. The paper here descibes in detail what the changes should be. The following section numbers refer to the C9X Draft 8. 7.5.2.1 time lconv variables In addition to the defined entries, define the following: abday Define the abbreviated weekday names, referenced by the %a field descriptor. The operand shall consist of an array of seven strings. The first string shall be the abbreviated name of the first day of the week (Sunday), the second the abbreviated name of the second day, and so on. The value for the C locale is: ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]. day Define the full weekday names, referenced by the %A field descriptor. The operand shall consist of an array of seven strings. The first string shall be the full name of the first day of the week (Sunday), the second the full name of the second day, and so on. The value for the C locale is: ["Sunday","Monday","Tuesday","Wednesday","Thursday","Fr iday","Saturday"] abmon Define the abbreviated month names, referenced by the %b field descriptor. The operand shall consist of an array of twelve strings. The first string shall be the abbreviated name of the first month of the year (January), the second the abbreviated name of the second month, and so on. The value for the C locale is: ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep", "Oct","Nov","Dec"] mon Define the full month names, referenced by the %B field descriptor. The operand shall consist of an array of twelve strings. The first string shall be the full name of the first month of the year (January), the second the full name of the second month, and so on. The value for the C locale is: ["January","February","March","April","May","June","Jul y","August","Septembeer","October","November","December "] d_t_fmt Define the appropriate date and time representation, referenced by the %c field descriptor. The operand shall consist of a string, and can contain any combination of characters and field descriptors. In ad- dition, the string can contain escape sequences defined in Table 2. The value for the C locale is: "%a %b %e %T %Y". d_fmt Define the appropriate date representation, referenced by the %x field descriptor. The operand shall consist of a string, and can contain any combination of characters and field descriptors. In addition, the string can contain escape sequences defined in Table 2. The value for the C locale is: "%m/%d/%y". t_fmt Define the appropriate time representation, referenced by the %X field descriptor. The operand shall consist of a string, and can contain any combination of characters and field descriptors. In addition, the string can contain escape sequences defined in Table 2. The value for the C locale is "%T". am_pm Define the appropriate representation of the ante meridiem and post meridiem strings, referenced by the %p field descriptor. The operand shall consist of an array of two strings. The first string shall represent the antemeridiem designation, the last string the postmeridiem designation. The value for the C locale is ["",""]. t_fmt_ampm Define the appropriate time representation in the 12- hour clock format with am_pm, referenced by the %r field descriptor. The operand shall consist of a string and can contain any combination of characters and field descriptors. If the string is empty, the 12-hour format is not supported in the locale. The value for the C locale is "%I:%M:%S %p". It is implementation defined whether the following optional keywords shall be recognized. If they are not supported, but present in a description file, they shall be ignored. era Shall be used to define alternate Eras, corresponding to the %E field descriptor modifier. The format of the operand is unspecified, but shall support the defini- tion of the %EC and %Ey field descriptors, and may also define the era_year format (%EY). era_year Shall be used to define the format of the year in alternate Era format, corresponding to the %EY field descriptor. era_d_fmt Shall be used to define the format of the date in alternate Era notation, corresponding to the %Ex field descriptor. alt_digits Shall be used to define alternate symbols for digits, corresponding to the %O field descriptor modifier. The operand shall consist of semicolon-separated strings. The first string shall be the alternate symbol cor- responding with zero, the second string the symbol corresponding with one, and so on. Up to 100 alternate symbol strings can be specified. The %O modifier indicates that the string corresponding to the value specified via the field descriptor shall be used instead of the value. 7.14.3.5 strftime The date utility in POSIX-2 4.15 has all of the formats of C's strftime() plus more, all of which are proposed to be added to strftime(), ie merged with the current list: %C is replaced by the year divided by 100 and truncated to an integer, as a decimal number (00-99) %D is replaced by the date in the format mm/dd/yy %e is replaced by the day of the month as a decimal number (1-31 in a two-digit field with leading fill) %f is replaced by the weekday as a decimal number (1-7), where Monday is 1 (according to ISO 8601). %F is replaced by the date in the format YYYY-MM-DD (ISO 8601 format) %h a synonym for %b %n is replaced by a character %r is replaced by the 12 h clock time (01-12) using the AM/PM notation; in the "C" locale, this shall be equivalent to "%I:%M:%S %p" %t is replaced by a character %T is replaced by the 24 h clock time (00-23) in the format HH:MM:SS. %u is replaced by the week of the year (Sunday as the first day of the week) as a decimal number (00-53). All days in a new year preceding the first Sunday shall be considered to be in week 0. %V is replaced by the week of the year (Monday as the first day of the week) as a decimal number (00-53). The method for determining the week number shall be as specified in ISO 8601. A number of modified field descriptors %O and %E are also defined in POSIX.2 (4.15.4.2). Text to be added for the C standard, after the "%%" definition: Some field descriptors can be modified by the E and O modifier characters to indicate a different format or specification as specified in the LC_TIME locale description. If the corresponding data (see era, era_year, era_d_fmt, and alt_digits) is not specified or not supported for the current locale, the unmodified field descriptor value shall be used. %Ec Locale's alternate date and time representation. %EC The name of the base year (period) in the locale's alternate representation. %Ex Locale's alternate date representation. %Ey Offset from %EC (year only) in the locale's alternate representation. %EY Full alternate year representation. %Od Day of month using the locale's alternate numeric symbols. %Oe Day of month using the locale's alternate numeric symbols. %OH Hour (24-hour clock) using the locale's alternate numeric symbols. %OI Hour (12-hour clock) using the locale's alternate numeric symbols. %Om Month using the locale's alternate numeric symbols. %OM Minutes using the locale's alternate numeric symbols. %OS Seconds using the locale's alternate numeric symbols. %OU Week number of the year (Sunday as the first day of the week) using the locale's alternate numeric symbols. %Ow Weekday as number in the locale's alternate representation (Sunday=0). %OW Week number of the year (Monday as the first day of the week) using the locale's alternate numeric symbols. %Oy Year (offset from %C) in alternate representation. Differences from POSIX This proposal introduces the following changes from POSIX (all additions): Adds %F for ISO 8601 date format. Adds %f for ISO 8601 weekday numbers.