deep-time 0.1.0-alpha.6

High-precision, no-std, no-alloc date-time library, leap-seconds, time scales, relativistic time, and a powerful date & duration parser
Documentation
use crate::Dt;
use crate::LEGACY_ORDINAL_YEAR_RANGE;
use crate::TimeParts;

/// 5-digit legacy ordinal: YYDDD
#[inline]
pub(crate) fn parse_yyddd(s: &str) -> Option<Dt> {
    if s.len() != 5 {
        return None;
    }
    let parsed = TimeParts::from_str("%y%j", s, true, true, false).ok()?;
    if let Some(y) = parsed.year {
        if !LEGACY_ORDINAL_YEAR_RANGE.contains(&(y as i32)) {
            return None;
        }
    }
    parsed.to_time_point().ok()
}

/// 7-digit legacy ordinal: YYYYDDD (only accepted inside LEGACY_ORDINAL_YEAR_RANGE)
#[inline]
pub(crate) fn parse_yyyyjjj(s: &str) -> Option<Dt> {
    let parsed = TimeParts::from_str("%Y%j", s, true, true, false).ok()?;
    if let Some(y) = parsed.year {
        if !LEGACY_ORDINAL_YEAR_RANGE.contains(&(y as i32)) {
            return None;
        }
    }
    parsed.to_time_point().ok()
}