[time.hms.members]

# 30 Time library [[time]](./#time)

## 30.9 Class template hh_mm_ss [[time.hms]](time.hms#members)

### 30.9.2 Members [time.hms.members]

[ð](#itemdecl:1)

`static constexpr unsigned fractional_width = see below;
`

[1](#1)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L8451)

fractional_width is the number of fractional decimal digits
represented by precision[.](#1.sentence-1)

fractional_width has the value
of the smallest possible integer in the range [0, 18] such thatprecision will exactly represent all values of Duration[.](#1.sentence-2)

If no such value of fractional_width exists, thenfractional_width is 6[.](#1.sentence-3)

[*Example [1](#example-1)*:

See Table [132](#tab:time.hms.width "Table 132: Examples for fractional_­width") for some durations,
the resulting fractional_width, and
the formatted fractional second output of Duration{1}[.](#1.sentence-4)

Table [132](#tab:time.hms.width) — Examples for fractional_width [[tab:time.hms.width]](./tab:time.hms.width)  

| [ð](#tab:time.hms.width-row-1)<br>**Duration** | **fractional_width** | **Formatted fractional second output** |
| --- | --- | --- |
| [ð](#tab:time.hms.width-row-2)<br>hours, minutes, and seconds | 0 |  |
| [ð](#tab:time.hms.width-row-3)<br>milliseconds | 3 | 0.001 |
| [ð](#tab:time.hms.width-row-4)<br>microseconds | 6 | 0.000001 |
| [ð](#tab:time.hms.width-row-5)<br>nanoseconds | 9 | 0.000000001 |
| [ð](#tab:time.hms.width-row-6)<br>duration<int, ratio<1, 2>> | 1 | 0.5 |
| [ð](#tab:time.hms.width-row-7)<br>duration<int, ratio<1, 3>> | 6 | 0.333333 |
| [ð](#tab:time.hms.width-row-8)<br>duration<int, ratio<1, 4>> | 2 | 0.25 |
| [ð](#tab:time.hms.width-row-9)<br>duration<int, ratio<1, 5>> | 1 | 0.2 |
| [ð](#tab:time.hms.width-row-10)<br>duration<int, ratio<1, 6>> | 6 | 0.166666 |
| [ð](#tab:time.hms.width-row-11)<br>duration<int, ratio<1, 7>> | 6 | 0.142857 |
| [ð](#tab:time.hms.width-row-12)<br>duration<int, ratio<1, 8>> | 3 | 0.125 |
| [ð](#tab:time.hms.width-row-13)<br>duration<int, ratio<1, 9>> | 6 | 0.111111 |
| [ð](#tab:time.hms.width-row-14)<br>duration<int, ratio<1, 10>> | 1 | 0.1 |
| [ð](#tab:time.hms.width-row-15)<br>duration<int, ratio<756, 625>> | 4 | 0.2096 |

â *end example*]

[ð](#itemdecl:2)

`using precision = see below;
`

[2](#2)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L8502)

precision isduration<common_type_t<Duration::rep, seconds::rep>, ratio<1, 10fractional_width>>

[ð](#itemdecl:3)

`constexpr explicit hh_mm_ss(Duration d);
`

[3](#3)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L8514)

*Effects*: Constructs an object of type hh_mm_ss which represents the Duration d with precision precision[.](#3.sentence-1)

- [(3.1)](#3.1)

  Initializes is_neg with d < Duration​::​zero()[.](#3.1.sentence-1)

- [(3.2)](#3.2)

  Initializes h with duration_cast<chrono​::​hours>(abs(d))[.](#3.2.sentence-1)

- [(3.3)](#3.3)

  Initializes m with duration_cast<chrono​::​minutes>(abs(d) - hours())[.](#3.3.sentence-1)

- [(3.4)](#3.4)

  Initializes s with duration_cast<chrono​::​seconds>(abs(d) - hours() - minutes())[.](#3.4.sentence-1)

- [(3.5)](#3.5)

  If treat_as_floating_point_v<precision​::​rep> is true,
 initializes ss with abs(d) - hours() - minutes() - seconds()[.](#3.5.sentence-1)
  Otherwise, initializes ss with duration_cast<precision>(abs(d) - hours() - minutes() - seconds())[.](#3.5.sentence-2)

[*Note [1](#note-1)*:

When precision​::​rep is integral andprecision​::​period is ratio<1>,subseconds() always returns a value equal to 0s[.](#3.sentence-2)

â *end note*]

[4](#4)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L8541)

*Postconditions*: If treat_as_floating_point_v<precision​::​rep> is true,to_duration() returns d,
otherwise to_duration() returns duration_cast<precision>(d)[.](#4.sentence-1)

[ð](#lib:is_negative,hh_mm_ss)

`constexpr bool is_negative() const noexcept;
`

[5](#5)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L8554)

*Returns*: is_neg[.](#5.sentence-1)

[ð](#lib:hours,hh_mm_ss)

`constexpr chrono::hours hours() const noexcept;
`

[6](#6)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L8565)

*Returns*: h[.](#6.sentence-1)

[ð](#lib:minutes,hh_mm_ss)

`constexpr chrono::minutes minutes() const noexcept;
`

[7](#7)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L8576)

*Returns*: m[.](#7.sentence-1)

[ð](#lib:seconds,hh_mm_ss)

`constexpr chrono::seconds seconds() const noexcept;
`

[8](#8)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L8587)

*Returns*: s[.](#8.sentence-1)

[ð](#lib:subseconds,hh_mm_ss)

`constexpr precision subseconds() const noexcept;
`

[9](#9)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L8598)

*Returns*: ss[.](#9.sentence-1)

[ð](#lib:to_duration,hh_mm_ss)

`constexpr precision to_duration() const noexcept;
`

[10](#10)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L8609)

*Returns*: If is_neg, returns -(h + m + s + ss),
otherwise returns h + m + s + ss[.](#10.sentence-1)

[ð](#lib:operator_precision,hh_mm_ss)

`constexpr explicit operator precision() const noexcept;
`

[11](#11)

[#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L8621)

*Returns*: to_duration()[.](#11.sentence-1)
