[time.hms.overview] # 30 Time library [[time]](./#time) ## 30.9 Class template hh_mm_ss [[time.hms]](time.hms#overview) ### 30.9.1 Overview [time.hms.overview] namespace std::chrono {template class hh_mm_ss {public:static constexpr unsigned fractional_width = *see below*; using precision = *see below*; constexpr hh_mm_ss() noexcept : hh_mm_ss{Duration::zero()} {}constexpr explicit hh_mm_ss(Duration d); constexpr bool is_negative() const noexcept; constexpr chrono::hours hours() const noexcept; constexpr chrono::minutes minutes() const noexcept; constexpr chrono::seconds seconds() const noexcept; constexpr precision subseconds() const noexcept; constexpr explicit operator precision() const noexcept; constexpr precision to_duration() const noexcept; private:bool is_neg; // *exposition only* chrono::hours h; // *exposition only* chrono::minutes m; // *exposition only* chrono::seconds s; // *exposition only* precision ss; // *exposition only*};} [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L8423) The hh_mm_ss class template splits a duration into a multi-field time structure*hours*:*minutes*:*seconds* and possibly *subseconds*, where *subseconds* will be a duration unit based on a non-positive power of 10[.](#1.sentence-1) The Duration template parameter dictates the precision to which the time is split[.](#1.sentence-2) A hh_mm_ss models negative durations with a distinct is_negative getter that returns true when the input duration is negative[.](#1.sentence-3) The individual duration fields always return non-negative durations even when is_negative() indicates the structure is representing a negative duration[.](#1.sentence-4) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/time.tex#L8440) If Duration is not a specialization of duration, the program is ill-formed[.](#2.sentence-1)