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}