#timezone #date-time #time #tz #iana #name #chrono

time-tz

Implementation of tz database (IANA) for the time Rust crate

17 releases (5 stable)

3.0.0-rc.5.0.0 Mar 2, 2024
2.0.0 Jul 22, 2023
1.0.3 Jun 10, 2023
1.0.2 May 22, 2022
0.5.2 Mar 11, 2022

#22 in Date and time

Download history 3088/week @ 2023-12-20 1990/week @ 2023-12-27 5817/week @ 2024-01-03 3778/week @ 2024-01-10 4298/week @ 2024-01-17 4708/week @ 2024-01-24 5980/week @ 2024-01-31 5034/week @ 2024-02-07 5252/week @ 2024-02-14 5452/week @ 2024-02-21 7033/week @ 2024-02-28 6702/week @ 2024-03-06 6368/week @ 2024-03-13 6224/week @ 2024-03-20 5524/week @ 2024-03-27 4121/week @ 2024-04-03

23,671 downloads per month
Used in 21 crates (16 directly)

BSD-3-Clause

635KB
10K SLoC

C 7K SLoC // 0.2% comments Rust 1.5K SLoC // 0.2% comments AWK 1K SLoC // 0.2% comments Korn shell 690 SLoC // 0.1% comments Shell 36 SLoC // 0.1% comments

time-tz

An implementation of the tz database for the time-rs Rust crate.

chat

This implementation is based off of chrono-tz (https://github.com/chronotope/chrono-tz) but uses time-rs instead of chrono. This is designed to replace use of chono dependency which is impacted by CVE-2020-26235 (localtime_r thread safety issue linked to std::env::set_var).

Features

  • Injects an assume_timezone member function to any PrimitiveDateTime.
  • Injects a to_timezone member function to any OffsetDateTime.
  • Provides a timezones::get_by_name function to get a timezone by name.
  • Supports finding the closest IANA match from a windows timezone name.
  • Supports obtaining system's current timezone (through the system feature).

Usage

use time::macros::datetime;
use time_tz::{PrimitiveDateTimeExt, OffsetDateTimeExt, timezones};

fn main()
{
    // ===========================================
    //  Create a new datetime in a given timezone
    // ===========================================
    
    // First we have to get the source timezone:
    let london = timezones::db::europe::LONDON;

    // Now we can create a primitive date time and call the extension function:
    let dt = datetime!(2016-10-8 17:0:0).assume_timezone_utc(london);


    // ===========================
    //  Convert to a new timezone
    // ===========================

    // First we get the target timezone:
    let berlin = timezones::db::europe::BERLIN;

    // Now we can convert (again by calling an extension function):
    let converted = dt.to_timezone(berlin);

    // ... do something with converted
}

Dependencies

~1–14MB
~150K SLoC