30 Time library [time]

30.9 Class template hh_mm_ss [time.hms]

30.9.2 Members [time.hms.members]

static constexpr unsigned fractional_width = see below;
fractional_width is the number of fractional decimal digits represented by precision.
fractional_width has the value of the smallest possible integer in the range [0, 18] such that precision will exactly represent all values of Duration.
If no such value of fractional_width exists, then fractional_width is 6.
[Example 1: 
See Table 132 for some durations, the resulting fractional_width, and the formatted fractional second output of Duration{1}.
Table 132 — Examples for fractional_width[tab:time.hms.width]
Duration
fractional_width
Formatted fractional second output
hours, minutes, and seconds
0
milliseconds
3
0.001
microseconds
6
0.000001
nanoseconds
9
0.000000001
duration<int, ratio<1, 2>>
1
0.5
duration<int, ratio<1, 3>>
6
0.333333
duration<int, ratio<1, 4>>
2
0.25
duration<int, ratio<1, 5>>
1
0.2
duration<int, ratio<1, 6>>
6
0.166666
duration<int, ratio<1, 7>>
6
0.142857
duration<int, ratio<1, 8>>
3
0.125
duration<int, ratio<1, 9>>
6
0.111111
duration<int, ratio<1, 10>>
1
0.1
duration<int, ratio<756, 625>>
4
0.2096
— end example]
using precision = see below;
precision is duration<common_type_t<Duration::rep, seconds::rep>, ratio<1, >>
constexpr explicit hh_mm_ss(Duration d);
Effects: Constructs an object of type hh_mm_ss which represents the Duration d with precision precision.
  • Initializes is-neg with d < Duration​::​zero().
    Let ABS_D represent -d if is-neg is true and d otherwise.
  • Initializes h_ with duration_cast<chrono​::​hours>(ABS_D).
  • Initializes m_ with duration_cast<chrono​::​minutes>(ABS_D - hours()).
  • Initializes s_ with duration_cast<chrono​::​seconds>(ABS_D - hours() - minutes()).
  • If treat_as_floating_point_v<precision​::​rep> is true, initializes ss_ with ABS_D
    - hours() - minutes() - seconds()
    .
    Otherwise, initializes ss_ with duration_cast<precision>(ABS_D - hours() - minutes() - seconds()).
[Note 1: 
When precision​::​rep is integral and precision​::​period is ratio<1>, subseconds() always returns a value equal to 0s.
— end note]
Postconditions: If treat_as_floating_point_v<precision​::​rep> is true, to_duration() returns d, otherwise to_duration() returns duration_cast<precision>(d).
constexpr bool is_negative() const noexcept;
Returns: is-neg.
constexpr chrono::hours hours() const noexcept;
Returns: h_.
constexpr chrono::minutes minutes() const noexcept;
Returns: m_.
constexpr chrono::seconds seconds() const noexcept;
Returns: s_.
constexpr precision subseconds() const noexcept;
Returns: ss_.
constexpr precision to_duration() const noexcept;
Returns: If is-neg, returns -(h_ + m_ + s_ + ss_), otherwise returns h_ + m_ + s_ + ss_.
constexpr explicit operator precision() const noexcept;
Returns: to_duration().