Skip to main content

dos_date_time/dos_date_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 [`DateTime`].
6
7use core::fmt;
8
9use super::DateTime;
10
11impl fmt::Display for DateTime {
12    /// Shows the value of this `DateTime` in the well-known [RFC 3339 format].
13    ///
14    /// # Examples
15    ///
16    /// ```
17    /// # use dos_date_time::DateTime;
18    /// #
19    /// assert_eq!(format!("{}", DateTime::MIN), "1980-01-01 00:00:00");
20    /// assert_eq!(format!("{}", DateTime::MAX), "2107-12-31 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 (date, time) = (self.date(), self.time());
26        write!(f, "{date} {time}")
27    }
28}
29
30#[cfg(test)]
31mod tests {
32    use time::macros::datetime;
33
34    use super::*;
35
36    #[test]
37    fn debug() {
38        assert_eq!(
39            format!("{:?}", DateTime::MIN),
40            "DateTime { date: Date(33), time: Time(0) }"
41        );
42        // <https://devblogs.microsoft.com/oldnewthing/20030905-02/?p=42653>.
43        assert_eq!(
44            format!(
45                "{:?}",
46                DateTime::try_from(datetime!(2002-11-26 19:25:00)).unwrap()
47            ),
48            "DateTime { date: Date(11642), time: Time(39712) }"
49        );
50        // <https://github.com/zip-rs/zip/blob/v0.6.4/src/types.rs#L553-L569>.
51        assert_eq!(
52            format!(
53                "{:?}",
54                DateTime::try_from(datetime!(2018-11-17 10:38:30)).unwrap()
55            ),
56            "DateTime { date: Date(19825), time: Time(21711) }"
57        );
58        assert_eq!(
59            format!("{:?}", DateTime::MAX),
60            "DateTime { date: Date(65439), time: Time(49021) }"
61        );
62    }
63
64    #[test]
65    fn display() {
66        assert_eq!(format!("{}", DateTime::MIN), "1980-01-01 00:00:00");
67        // <https://devblogs.microsoft.com/oldnewthing/20030905-02/?p=42653>.
68        assert_eq!(
69            format!(
70                "{}",
71                DateTime::try_from(datetime!(2002-11-26 19:25:00)).unwrap()
72            ),
73            "2002-11-26 19:25:00"
74        );
75        // <https://github.com/zip-rs/zip/blob/v0.6.4/src/types.rs#L553-L569>.
76        assert_eq!(
77            format!(
78                "{}",
79                DateTime::try_from(datetime!(2018-11-17 10:38:30)).unwrap()
80            ),
81            "2018-11-17 10:38:30"
82        );
83        assert_eq!(format!("{}", DateTime::MAX), "2107-12-31 23:59:58");
84    }
85}