#[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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more