Date/time library
See also the [dtg] crate.
``` use chrono::{TimeZone, Utc}; use dtg_lib::{tz, Dtg, Format};
let epoch = 1658448142; let nanoseconds = 936196858; let rfc3339 = "2022-07-22T00:02:22Z"; let defaultutc = "Fri 22 Jul 2022 00:02:22 UTC"; let defaultmt = "Thu 21 Jul 2022 18:02:22 MDT"; let x = "Xg6L02M"; let autc = format!("{epoch}.000000000\n{rfc3339}\n{defaultutc}\n{defaultutc}"); let amt = format!("{epoch}.000000000\n{rfc3339}\n{defaultutc}\n{defaultmt}"); let dayofweekutc = "Friday"; let dayofweekmt = "Thursday"; let tzutc = tz("UTC").ok(); let tzmt = tz("MST7MDT").ok(); let defaultfmt = Some(Format::default()); let dayofweek_fmt = Some(Format::custom("%A"));
// Create Dtg
let dtg1str = format!("{}", epoch);
let dtg1ts = Dtg::from(&dtg1str).unwrap(); let dtg1dt = Dtg::fromdt(&Utc.timestamp(epoch, 0)); let dtg1x = Dtg::fromx(x).unwrap();
asserteq!(dtg1ts, dtg1dt); asserteq!(dtg1dt, dtg1x); asserteq!(dtg1x, dtg1_ts);
// Create Dtg with nanoseconds
let dtg2str = format!("{}.{}", epoch, nanoseconds);
let dtg2ts = Dtg::from(&dtg2str).unwrap(); let dtg2dt = Dtg::from_dt(&Utc.timestamp(epoch, nanoseconds));
asserteq!(dtg2ts, dtg2_dt);
// Default format
asserteq!(dtg1ts.default(&None), defaultutc); asserteq!(dtg1ts.default(&tzutc), defaultutc); asserteq!(dtg1ts.default(&tzmt), defaultmt);
asserteq!(dtg1ts.format(&defaultfmt, &None), defaultutc); asserteq!(dtg1ts.format(&defaultfmt, &tzutc), defaultutc); asserteq!(dtg1ts.format(&defaultfmt, &tzmt), default_mt);
// RFC 3339 format
asserteq!(dtg1ts.rfc3339(), rfc3339); asserteq!(dtg1ts.format(&None, &None), rfc_3339);
// "x" format
asserteq!(dtg1ts.xformat(), x); asserteq!(dtg1_ts.format(&Some(Format::X), &None), x);
// "a" format
asserteq!(dtg1ts.aformat(&None), autc); asserteq!(dtg1ts.aformat(&tzutc), autc); asserteq!(dtg1ts.aformat(&tzmt), a_mt);
asserteq!(dtg1ts.format(&Some(Format::A), &None), autc); asserteq!(dtg1ts.format(&Some(Format::A), &tzutc), autc); asserteq!(dtg1ts.format(&Some(Format::A), &tzmt), amt);
// Custom format
asserteq!(dtg1ts.format(&dayofweekfmt, &None), dayofweekutc); asserteq!(dtg1ts.format(&dayofweekfmt, &tzmt), dayofweek_mt); ```