Skip to main content

LocalTimeType

Struct LocalTimeType 

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

Local time type associated to a time zone

Implementations§

Source§

impl LocalTimeType

Source

pub const fn new( ut_offset: i32, is_dst: bool, time_zone_designation: Option<&[u8]>, ) -> Result<Self, LocalTimeTypeError>

Construct a local time type

Examples found in repository?
examples/statics.rs (line 27)
15    const TIME_ZONE_REF: TimeZoneRef<'static> = unwrap!(TimeZoneRef::new(
16        &[
17            Transition::new(-2334101314, 1),
18            Transition::new(-1157283000, 2),
19            Transition::new(-1155436200, 1),
20            Transition::new(-880198200, 3),
21            Transition::new(-769395600, 4),
22            Transition::new(-765376200, 1),
23            Transition::new(-712150200, 5),
24        ],
25        const {
26            &[
27                unwrap!(LocalTimeType::new(-37886, false, Some(b"LMT"))),
28                unwrap!(LocalTimeType::new(-37800, false, Some(b"HST"))),
29                unwrap!(LocalTimeType::new(-34200, true, Some(b"HDT"))),
30                unwrap!(LocalTimeType::new(-34200, true, Some(b"HWT"))),
31                unwrap!(LocalTimeType::new(-34200, true, Some(b"HPT"))),
32                unwrap!(LocalTimeType::new(-36000, false, Some(b"HST"))),
33            ]
34        },
35        &[
36            LeapSecond::new(78796800, 1),
37            LeapSecond::new(94694401, 2),
38            LeapSecond::new(126230402, 3),
39            LeapSecond::new(157766403, 4),
40            LeapSecond::new(189302404, 5),
41            LeapSecond::new(220924805, 6),
42        ],
43        const {
44            &Some(TransitionRule::Alternate(unwrap!(AlternateTime::new(
45                unwrap!(LocalTimeType::new(-36000, false, Some(b"HST"))),
46                unwrap!(LocalTimeType::new(-34200, true, Some(b"HPT"))),
47                RuleDay::MonthWeekDay(unwrap!(MonthWeekDay::new(10, 5, 0))),
48                93600,
49                RuleDay::MonthWeekDay(unwrap!(MonthWeekDay::new(3, 4, 4))),
50                7200,
51            ))))
52        },
53    ));
Source

pub const fn utc() -> Self

Construct the local time type associated to UTC

Source

pub const fn with_ut_offset(ut_offset: i32) -> Result<Self, LocalTimeTypeError>

Construct a local time type with the specified UTC offset in seconds

