Struct TimeZoneTransition
struct TimeZoneTransition<'t> { ... }
A representation a single time zone transition.
A time zone transition is an instant in time the marks the beginning of a change in the offset from UTC that civil time is computed from in a particular time zone. For example, when daylight saving time comes into effect (or goes away). Another example is when a geographic region changes its permanent offset from UTC.
This is a low level type that you generally shouldn't need. It's useful in cases where you need to know something about the specific instants at which time zone transitions occur. For example, an embedded device might need to be explicitly programmed with daylight saving time transitions. APIs like this enable callers to explore those transitions.
This type is yielded by the iterators
TimeZonePrecedingTransitions and
TimeZoneFollowingTransitions. The iterators are created by
TimeZone::preceding and TimeZone::following, respectively.
Example
This shows a somewhat silly example that finds all of the unique civil (or "clock" or "local") times at which a time zone transition has occurred in a particular time zone:
use BTreeSet;
use ;
let tz = get?;
let now = date.at.to_zoned?;
let mut set = new;
for trans in tz.preceding
assert_eq!;
# Ok::
Implementations
impl<'t> TimeZoneTransition<'t>
fn timestamp(self: &Self) -> TimestampReturns the timestamp at which this transition began.
Example
use ; let tz = get?; // Look for the first time zone transition in `US/Eastern` following // 2023-03-09 00:00:00. let start = date.to_zoned?.timestamp; let next = tz.following.next.unwrap; assert_eq!; # Ok::fn offset(self: &Self) -> OffsetReturns the offset corresponding to this time zone transition. All instants at and following this transition's timestamp (and before the next transition's timestamp) need to apply this offset from UTC to get the civil or "local" time in the corresponding time zone.
Example
use ; let tz = get?; // Get the offset of the next transition after // 2023-03-09 00:00:00. let start = date.to_zoned?.timestamp; let next = tz.following.next.unwrap; assert_eq!; // Or go backwards to find the previous transition. let prev = tz.preceding.next.unwrap; assert_eq!; # Ok::fn abbreviation<'a>(self: &'a Self) -> &'a strReturns the time zone abbreviation corresponding to this time zone transition. All instants at and following this transition's timestamp (and before the next transition's timestamp) may use this abbreviation when creating a human readable string. For example, this is the abbreviation used with the
%Zspecifier with Jiff'sfmt::strtimemodule.Note that abbreviations can to be ambiguous. For example, the abbreviation
CSTcan be used for the time zonesAsia/Shanghai,America/ChicagoandAmerica/Havana.The lifetime of the string returned is tied to this
TimeZoneTransition, which may be shorter than't(the lifetime of the time zone this transition was created from).Example
use ; let tz = get?; // Get the abbreviation of the next transition after // 2023-03-09 00:00:00. let start = date.to_zoned?.timestamp; let next = tz.following.next.unwrap; assert_eq!; // Or go backwards to find the previous transition. let prev = tz.preceding.next.unwrap; assert_eq!; # Ok::fn dst(self: &Self) -> DstReturns whether daylight saving time is enabled for this time zone transition.
Callers should generally treat this as informational only. In particular, not all time zone transitions are related to daylight saving time. For example, some transitions are a result of a region permanently changing their offset from UTC.
Example
use ; let tz = get?; // Get the DST status of the next transition after // 2023-03-09 00:00:00. let start = date.to_zoned?.timestamp; let next = tz.following.next.unwrap; assert_eq!; // Or go backwards to find the previous transition. let prev = tz.preceding.next.unwrap; assert_eq!; # Ok::
impl<'t> Clone for TimeZoneTransition<'t>
fn clone(self: &Self) -> TimeZoneTransition<'t>
impl<'t> Debug for TimeZoneTransition<'t>
fn fmt(self: &Self, f: &mut $crate::fmt::Formatter<'_>) -> $crate::fmt::Result
impl<'t> Freeze for TimeZoneTransition<'t>
impl<'t> RefUnwindSafe for TimeZoneTransition<'t>
impl<'t> Send for TimeZoneTransition<'t>
impl<'t> Sync for TimeZoneTransition<'t>
impl<'t> Unpin for TimeZoneTransition<'t>
impl<'t> UnwindSafe for TimeZoneTransition<'t>
impl<T> Any for TimeZoneTransition<'t>
fn type_id(self: &Self) -> TypeId
impl<T> Borrow for TimeZoneTransition<'t>
fn borrow(self: &Self) -> &T
impl<T> BorrowMut for TimeZoneTransition<'t>
fn borrow_mut(self: &mut Self) -> &mut T
impl<T> CloneToUninit for TimeZoneTransition<'t>
unsafe fn clone_to_uninit(self: &Self, dest: *mut u8)
impl<T> From for TimeZoneTransition<'t>
fn from(t: T) -> TReturns the argument unchanged.
impl<T> ToOwned for TimeZoneTransition<'t>
fn to_owned(self: &Self) -> Tfn clone_into(self: &Self, target: &mut T)
impl<T, U> Into for TimeZoneTransition<'t>
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 TimeZoneTransition<'t>
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
impl<T, U> TryInto for TimeZoneTransition<'t>
fn try_into(self: Self) -> Result<U, <U as TryFrom<T>>::Error>