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}