Enum Disambiguation
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.
Implementations
impl Clone for Disambiguation
fn clone(self: &Self) -> Disambiguation
impl Copy for Disambiguation
impl Debug for Disambiguation
fn fmt(self: &Self, f: &mut $crate::fmt::Formatter<'_>) -> $crate::fmt::Result
impl Default for Disambiguation
fn default() -> Disambiguation
impl Freeze for Disambiguation
impl RefUnwindSafe for Disambiguation
impl Send for Disambiguation
impl Sync for Disambiguation
impl Unpin for Disambiguation
impl UnwindSafe for Disambiguation
impl<T> Any for Disambiguation
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for Disambiguation
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for Disambiguation
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for Disambiguation
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> From for Disambiguation
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for Disambiguation
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T, U> Into for Disambiguation
fn into(self: Self) -> UCalls
U::from(self).That is, this conversion is whatever the implementation of
[From]<T> for Uchooses to do.
impl<T, U> TryFrom for Disambiguation
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for Disambiguation
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>