Examples found in repository?
examples/statics.rs (line 62)
62    const DATE_TIME: DateTime = unwrap!(DateTime::new(2000, 1, 1, 1, 0, 0, 1000, unwrap!(LocalTimeType::with_ut_offset(3600))));
More examples
Hide additional examples
examples/time.rs (line 88)
1fn main() -> Result<(), tz::Error> {
2    #[cfg(feature = "std")]
3    {
4        use tz::{DateTime, LocalTimeType, TimeZone, UtcDateTime};
5
6        //
7        // TimeZone
8        //
9
10        // 2000-01-01T00:00:00Z
11        let unix_time = 946684800;
12
13        // Get UTC time zone
14        let time_zone_utc = TimeZone::utc();
15        println!("{:?}", time_zone_utc.find_local_time_type(unix_time)?);
16
17        // Get fixed time zone at GMT-1
18        let time_zone_fixed = TimeZone::fixed(-3600)?;
19        println!("{:?}", time_zone_fixed.find_local_time_type(unix_time)?.ut_offset());
20
21        // Get local time zone (UNIX only)
22        let time_zone_local = TimeZone::local()?;
23        println!("{:?}", time_zone_local.find_local_time_type(unix_time)?.ut_offset());
24
25        // Get the current local time type
26        println!("{:?}", time_zone_local.find_current_local_time_type()?);
27
28        // Get time zone from a TZ string:
29        // From an absolute file
30        let _ = TimeZone::from_posix_tz("/usr/share/zoneinfo/Pacific/Auckland");
31        // From a file relative to the system timezone directory
32        let _ = TimeZone::from_posix_tz("Pacific/Auckland");
33        // From a time zone description
34        TimeZone::from_posix_tz("HST10")?;
35        TimeZone::from_posix_tz("<-03>3")?;
36        TimeZone::from_posix_tz("NZST-12:00:00NZDT-13:00:00,M10.1.0,M3.3.0")?;
37        // Use a leading colon to force searching for a corresponding file
38        let _ = TimeZone::from_posix_tz(":UTC");
39
40        //
41        // DateTime
42        //
43
44        // Get the current UTC date time
45        println!("{:?}", UtcDateTime::now()?);
46
47        // Create a new UTC date time (2000-01-01T00:00:00.123456789Z)
48        let utc_date_time = UtcDateTime::new(2000, 1, 1, 0, 0, 0, 123_456_789)?;
49        println!("{utc_date_time}");
50        println!("{utc_date_time:?}");
51
52        // Create a new UTC date time from a Unix time with nanoseconds (2000-01-01T00:00:00.123456789Z)
53        let other_utc_date_time = UtcDateTime::from_timespec(946684800, 123_456_789)?;
54        println!("{other_utc_date_time}");
55        println!("{other_utc_date_time:?}");
56
57        // Project the UTC date time to a time zone
58        let date_time = utc_date_time.project(TimeZone::fixed(-3600)?.as_ref())?;
59        println!("{date_time}");
60        println!("{date_time:#?}");
61
62        // Project the date time to another time zone
63        let other_date_time = date_time.project(TimeZone::fixed(3600)?.as_ref())?;
64        println!("{other_date_time}");
65        println!("{other_date_time:#?}");
66
67        // Create a new date time from a Unix time with nanoseconds and a time zone (2000-01-01T00:00:00.123456789Z)
68        let another_date_time = DateTime::from_timespec(946684800, 123_456_789, TimeZone::fixed(86400)?.as_ref())?;
69        println!("{another_date_time}");
70        println!("{another_date_time:#?}");
71
72        // Get the corresponding UTC Unix times with nanoseconds
73        println!("{:?}", (utc_date_time.unix_time(), utc_date_time.nanoseconds()));
74        println!("{:?}", (other_utc_date_time.unix_time(), other_utc_date_time.nanoseconds()));
75        println!("{:?}", (date_time.unix_time(), date_time.nanoseconds()));
76        println!("{:?}", (other_date_time.unix_time(), other_date_time.nanoseconds()));
77
78        // Nanoseconds are always added towards the future
79        let neg_utc_date_time = UtcDateTime::from_timespec(-1, 123_456_789)?;
80        println!("{neg_utc_date_time}");
81        println!("{}", neg_utc_date_time.total_nanoseconds());
82
83        // Get the current date time at the local time zone (UNIX only)
84        let time_zone_local = TimeZone::local()?;
85        println!("{:#?}", DateTime::now(time_zone_local.as_ref())?);
86
87        // Create a new date time with an UTC offset (2000-01-01T01:00:00.123456789+01:00)
88        println!("{:#?}", DateTime::new(2000, 1, 1, 1, 0, 0, 123_456_789, LocalTimeType::with_ut_offset(3600)?)?);
89
90        //
91        // Find the possible date times corresponding to a date, a time and a time zone
92        //
93        let time_zone = TimeZone::from_posix_tz("CET-1CEST,M3.5.0,M10.5.0/3")?;
94
95        // Found date time is unique
96        let found_date_times = DateTime::find(2000, 1, 1, 0, 0, 0, 0, time_zone.as_ref())?;
97        println!("{found_date_times:#?}");
98        println!("{:#?}", found_date_times.unique());
99        println!("{:#?}", found_date_times.earliest());
100        println!("{:#?}", found_date_times.latest());
101
102        // Found date time was skipped by a forward transition
103        let found_date_times = DateTime::find(2000, 3, 26, 2, 30, 0, 0, time_zone.as_ref())?;
104        println!("{found_date_times:#?}");
105        println!("{:#?}", found_date_times.unique());
106        println!("{:#?}", found_date_times.earliest());
107        println!("{:#?}", found_date_times.latest());
108
109        // Found date time is ambiguous because of a backward transition
110        let found_date_times = DateTime::find(2000, 10, 29, 2, 30, 0, 0, time_zone.as_ref())?;
111        println!("{found_date_times:#?}");
112        println!("{:#?}", found_date_times.unique());
113        println!("{:#?}", found_date_times.earliest());
114        println!("{:#?}", found_date_times.latest());
115    }
116
117    Ok(())
118}
Source

pub const fn ut_offset(&self) -> i32

Returns offset from UTC in seconds

