[−][src]Crate chrono_tz
Chrono-TZ 0.4.1
Chrono-TZ
is a library that provides implementors of the
TimeZone
trait for rust-chrono
. The
impls are generated by a build script using the IANA database
and zoneinfo_parse
.
Usage
Put this in your Cargo.toml
:
[dependencies]
chrono = "0.4"
chrono-tz = "0.4"
If you want Serde support, specify it like this:
chrono-tz = { version = "0.4", features = ["serde"] }
Then you will need to write (in your crate root):
extern crate chrono; extern crate chrono_tz;
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));
Modules
Africa | |
America | |
Antarctica | |
Arctic | |
Asia | |
Atlantic | |
Australia | |
Brazil | |
Canada | |
Chile | |
Etc | |
Europe | |
Indian | |
Mexico | |
Pacific | |
US |
Enums
Tz | TimeZones built at compile time from the tz database |
Constants
Statics
TZ_VARIANTS | 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. |