This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of WP status.

3252. Parse locale's aware modifiers for commands are not consistent with POSIX spec

Section: 27.13 [time.parse] Status: WP Submitter: Tomasz Kamiński Opened: 2019-08-06 Last modified: 2020-09-06

Priority: 2

View all other issues in [time.parse].

View all issues with WP status.

Discussion:

The current specification of the locale modifiers for the parse flags in "[tab:time.parse.spec] Meaning of parse flags" is inconsistent with the POSIX strptime specification:

Per Howard's comment:

I only invented in a couple places for these flags, and none of them involved locale-dependent stuff. If we are inconsistent with POSIX/C on this, it's a bug. Rationale, std::get_time is already specified in terms of strptime, and we can't afford to be inventive with locale-dependent things.

Note that, due above, the inconsistency between POSIX strftime specification that supports %Ou and %OV that are not handled by strptime should be (by design) reflected in "[tab:time.format.spec] Meaning of conversion specifiers" and "[tab:time.parse.spec] Meaning of parse flags" tables.

The %d modifier was addressed by LWG 3218.

[2020-02 Status to Immediate on Thursday morning in Prague.]

Proposed resolution:

This wording is relative to N4830.

  1. Modify Table 99 "Meaning of parse flags [tab:time.parse.spec]" in 27.13 [time.parse] as indicated:

    Table 99: Meaning of parse flags [tab:time.parse.spec]
    Flag Parsed value
    […]
    %C The century as a decimal number. The modified command %NC specifies the maximum number of characters to read. If N is not specified, the default is 2. Leading zeroes are permitted but not required. The modified commands %EC and %OC interprets the locale's alternative representation of the century.
    […]
    %I The hour (12-hour clock) as a decimal number. The modified command %NI specifies the maximum number of characters to read. If N is not specified, the default is 2. Leading zeroes are permitted but not required. The modified command %OI interprets the locale's alternative representation.
    […]
    %u The ISO weekday as a decimal number (1-7), where Monday is 1. The modified command %Nu specifies the maximum number of characters to read. If N is not specified, the default is 1. Leading zeroes are permitted but not required. The modified command %Ou interprets the locale's alternative representation.
    %U The week number of the year as a decimal number. The first Sunday of the year is the first day of week 01. Days of the same year prior to that are in week 00. The modified command %NU specifies the maximum number of characters to read. If N is not specified, the default is 2. Leading zeroes are permitted but not required. The modified command %OU interprets the locale's alternative representation.
    […]
    %W The week number of the year as a decimal number. The first Monday of the year is the first day of week 01. Days of the same year prior to that are in week 00. The modified command %NW specifies the maximum number of characters to read. If N is not specified, the default is 2. Leading zeroes are permitted but not required. The modified command %OW interprets the locale's alternative representation.
    […]