clia_local_offset/
lib.rs

1//! Get current local timezone offset simplely.
2
3pub mod error;
4
5use time::UtcOffset;
6use tz::TimeZone;
7
8/// Get current local timezone offset
9pub fn current_local_offset() -> Result<UtcOffset, error::LocalOffsetError> {
10    // Get local time zone (UNIX only)
11    let time_zone_local = TimeZone::local()?;
12
13    // Get the current local time type
14    let current_local_time_type = time_zone_local.find_current_local_time_type()?;
15
16    let diff_secs = current_local_time_type.ut_offset();
17
18    let offset_sec = UtcOffset::from_hms(
19        (diff_secs / 3_600) as _,
20        ((diff_secs / 60) % 60) as _,
21        (diff_secs % 60) as _,
22    )?
23    // .expect("Can not get local offset!")
24    .whole_seconds();
25
26    UtcOffset::from_whole_seconds(offset_sec).map_err(|e| e.into())
27    //.expect("Can not from whole seconds!")
28}
29
30#[cfg(test)]
31mod tests {
32    use super::*;
33
34    #[test]
35    fn it_works() {
36        let result = current_local_offset();
37        println!("{:?}", result);
38    }
39}