#[non_exhaustive]pub enum Disambiguation {
Compatible,
Earlier,
Later,
Reject,
}Expand description
Configuration for resolving ambiguous datetimes in a particular time zone.
This is useful for specifying how to disambiguate ambiguous datetimes at
runtime. For example, as configuration for parsing Zoned values via
fmt::temporal::DateTimeParser::disambiguation.
Note that there is no difference in using
Disambiguation::Compatible.disambiguate(ambiguous_timestamp) and
ambiguous_timestamp.compatible(). They are equivalent. The purpose of
this enum is to expose the disambiguation strategy as a runtime value for
configuration purposes.
The default value is Disambiguation::Compatible, which matches the
behavior specified in RFC 5545 (iCalendar). Namely, when an ambiguous
datetime is found in a fold (the clocks are rolled back), then the earlier
time is selected. And when an ambiguous datetime is found in a gap (the
clocks are skipped forward), then the later time is selected.
This enum is non-exhaustive so that other forms of disambiguation may be added in semver compatible releases.
§Example
This example shows the default disambiguation mode (“compatible”) when given a datetime that falls in a “gap” (i.e., a forwards DST transition).
use jiff::{civil::date, tz};
let newyork = tz::db().get("America/New_York")?;
let ambiguous = newyork.to_ambiguous_zoned(date(2024, 3, 10).at(2, 30, 0, 0));
// NOTE: This is identical to `ambiguous.compatible()`.
let zdt = ambiguous.disambiguate(tz::Disambiguation::Compatible)?;
assert_eq!(zdt.datetime(), date(2024, 3, 10).at(3, 30, 0, 0));
// In compatible mode, forward transitions select the later
// time. In the EST->EDT transition, that's the -04 (EDT) offset.
assert_eq!(zdt.offset(), tz::offset(-4));
§Example: parsing
This example shows how to set the disambiguation configuration while
parsing a Zoned datetime. In this example, we always prefer the earlier
time.
use jiff::{civil::date, fmt::temporal::DateTimeParser, tz};
static PARSER: DateTimeParser = DateTimeParser::new()
.disambiguation(tz::Disambiguation::Earlier);
let zdt = PARSER.parse_zoned("2024-03-10T02:30[America/New_York]")?;
// In earlier mode, forward transitions select the earlier time, unlike
// in compatible mode. In this case, that's the pre-DST offset of -05.
assert_eq!(zdt.datetime(), date(2024, 3, 10).at(1, 30, 0, 0));
assert_eq!(zdt.offset(), tz::offset(-5));
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Compatible
In a backward transition, the earlier time is selected. In forward transition, the later time is selected.
This is equivalent to AmbiguousTimestamp::compatible and
AmbiguousZoned::compatible.
Earlier
The earlier time is always selected.
This is equivalent to AmbiguousTimestamp::earlier and
AmbiguousZoned::earlier.
Later
The later time is always selected.
This is equivalent to AmbiguousTimestamp::later and
AmbiguousZoned::later.
Reject
When an ambiguous datetime is encountered, this strategy will always result in an error. This is useful if you need to require datetimes from users to unambiguously refer to a specific instant.
This is equivalent to AmbiguousTimestamp::unambiguous and
AmbiguousZoned::unambiguous.
Trait Implementations§
Source§impl Clone for Disambiguation
impl Clone for Disambiguation
Source§fn clone(&self) -> Disambiguation
fn clone(&self) -> Disambiguation
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for Disambiguation
impl Debug for Disambiguation
Source§impl Default for Disambiguation
impl Default for Disambiguation
Source§fn default() -> Disambiguation
fn default() -> Disambiguation
impl Copy for Disambiguation
Auto Trait Implementations§
impl Freeze for Disambiguation
impl RefUnwindSafe for Disambiguation
impl Send for Disambiguation
impl Sync for Disambiguation
impl Unpin for Disambiguation
impl UnwindSafe for Disambiguation
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
Source§fn in_current_span(self) -> Instrumented<Self> ⓘ
fn in_current_span(self) -> Instrumented<Self> ⓘ
Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T> PowerToOwned for T
impl<T> PowerToOwned for T
Source§impl<R, P> ReadPrimitive<R> for P
impl<R, P> ReadPrimitive<R> for P
Source§fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
fn read_from_little_endian(read: &mut R) -> Result<Self, Error>
ReadEndian::read_from_little_endian().