Enum Disambiguation
#[non_exhaustive]
pub enum Disambiguation
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 ;
let newyork = db.get?;
let ambiguous = newyork.to_ambiguous_zoned;
// NOTE: This is identical to `ambiguous.compatible()`.
let zdt = ambiguous.disambiguate?;
assert_eq!;
// In compatible mode, forward transitions select the later
// time. In the EST->EDT transition, that's the -04 (EDT) offset.
assert_eq!;
# Ok::
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 ;
static PARSER: DateTimeParser = new
.disambiguation;
let zdt = PARSER.parse_zoned?;
// 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!;
assert_eq!;
# Ok::
Variants
-
Compatible In a backward transition, the earlier time is selected. In forward transition, the later time is selected.
This is equivalent to
AmbiguousTimestamp::compatibleandAmbiguousZoned::compatible.-
Earlier The earlier time is always selected.
This is equivalent to
AmbiguousTimestamp::earlierandAmbiguousZoned::earlier.-
Later The later time is always selected.
This is equivalent to
AmbiguousTimestamp::laterandAmbiguousZoned::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::unambiguousandAmbiguousZoned::unambiguous.
Trait Implementations
impl Clone for Disambiguation
fn clone(&self) -> Disambiguation
impl Copy for Disambiguation
impl Debug for Disambiguation
fn fmt(&self, f: &mut Formatter<'_>) -> Result
impl Default for Disambiguation
fn default() -> 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 UnsafeUnpin for Disambiguation
impl UnwindSafe for Disambiguation
Blanket Implementations
impl<T> Any for Disambiguation
where
T: 'static + ?Sized,
fn type_id(&self) -> TypeId
impl<T> Borrow<T> for Disambiguation
where
T: ?Sized,
fn borrow(&self) -> &T
impl<T> BorrowMut<T> for Disambiguation
where
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
impl<T> CloneToUninit for Disambiguation
where
T: Clone,
unsafe fn clone_to_uninit(&self, dest: *mut u8)
impl<T> From<T> for Disambiguation
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for Disambiguation
where
T: Clone,
type Owned = T;fn to_owned(&self) -> Tfn clone_into(&self, target: &mut T)
impl<T, U> Into<U> for Disambiguation
where
U: From<T>,
fn into(self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom<U> for Disambiguation
where
U: Into<T>,
type Error = Infallible;fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto<U> for Disambiguation
where
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error;fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>