Examples found in repository?
examples/time.rs (line 19)
1fn main() -> Result<(), tz::Error> {
2    #[cfg(feature = "std")]
3    {
4        use tz::{DateTime, LocalTimeType, TimeZone, UtcDateTime};
5
6        //
7        // TimeZone
8        //
9
10        // 2000-01-01T00:00:00Z
11        let unix_time = 946684800;
12
13        // Get UTC time zone
14        let time_zone_utc = TimeZone::utc();
15        println!("{:?}", time_zone_utc.find_local_time_type(unix_time)?);
16
17        // Get fixed time zone at GMT-1
18        let time_zone_fixed = TimeZone::fixed(-3600)?;
19        println!("{:?}", time_zone_fixed.find_local_time_type(unix_time)?.ut_offset());
20
21        // Get local time zone (UNIX only)
22        let time_zone_local = TimeZone::local()?;
23        println!("{:?}", time_zone_local.find_local_time_type(unix_time)?.ut_offset());
24
25        // Get the current local time type
26        println!("{:?}", time_zone_local.find_current_local_time_type()?);
27
28        // Get time zone from a TZ string:
29        // From an absolute file
30        let _ = TimeZone::from_posix_tz("/usr/share/zoneinfo/Pacific/Auckland");
31        // From a file relative to the system timezone directory
32        let _ = TimeZone::from_posix_tz("Pacific/Auckland");
33        // From a time zone description
34        TimeZone::from_posix_tz("HST10")?;
35        TimeZone::from_posix_tz("<-03>3")?;
36        TimeZone::from_posix_tz("NZST-12:00:00NZDT-13:00:00,M10.1.0,M3.3.0")?;
37        // Use a leading colon to force searching for a corresponding file
38        let _ = TimeZone::from_posix_tz(":UTC");
39
40        //
41        // DateTime
42        //
43
44        // Get the current UTC date time
45        println!("{:?}", UtcDateTime::now()?);
46
47        // Create a new UTC date time (2000-01-01T00:00:00.123456789Z)
48        let utc_date_time = UtcDateTime::new(2000, 1, 1, 0, 0, 0, 123_456_789)?;
49        println!("{utc_date_time}");
50        println!("{utc_date_time:?}");
51
52        // Create a new UTC date time from a Unix time with nanoseconds (2000-01-01T00:00:00.123456789Z)
53        let other_utc_date_time = UtcDateTime::from_timespec(946684800, 123_456_789)?;
54        println!("{other_utc_date_time}");
55        println!("{other_utc_date_time:?}");
56
57        // Project the UTC date time to a time zone
58        let date_time = utc_date_time.project(TimeZone::fixed(-3600)?.as_ref())?;
59        println!("{date_time}");
60        println!("{date_time:#?}");
61
62        // Project the date time to another time zone
63        let other_date_time = date_time.project(TimeZone::fixed(3600)?.as_ref())?;
64        println!("{other_date_time}");
65        println!("{other_date_time:#?}");
66
67        // Create a new date time from a Unix time with nanoseconds and a time zone (2000-01-01T00:00:00.123456789Z)
68        let another_date_time = DateTime::from_timespec(946684800, 123_456_789, TimeZone::fixed(86400)?.as_ref())?;
69        println!("{another_date_time}");
70        println!("{another_date_time:#?}");
71
72        // Get the corresponding UTC Unix times with nanoseconds
73        println!("{:?}", (utc_date_time.unix_time(), utc_date_time.nanoseconds()));
74        println!("{:?}", (other_utc_date_time.unix_time(), other_utc_date_time.nanoseconds()));
75        println!("{:?}", (date_time.unix_time(), date_time.nanoseconds()));
76        println!("{:?}", (other_date_time.unix_time(), other_date_time.nanoseconds()));
77
78        // Nanoseconds are always added towards the future
79        let neg_utc_date_time = UtcDateTime::from_timespec(-1, 123_456_789)?;
80        println!("{neg_utc_date_time}");
81        println!("{}", neg_utc_date_time.total_nanoseconds());
82
83        // Get the current date time at the local time zone (UNIX only)
84        let time_zone_local = TimeZone::local()?;
85        println!("{:#?}", DateTime::now(time_zone_local.as_ref())?);
86
87        // Create a new date time with an UTC offset (2000-01-01T01:00:00.123456789+01:00)
88        println!("{:#?}", DateTime::new(2000, 1, 1, 1, 0, 0, 123_456_789, LocalTimeType::with_ut_offset(3600)?)?);
89
90        //
91        // Find the possible date times corresponding to a date, a time and a time zone
92        //
93        let time_zone = TimeZone::from_posix_tz("CET-1CEST,M3.5.0,M10.5.0/3")?;
94
95        // Found date time is unique
96        let found_date_times = DateTime::find(2000, 1, 1, 0, 0, 0, 0, time_zone.as_ref())?;
97        println!("{found_date_times:#?}");
98        println!("{:#?}", found_date_times.unique());
99        println!("{:#?}", found_date_times.earliest());
100        println!("{:#?}", found_date_times.latest());
101
102        // Found date time was skipped by a forward transition
103        let found_date_times = DateTime::find(2000, 3, 26, 2, 30, 0, 0, time_zone.as_ref())?;
104        println!("{found_date_times:#?}");
105        println!("{:#?}", found_date_times.unique());
106        println!("{:#?}", found_date_times.earliest());
107        println!("{:#?}", found_date_times.latest());
108
109        // Found date time is ambiguous because of a backward transition
110        let found_date_times = DateTime::find(2000, 10, 29, 2, 30, 0, 0, time_zone.as_ref())?;
111        println!("{found_date_times:#?}");
112        println!("{:#?}", found_date_times.unique());
113        println!("{:#?}", found_date_times.earliest());
114        println!("{:#?}", found_date_times.latest());
115    }
116
117    Ok(())
118}
Source

pub const fn is_dst(&self) -> bool

Returns daylight saving time indicator

Source

pub const fn time_zone_designation(&self) -> &str

Returns time zone designation

Trait Implementations§

Source§

impl Clone for LocalTimeType

Source§

fn clone(&self) -> LocalTimeType

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Copy for LocalTimeType

Source§

impl Debug for LocalTimeType

Source§

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

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

impl Eq for LocalTimeType

Source§

impl PartialEq for LocalTimeType

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 (const: unstable) · 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 StructuralPartialEq for LocalTimeType

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, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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, 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.