From 46ad2c2b2c901eb20e43a7fca025aac02605bda4 Mon Sep 17 00:00:00 2001 From: Paul Dicker Date: Fri, 15 Sep 2023 08:46:12 +0200 Subject: [PATCH] Add `UNIX_EPOCH` constants --- src/datetime/mod.rs | 3 +++ src/naive/datetime/mod.rs | 7 ++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/datetime/mod.rs b/src/datetime/mod.rs index 01c17827d2..0df12bc36e 100644 --- a/src/datetime/mod.rs +++ b/src/datetime/mod.rs @@ -623,6 +623,9 @@ impl DateTime { pub fn from_timestamp(secs: i64, nsecs: u32) -> Option { NaiveDateTime::from_timestamp_opt(secs, nsecs).as_ref().map(NaiveDateTime::and_utc) } + + /// The Unix Epoch, 1970-01-01 00:00:00 UTC. + pub const UNIX_EPOCH: Self = Self { datetime: NaiveDateTime::UNIX_EPOCH, offset: Utc }; } impl Default for DateTime { diff --git a/src/naive/datetime/mod.rs b/src/naive/datetime/mod.rs index e2008563b2..ed0c2286a7 100644 --- a/src/naive/datetime/mod.rs +++ b/src/naive/datetime/mod.rs @@ -20,7 +20,7 @@ use crate::format::{parse, parse_and_remainder, ParseError, ParseResult, Parsed, use crate::format::{Fixed, Item, Numeric, Pad}; use crate::naive::{Days, IsoWeek, NaiveDate, NaiveTime}; use crate::offset::Utc; -use crate::{DateTime, Datelike, LocalResult, Months, TimeZone, Timelike, Weekday}; +use crate::{expect, DateTime, Datelike, LocalResult, Months, TimeZone, Timelike, Weekday}; #[cfg(feature = "rustc-serialize")] pub(super) mod rustc_serialize; @@ -967,8 +967,13 @@ impl NaiveDateTime { /// The minimum possible `NaiveDateTime`. pub const MIN: Self = Self { date: NaiveDate::MIN, time: NaiveTime::MIN }; + /// The maximum possible `NaiveDateTime`. pub const MAX: Self = Self { date: NaiveDate::MAX, time: NaiveTime::MAX }; + + /// The Unix Epoch, 1970-01-01 00:00:00. + pub const UNIX_EPOCH: Self = + expect!(NaiveDate::from_ymd_opt(1970, 1, 1), "").and_time(NaiveTime::MIN); } impl Datelike for NaiveDateTime {