27 Time library [time]

27.5 Class template duration [time.duration]

27.5.10 I/O [time.duration.io]

template<class charT, class traits, class Rep, class Period> basic_ostream<charT, traits>& operator<<(basic_ostream<charT, traits>& os, const duration<Rep, Period>& d);
Mandates: Rep is an integral type whose integer conversion rank ([conv.rank]) is greater than or equal to that of short, or a floating-point type.
charT is char or wchar_­t.
Effects: Forms a basic_­string<charT, traits> from d.count() using to_­string if charT is char, or to_­wstring if charT is wchar_­t.
Appends the units suffix described below to the basic_­string.
Inserts the resulting basic_­string into os.
Note
:
This specification ensures that the result of this streaming operation will obey the width and alignment properties of the stream.
— end note
 ]
The units suffix depends on the type Period​::​type as follows:
  • If Period​::​type is atto, the suffix is "as".
  • Otherwise, if Period​::​type is femto, the suffix is "fs".
  • Otherwise, if Period​::​type is pico, the suffix is "ps".
  • Otherwise, if Period​::​type is nano, the suffix is "ns".
  • Otherwise, if Period​::​type is micro, the suffix is "μs" ("\u00b5\u0073").
  • Otherwise, if Period​::​type is milli, the suffix is "ms".
  • Otherwise, if Period​::​type is centi, the suffix is "cs".
  • Otherwise, if Period​::​type is deci, the suffix is "ds".
  • Otherwise, if Period​::​type is ratio<1>, the suffix is "s".
  • Otherwise, if Period​::​type is deca, the suffix is "das".
  • Otherwise, if Period​::​type is hecto, the suffix is "hs".
  • Otherwise, if Period​::​type is kilo, the suffix is "ks".
  • Otherwise, if Period​::​type is mega, the suffix is "Ms".
  • Otherwise, if Period​::​type is giga, the suffix is "Gs".
  • Otherwise, if Period​::​type is tera, the suffix is "Ts".
  • Otherwise, if Period​::​type is peta, the suffix is "Ps".
  • Otherwise, if Period​::​type is exa, the suffix is "Es".
  • Otherwise, if Period​::​type is ratio<60>, the suffix is "min".
  • Otherwise, if Period​::​type is ratio<3600>, the suffix is "h".
  • Otherwise, if Period​::​type is ratio<86400>, the suffix is "d".
  • Otherwise, if Period​::​type​::​den == 1, the suffix is "[num]s".
  • Otherwise, the suffix is "[num/den]s".
In the list above the use of num and den refer to the static data members of Period​::​type, which are converted to arrays of charT using a decimal conversion with no leading zeroes.
If Period​::​type is micro, but the character U+00B5 cannot be represented in the encoding used for charT, the unit suffix "us" is used instead of "μs".
Returns: os.
template<class charT, class traits, class Rep, class Period, class Alloc = allocator<charT>> basic_istream<charT, traits>& from_stream(basic_istream<charT, traits>& is, const charT* fmt, duration<Rep, Period>& d, basic_string<charT, traits, Alloc>* abbrev = nullptr, minutes* offset = nullptr);
Effects: Attempts to parse the input stream is into the duration d using the format flags given in the NTCTS fmt as specified in [time.parse].
If the parse parses everything specified by the parsing format flags without error, and yet none of the flags impacts a duration, d will be assigned a zero value.
If %Z is used and successfully parsed, that value will be assigned to *abbrev if abbrev is non-null.
If %z (or a modified variant) is used and successfully parsed, that value will be assigned to *offset if offset is non-null.
Returns: is.