macro_rules! date_time {
($Y:literal-$M:literal-$D:literal T $h:literal:$m:literal:$s:literal) => { ... };
($Y:literal-$M:literal-$D:literal T $h:literal:$m:literal:$s:literal $x:literal:$y:literal) => { ... };
}Expand description
A macro to help constructing a DateTime struct.
Given that there are a lot of fields to the DateTime struct, for convenience this macro is
provided, so a date can be constructed more easily. The syntax is intended to mimic RFC3339.
For example:
assert_eq!(
date_time!(2025-07-30 T 22:44:38.718 -05:00),
DateTime {
date_fullyear: 2025,
date_month: 7,
date_mday: 30,
time_hour: 22,
time_minute: 44,
time_second: 38.718,
timezone_offset: DateTimeTimezoneOffset {
time_hour: -5,
time_minute: 0,
},
}
)§Input validation
The macro is also able to validate input looks correct (with the exception of the $D parameter
which depends on which month is used, so it just validates that the value passed is less than
31).
Each of the following will fail compilation (thus providing some compile-time safety to usage):
ⓘ
let bad_date = date_time!(10000-01-01 T 00:00:00.000); // Year greater than 4 digitsⓘ
let bad_date = date_time!(1970-00-01 T 00:00:00.000); // Month not greater than 0ⓘ
let bad_date = date_time!(1970-13-01 T 00:00:00.000); // Month greater than 12ⓘ
let bad_date = date_time!(1970-01-00 T 00:00:00.000); // Day not greater than 0ⓘ
let bad_date = date_time!(1970-01-32 T 00:00:00.000); // Day greater than 31ⓘ
let bad_date = date_time!(1970-01-01 T 24:00:00.000); // Hour greater than 23ⓘ
let bad_date = date_time!(1970-01-01 T 00:60:00.000); // Minute greater than 59ⓘ
let bad_date = date_time!(1970-01-01 T 00:00:-1.000); // Seconds negativeⓘ
let bad_date = date_time!(1970-01-01 T 00:00:60.000); // Seconds greater than 59ⓘ
let bad_date = date_time!(1970-01-01 T 00:00:00.000 -24:00); // Hour offset less than -23ⓘ
let bad_date = date_time!(1970-01-01 T 00:00:00.000 24:00); // Hour offset more than 23ⓘ
let bad_date = date_time!(1970-01-01 T 00:00:00.000 00:60); // Minute offset more than 59