Enum AmbiguousOffset
enum AmbiguousOffset
A possibly ambiguous Offset.
An AmbiguousOffset is part of both AmbiguousTimestamp and
AmbiguousZoned, which are created by
TimeZone::to_ambiguous_timestamp and
TimeZone::to_ambiguous_zoned, respectively.
When converting a civil datetime in a particular time zone to a precise
instant in time (that is, either Timestamp or Zoned), then the primary
thing needed to form a precise instant in time is an Offset. The
problem is that some civil datetimes are ambiguous. That is, some do not
exist (because they fall into a gap, where some civil time is skipped),
or some are repeated (because they fall into a fold, where some civil time
is repeated).
The purpose of this type is to represent that ambiguity when it occurs. The ambiguity is manifest through the offset choice: it is either the offset before the transition or the offset after the transition. This is true regardless of whether the ambiguity occurs as a result of a gap or a fold.
It is generally considered very rare to need to inspect values of this
type directly. Instead, higher level routines like
AmbiguousZoned::compatible or AmbiguousZoned::unambiguous will
implement a strategy for you.
Example
This example shows how the "compatible" disambiguation strategy is implemented. Recall that the "compatible" strategy chooses the offset corresponding to the civil datetime after a gap, and the offset corresponding to the civil datetime before a gap.
use ;
let tz = db.get?;
let dt = date.at;
let offset = match tz.to_ambiguous_timestamp.offset ;
assert_eq!;
# Ok::
Variants
-
Unambiguous { offset: Offset } The offset for a particular civil datetime and time zone is unambiguous.
This is the overwhelmingly common case. In general, the only time this case does not occur is when there is a transition to a different time zone (rare) or to/from daylight saving time (occurs for 1 hour twice in year in many geographic locations).
-
Gap { before: Offset, after: Offset } The offset for a particular civil datetime and time zone is ambiguous because there is a gap.
This most commonly occurs when a civil datetime corresponds to an hour that was "skipped" in a jump to DST (daylight saving time).
-
Fold { before: Offset, after: Offset } The offset for a particular civil datetime and time zone is ambiguous because there is a fold.
This most commonly occurs when a civil datetime corresponds to an hour that was "repeated" in a jump to standard time from DST (daylight saving time).
Implementations
impl Clone for AmbiguousOffset
fn clone(self: &Self) -> AmbiguousOffset
impl Copy for AmbiguousOffset
impl Debug for AmbiguousOffset
fn fmt(self: &Self, f: &mut $crate::fmt::Formatter<'_>) -> $crate::fmt::Result
impl Eq for AmbiguousOffset
impl Freeze for AmbiguousOffset
impl PartialEq for AmbiguousOffset
fn eq(self: &Self, other: &AmbiguousOffset) -> bool
impl RefUnwindSafe for AmbiguousOffset
impl Send for AmbiguousOffset
impl StructuralPartialEq for AmbiguousOffset
impl Sync for AmbiguousOffset
impl Unpin for AmbiguousOffset
impl UnwindSafe for AmbiguousOffset
impl<T> Any for AmbiguousOffset
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for AmbiguousOffset
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for AmbiguousOffset
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for AmbiguousOffset
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> From for AmbiguousOffset
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for AmbiguousOffset
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T, U> Into for AmbiguousOffset
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 AmbiguousOffset
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for AmbiguousOffset
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>