Crate chrono_tz

Source
Expand description

§Chrono-TZ

Chrono-TZ is a library that provides implementors of the TimeZone trait for chrono. The impls are generated by a build script using the IANA database and zoneinfo_parse.

§Examples

Create a time in one timezone and convert it to UTC

use chrono::{TimeZone, Utc};
use chrono_tz::US::Pacific;

let pacific_time = Pacific.ymd(1990, 5, 6).and_hms(12, 30, 45);
let utc_time = pacific_time.with_timezone(&Utc);
assert_eq!(utc_time, Utc.ymd(1990, 5, 6).and_hms(19, 30, 45));

Create a naive datetime and convert it to a timezone-aware datetime

use chrono::{TimeZone, NaiveDate};
use chrono_tz::Africa::Johannesburg;

let naive_dt = NaiveDate::from_ymd(2038, 1, 19).and_hms(3, 14, 08);
let tz_aware = Johannesburg.from_local_datetime(&naive_dt).unwrap();
assert_eq!(tz_aware.to_string(), "2038-01-19 03:14:08 SAST");

London and New York change their clocks on different days in March so only have a 4-hour difference on certain days.

use chrono::TimeZone;
use chrono_tz::Europe::London;
use chrono_tz::America::New_York;

let london_time = London.ymd(2016, 3, 18).and_hms(3, 0, 0);
let ny_time = london_time.with_timezone(&New_York);
assert_eq!(ny_time, New_York.ymd(2016, 3, 17).and_hms(23, 0, 0));

Adding 24 hours across a daylight savings change causes a change in local time

use chrono::{TimeZone, Duration};
use chrono_tz::Europe::London;

let dt = London.ymd(2016, 10, 29).and_hms(12, 0, 0);
let later = dt + Duration::hours(24);
assert_eq!(later, London.ymd(2016, 10, 30).and_hms(11, 0, 0));

And of course you can always convert a local time to a unix timestamp

use chrono::TimeZone;
use chrono_tz::Asia::Kolkata;

let dt = Kolkata.ymd(2000, 1, 1).and_hms(0, 0, 0);
let timestamp = dt.timestamp();
assert_eq!(timestamp, 946665000);

Pretty-printing a string will use the correct abbreviation for the timezone

use chrono::TimeZone;
use chrono_tz::Europe::London;

let dt = London.ymd(2016, 5, 10).and_hms(12, 0, 0);
assert_eq!(dt.to_string(), "2016-05-10 12:00:00 BST");
assert_eq!(dt.to_rfc3339(), "2016-05-10T12:00:00+01:00");

You can convert a timezone string to a timezone using the FromStr trait

use chrono::TimeZone;
use chrono_tz::Tz;
use chrono_tz::UTC;

let tz: Tz = "Antarctica/South_Pole".parse().unwrap();
let dt = tz.ymd(2016, 10, 22).and_hms(12, 0, 0);
let utc = dt.with_timezone(&UTC);
assert_eq!(utc.to_string(), "2016-10-21 23:00:00 UTC");

If you need to iterate over all variants you can use the TZ_VARIANTS array

use chrono_tz::{TZ_VARIANTS, Tz};
assert!(TZ_VARIANTS.iter().any(|v| *v == Tz::UTC));

Re-exports§

pub use IANA_TZDB_VERSION;

Modules§

Africacase-insensitive or filter-by-regex
Americacase-insensitive or filter-by-regex
Antarcticacase-insensitive or filter-by-regex
Arcticcase-insensitive or filter-by-regex
Asiacase-insensitive or filter-by-regex
Atlanticcase-insensitive or filter-by-regex
Australiacase-insensitive or filter-by-regex
Brazilcase-insensitive or filter-by-regex
Canadacase-insensitive or filter-by-regex
Chilecase-insensitive or filter-by-regex
Etccase-insensitive or filter-by-regex
Europecase-insensitive or filter-by-regex
Indiancase-insensitive or filter-by-regex
Mexicocase-insensitive or filter-by-regex
Pacificcase-insensitive or filter-by-regex
UScase-insensitive or filter-by-regex

Structs§

GapInfo
Represents the information of a gap.
ParseErrorcase-insensitive or filter-by-regex
TzOffset

Enums§

Tzcase-insensitive or filter-by-regex
TimeZones built at compile time from the tz database

Constants§

CETcase-insensitive or filter-by-regex
CST6CDTcase-insensitive or filter-by-regex
Cubacase-insensitive or filter-by-regex
EETcase-insensitive or filter-by-regex
ESTcase-insensitive or filter-by-regex
EST5EDTcase-insensitive or filter-by-regex
Egyptcase-insensitive or filter-by-regex
Eirecase-insensitive or filter-by-regex
GBcase-insensitive or filter-by-regex
GBEirecase-insensitive or filter-by-regex
GMTcase-insensitive or filter-by-regex
GMT0case-insensitive or filter-by-regex
GMTMinus0case-insensitive or filter-by-regex
GMTPlus0case-insensitive or filter-by-regex
Greenwichcase-insensitive or filter-by-regex
HSTcase-insensitive or filter-by-regex
Hongkongcase-insensitive or filter-by-regex
IANA_TZDB_VERSIONcase-insensitive or filter-by-regex
Icelandcase-insensitive or filter-by-regex
Irancase-insensitive or filter-by-regex
Israelcase-insensitive or filter-by-regex
Jamaicacase-insensitive or filter-by-regex
Japancase-insensitive or filter-by-regex
Kwajaleincase-insensitive or filter-by-regex
Libyacase-insensitive or filter-by-regex
METcase-insensitive or filter-by-regex
MSTcase-insensitive or filter-by-regex
MST7MDTcase-insensitive or filter-by-regex
NZcase-insensitive or filter-by-regex
NZCHATcase-insensitive or filter-by-regex
Navajocase-insensitive or filter-by-regex
PRCcase-insensitive or filter-by-regex
PST8PDTcase-insensitive or filter-by-regex
Polandcase-insensitive or filter-by-regex
Portugalcase-insensitive or filter-by-regex
ROCcase-insensitive or filter-by-regex
ROKcase-insensitive or filter-by-regex
Singaporecase-insensitive or filter-by-regex
Turkeycase-insensitive or filter-by-regex
UCTcase-insensitive or filter-by-regex
UTCcase-insensitive or filter-by-regex
Universalcase-insensitive or filter-by-regex
WETcase-insensitive or filter-by-regex
WSUcase-insensitive or filter-by-regex
Zulucase-insensitive or filter-by-regex

Statics§

TZ_VARIANTScase-insensitive or filter-by-regex
An array of every known variant

Traits§

OffsetComponents
Detailed timezone offset components that expose any special conditions currently in effect.
OffsetName
Timezone offset name information.