%j
with duration
sSection: 30.12 [time.format], 30.13 [time.parse] Status: C++20 Submitter: Howard Hinnant Opened: 2019-09-02 Last modified: 2021-02-25
Priority: 2
View other active issues in [time.format].
View all other issues in [time.format].
View all issues with C++20 status.
Discussion:
%j
represents the day number of the year when formatting and parsing time_point
s.
It is also handy to interpret this flag consistently when formatting and parsing durations. That
is if there is not enough information in the stream to represent a time_point
, and if the
target of the format/parse is a duration
, %j
represents a number of days.
#include <chrono> #include <iostream> #include <sstream> #include <string> int main() { using namespace std; using namespace std::chrono; // Parse %j as number of days into a duration istringstream in{"222"}; hours d; in >> parse("%j", d); cout << d << '\n'; cout << format("{:%j}", d) << '\n'; }
Output:
5328h 222
[2019-10 Priority set to 2 after reflector discussion]
Previous resolution [SUPERSEDED]:
This wording is relative to N4830.
Modify "Table 98 — Meaning of conversion specifiers" [tab:time.format.spec] as indicated:
Table 98 — Meaning of conversion specifiers [tab:time.format.spec] Specifier Replacement […]
%j
The day of the year as a decimal number. Jan 1 is 001
. If the result is less than three
digits, it is left-padded with0
to three digits. If the type being formatted is a
specialization ofduration
, it is formatted as a decimal number ofdays
.[…]
Modify "Table 99 — Meaning of
parse
flags" [tab:time.parse.spec] as indicated:
Table 99 — Meaning of parse
flags [tab:time.parse.spec]Flag Parsed value […]
%j
The day of the year as a decimal number. Jan 1 is 1
. The modified command%Nj
specifies the maximum number of characters to read. IfN
is not specified, the default
is3
. Leading zeroes are permitted but not required. If the type being parsed is a
specialization ofduration
, it is parsed as a decimal number ofdays
.[…]
[2020-02-13 After Thursday afternoon discussion in Prague, Marshall provides updated wording.]
[2020-02 Status to Immediate on Thursday night in Prague.]
Proposed resolution:
This wording is relative to N4830.
Modify "Table 98 — Meaning of conversion specifiers" [tab:time.format.spec] as indicated:
Table 98 — Meaning of conversion specifiers [tab:time.format.spec] Specifier Replacement […]
%j
If the type being formatted is a specialization of duration
, the decimal number ofdays
without padding. Otherwise, theTheday of the year as a decimal number.
Jan 1 is001
. If the result is less than three digits, it is left-padded with0
to three digits.[…]
Modify "Table 99 — Meaning of parse
flags"
[tab:time.parse.spec] as indicated:
Table 99 — Meaning of parse
flags [tab:time.parse.spec]Flag Parsed value […]
%j
If the type being parsed is a specialization of duration
,
a decimal number ofdays
. Otherwise, theTheday of the year as a decimal number. Jan 1 is1
.
In either case, theThemodified command%Nj
specifies the maximum number of characters to read.
IfN
is not specified, the default is3
. Leading zeroes are permitted but not required.[…]