1#[macro_export]
19macro_rules! ymd_hms {
20 ($y:literal-$mo:literal-$d:literal $h:literal:$m:literal:$s:literal) => {
21 $crate::calendar::DateTime (
22 $crate::calendar::Date::ymd_checked($y, $mo, $d),
23 $crate::calendar::Time::hms_checked($h, $m, $s)
24 )
25 };
26 ($y:literal-$mo:literal-$d:literal) => {
27 $crate::calendar::DateTime (
28 $crate::calendar::Date::ymd_checked($y, $mo, $d),
29 $crate::calendar::Time::MIDNIGHT
30 )
31 };
32}
33#[macro_export]
46macro_rules! utc {
47 ($y:literal-$mo:literal-$d:literal $h:literal:$m:literal:$s:literal) => {
48 $crate::calendar::Utc::resolve(
49 $crate::ymd_hms!($y-$mo-$d $h:$m:$s)
50 )
51 };
52 ($y:literal-$mo:literal-$d:literal) => {
53 $crate::calendar::Utc::resolve(
54 $crate::ymd_hms!($y-$mo-$d)
55 )
56 };
57}
58
59#[test]
60fn ymd_hms() {
61 use super::{DateTime, Date, Time};
62 let DateTime(date, time) = ymd_hms!(2020-01-01 00:00:00);
63 assert_eq!(date, Date::ymd(2020, 1, 1));
64 assert_eq!(time, Time::MIDNIGHT);
65 let DateTime(date, time) = ymd_hms!(2020-01-01);
66 assert_eq!(date, Date::ymd(2020, 1, 1));
67 assert_eq!(time, Time::MIDNIGHT);
68}
69
70#[test]
71fn utc() {
72 assert_eq!(0, utc!(1970-01-01).timestamp);
73 assert_eq!(0, utc!(1970-01-01 00:00:00).timestamp);
74
75 assert_eq!(1514764800, utc!(2018-01-01).timestamp);
76 assert_eq!(1514764800, utc!(2018-01-01 00:00:00).timestamp);
77
78 assert_eq!(1641168000, utc!(2022-01-03).timestamp);
79 assert_eq!(1641168000, utc!(2022-01-03 00:00:00).timestamp);
80
81 assert_eq!(1582934400, utc!(2020-02-29).timestamp);
82 assert_eq!(1582934400, utc!(2020-02-29 00:00:00).timestamp);
83
84 assert_eq!(1583020800, utc!(2020-03-01).timestamp);
85 assert_eq!(1583020800, utc!(2020-03-01 00:00:00).timestamp);
86}