tz

Struct DateTime

Source
pub struct DateTime { /* private fields */ }
Expand description

Date time associated to a local time type, exprimed in the proleptic gregorian calendar

Implementations§

Source§

impl DateTime

Source

pub const fn new( year: i32, month: u8, month_day: u8, hour: u8, minute: u8, second: u8, nanoseconds: u32, local_time_type: LocalTimeType, ) -> Result<Self, DateTimeError>

Construct a date time

§Inputs
  • year: Year
  • month: Month in [1, 12]
  • month_day: Day of the month in [1, 31]
  • hour: Hours since midnight in [0, 23]
  • minute: Minutes in [0, 59]
  • second: Seconds in [0, 60], with a possible leap second
  • nanoseconds: Nanoseconds in [0, 999_999_999]
  • local_time_type: Local time type associated to a time zone
Source

pub fn find( year: i32, month: u8, month_day: u8, hour: u8, minute: u8, second: u8, nanoseconds: u32, time_zone_ref: TimeZoneRef<'_>, ) -> Result<FoundDateTimeList, TzError>

Available on crate feature alloc only.

Find the possible date times corresponding to a date, a time and a time zone

§Inputs
  • year: Year
  • month: Month in [1, 12]
  • month_day: Day of the month in [1, 31]
  • hour: Hours since midnight in [0, 23]
  • minute: Minutes in [0, 59]
  • second: Seconds in [0, 60], with a possible leap second
  • nanoseconds: Nanoseconds in [0, 999_999_999]
  • time_zone_ref: Reference to a time zone
Source

pub fn find_n<'a>( buf: &'a mut [Option<FoundDateTimeKind>], year: i32, month: u8, month_day: u8, hour: u8, minute: u8, second: u8, nanoseconds: u32, time_zone_ref: TimeZoneRef<'_>, ) -> Result<FoundDateTimeListRefMut<'a>, TzError>

Find the possible date times corresponding to a date, a time and a time zone.

This method doesn’t allocate, and instead takes a preallocated buffer as an input. It returns a FoundDateTimeListRefMut wrapper which has additional methods.

§Inputs
  • buf: Preallocated buffer
  • year: Year
  • month: Month in [1, 12]
  • month_day: Day of the month in [1, 31]
  • hour: Hours since midnight in [0, 23]
  • minute: Minutes in [0, 59]
  • second: Seconds in [0, 60], with a possible leap second
  • nanoseconds: Nanoseconds in [0, 999_999_999]
  • time_zone_ref: Reference to a time zone
§Usage
use tz::datetime::{DateTime, FoundDateTimeKind};
use tz::timezone::{LocalTimeType, TimeZoneRef, Transition};

let transitions = &[Transition::new(3600, 1), Transition::new(86400, 0), Transition::new(i64::MAX, 0)];
let local_time_types = &[LocalTimeType::new(0, false, Some(b"STD"))?, LocalTimeType::new(3600, true, Some(b"DST"))?];
let time_zone_ref = TimeZoneRef::new(transitions, local_time_types, &[], &None)?;

// Buffer is too small, so the results are non exhaustive
let mut small_buf = [None; 1];
assert!(!DateTime::find_n(&mut small_buf, 1970, 1, 2, 0, 30, 0, 0, time_zone_ref)?.is_exhaustive());

// Fill buffer
let mut buf = [None; 2];
let found_date_time_list = DateTime::find_n(&mut buf, 1970, 1, 2, 0, 30, 0, 0, time_zone_ref)?;
let data = found_date_time_list.data();
assert!(found_date_time_list.is_exhaustive());
assert_eq!(found_date_time_list.count(), 2);
assert!(matches!(data, [Some(FoundDateTimeKind::Normal(..)), Some(FoundDateTimeKind::Normal(..))]));

// We can reuse the buffer
let found_date_time_list = DateTime::find_n(&mut buf, 1970, 1, 1, 1, 30, 0, 0, time_zone_ref)?;
let data = found_date_time_list.data();
assert!(found_date_time_list.is_exhaustive());
assert_eq!(found_date_time_list.count(), 1);
assert!(found_date_time_list.unique().is_none()); // FoundDateTimeKind::Skipped
assert!(matches!(data, &[Some(FoundDateTimeKind::Skipped { .. })]));
Source

pub const fn from_timespec_and_local( unix_time: i64, nanoseconds: u32, local_time_type: LocalTimeType, ) -> Result<Self, ProjectDateTimeError>

Construct a date time from a Unix time in seconds with nanoseconds and a local time type

Source

pub const fn from_timespec( unix_time: i64, nanoseconds: u32, time_zone_ref: TimeZoneRef<'_>, ) -> Result<Self, ProjectDateTimeError>

Construct a date time from a Unix time in seconds with nanoseconds and a time zone

Source

pub const fn from_total_nanoseconds_and_local( total_nanoseconds: i128, local_time_type: LocalTimeType, ) -> Result<Self, ProjectDateTimeError>

Construct a date time from total nanoseconds since Unix epoch (1970-01-01T00:00:00Z) and a local time type

Source

pub const fn from_total_nanoseconds( total_nanoseconds: i128, time_zone_ref: TimeZoneRef<'_>, ) -> Result<Self, ProjectDateTimeError>

Construct a date time from total nanoseconds since Unix epoch (1970-01-01T00:00:00Z) and a time zone

Source

pub fn now(time_zone_ref: TimeZoneRef<'_>) -> Result<Self, TzError>

Available on crate feature std only.

Returns the current date time associated to the specified time zone

Source

pub const fn project( &self, time_zone_ref: TimeZoneRef<'_>, ) -> Result<Self, ProjectDateTimeError>

Project the date time into another time zone.

Leap seconds are not preserved.

Source§

impl DateTime

Source

pub const fn year(&self) -> i32

Returns year

Source

pub const fn month(&self) -> u8

Returns month in [1, 12]

Source

pub const fn month_day(&self) -> u8

Returns day of the month in [1, 31]

Source

pub const fn hour(&self) -> u8

Returns hours since midnight in [0, 23]

Source

pub const fn minute(&self) -> u8

Returns minutes in [0, 59]

Source

pub const fn second(&self) -> u8

Returns seconds in [0, 60], with a possible leap second

Source

pub const fn nanoseconds(&self) -> u32

Returns nanoseconds in [0, 999_999_999]

Source

pub const fn week_day(&self) -> u8

Returns days since Sunday in [0, 6]

Source

pub const fn year_day(&self) -> u16

Returns days since January 1 in [0, 365]

Source

pub const fn total_nanoseconds(&self) -> i128

Returns total nanoseconds since Unix epoch (1970-01-01T00:00:00Z)

Source

pub const fn local_time_type(&self) -> &LocalTimeType

Returns local time type

Source

pub const fn unix_time(&self) -> i64

Returns UTC Unix time in seconds

Trait Implementations§

Source§

impl Clone for DateTime

Source§

fn clone(&self) -> DateTime

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DateTime

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Display for DateTime

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for DateTime

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for DateTime

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Copy for DateTime

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dst: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dst. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.