dos_date_time/dos_time/fmt.rs
1// SPDX-FileCopyrightText: 2025 Shun Sakai
2//
3// SPDX-License-Identifier: Apache-2.0 OR MIT
4
5//! Utilities for formatting and printing [`Time`].
6
7use core::fmt;
8
9use super::Time;
10
11impl fmt::Display for Time {
12 /// Shows the value of this `Time` in the well-known [RFC 3339 format].
13 ///
14 /// # Examples
15 ///
16 /// ```
17 /// # use dos_date_time::Time;
18 /// #
19 /// assert_eq!(format!("{}", Time::MIN), "00:00:00");
20 /// assert_eq!(format!("{}", Time::MAX), "23:59:58");
21 /// ```
22 ///
23 /// [RFC 3339 format]: https://datatracker.ietf.org/doc/html/rfc3339#section-5.6
24 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
25 let (hour, minute, second) = (self.hour(), self.minute(), self.second());
26 write!(f, "{hour:02}:{minute:02}:{second:02}")
27 }
28}
29
30#[cfg(test)]
31mod tests {
32 use time::macros::time;
33
34 use super::*;
35
36 #[test]
37 fn debug() {
38 assert_eq!(format!("{:?}", Time::MIN), "Time(0)");
39 // <https://devblogs.microsoft.com/oldnewthing/20030905-02/?p=42653>.
40 assert_eq!(
41 format!("{:?}", Time::from_time(time!(19:25:00))),
42 "Time(39712)"
43 );
44 // <https://github.com/zip-rs/zip/blob/v0.6.4/src/types.rs#L553-L569>.
45 assert_eq!(
46 format!("{:?}", Time::from_time(time!(10:38:30))),
47 "Time(21711)"
48 );
49 assert_eq!(format!("{:?}", Time::MAX), "Time(49021)");
50 }
51
52 #[test]
53 fn display() {
54 assert_eq!(format!("{}", Time::MIN), "00:00:00");
55 // <https://devblogs.microsoft.com/oldnewthing/20030905-02/?p=42653>.
56 assert_eq!(format!("{}", Time::from_time(time!(19:25:00))), "19:25:00");
57 // <https://github.com/zip-rs/zip/blob/v0.6.4/src/types.rs#L553-L569>.
58 assert_eq!(format!("{}", Time::from_time(time!(10:38:30))), "10:38:30");
59 assert_eq!(format!("{}", Time::MAX), "23:59:58");
60 }
61}