pub struct UtcDateTime { /* private fields */ }
Expand description
UTC date time expressed in the proleptic gregorian calendar
Implementations§
Source§impl UtcDateTime
impl UtcDateTime
Sourcepub const fn new(
year: i32,
month: u8,
month_day: u8,
hour: u8,
minute: u8,
second: u8,
nanoseconds: u32,
) -> Result<Self, TzError>
pub const fn new( year: i32, month: u8, month_day: u8, hour: u8, minute: u8, second: u8, nanoseconds: u32, ) -> Result<Self, TzError>
Construct a UTC date time
§Inputs
year
: Yearmonth
: 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 secondnanoseconds
: Nanoseconds in[0, 999_999_999]
Examples found in repository?
More examples
examples/time.rs (line 48)
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}
Sourcepub const fn from_timespec(
unix_time: i64,
nanoseconds: u32,
) -> Result<Self, TzError>
pub const fn from_timespec( unix_time: i64, nanoseconds: u32, ) -> Result<Self, TzError>
Construct a UTC date time from a Unix time in seconds and nanoseconds
Examples found in repository?
More examples
examples/time.rs (line 53)
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}
Sourcepub const fn from_total_nanoseconds(
total_nanoseconds: i128,
) -> Result<Self, TzError>
pub const fn from_total_nanoseconds( total_nanoseconds: i128, ) -> Result<Self, TzError>
Construct a UTC date time from total nanoseconds since Unix epoch (1970-01-01T00:00:00Z
)
Sourcepub const fn unix_time(&self) -> i64
pub const fn unix_time(&self) -> i64
Returns the Unix time in seconds associated to the UTC date time
Examples found in repository?
examples/time.rs (line 73)
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}
Sourcepub const fn project(
&self,
time_zone_ref: TimeZoneRef<'_>,
) -> Result<DateTime, TzError>
pub const fn project( &self, time_zone_ref: TimeZoneRef<'_>, ) -> Result<DateTime, TzError>
Project the UTC date time into a time zone.
Leap seconds are not preserved.
Examples found in repository?
More examples
examples/time.rs (line 58)
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}
Sourcepub fn now() -> Result<Self, TzError>
Available on crate feature std
only.
pub fn now() -> Result<Self, TzError>
std
only.Returns the current UTC date time
Examples found in repository?
examples/time.rs (line 45)
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§impl UtcDateTime
impl UtcDateTime
Sourcepub const fn nanoseconds(&self) -> u32
pub const fn nanoseconds(&self) -> u32
Returns nanoseconds in [0, 999_999_999]
Examples found in repository?
examples/time.rs (line 73)
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}
Sourcepub const fn total_nanoseconds(&self) -> i128
pub const fn total_nanoseconds(&self) -> i128
Returns total nanoseconds since Unix epoch (1970-01-01T00:00:00Z
)
Examples found in repository?
examples/time.rs (line 81)
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}
Trait Implementations§
Source§impl Clone for UtcDateTime
impl Clone for UtcDateTime
Source§fn clone(&self) -> UtcDateTime
fn clone(&self) -> UtcDateTime
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Debug for UtcDateTime
impl Debug for UtcDateTime
Source§impl Display for UtcDateTime
impl Display for UtcDateTime
Source§impl Ord for UtcDateTime
impl Ord for UtcDateTime
Source§fn cmp(&self, other: &UtcDateTime) -> Ordering
fn cmp(&self, other: &UtcDateTime) -> Ordering
1.21.0 · Source§fn max(self, other: Self) -> Selfwhere
Self: Sized,
fn max(self, other: Self) -> Selfwhere
Self: Sized,
Compares and returns the maximum of two values. Read more
Source§impl PartialEq for UtcDateTime
impl PartialEq for UtcDateTime
Source§impl PartialOrd for UtcDateTime
impl PartialOrd for UtcDateTime
impl Copy for UtcDateTime
impl Eq for UtcDateTime
impl StructuralPartialEq for UtcDateTime
Auto Trait Implementations§
impl Freeze for UtcDateTime
impl RefUnwindSafe for UtcDateTime
impl Send for UtcDateTime
impl Sync for UtcDateTime
impl Unpin for UtcDateTime
impl UnwindSafe for UtcDateTime
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more