diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml index 827055459..993cd3c3e 100644 --- a/.github/workflows/rust.yml +++ b/.github/workflows/rust.yml @@ -154,8 +154,8 @@ jobs: # Todo: eventually we should check in bindings and test them - name: FFI tests run: | - pushd temporal_capi/tests/c && make && popd - pushd temporal_capi/tests/cpp && make && popd + pushd crates/temporal_capi/tests/c && make && popd + pushd crates/temporal_capi/tests/cpp && make && popd - name: temporal_capi tests run: cargo test -p temporal_capi --all-features diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index eddeedd27..74119db59 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -20,7 +20,7 @@ Also, always feel free to reach out for any advice or feedback as needed. ## Testing and debugging -For more information on testing and debugging `temporal_rs`. Please see +For more information on testing and debugging `temporal`. Please see the [testing overview](./docs/testing.md). ## Diplomat and `temporal_capi` diff --git a/Cargo.lock b/Cargo.lock index cd0da93b3..4b96dd0b4 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -859,40 +859,47 @@ dependencies = [ ] [[package]] -name = "temporal_capi" +name = "temporal" version = "0.2.6" dependencies = [ - "diplomat", - "diplomat-runtime", + "calendrical_calculations", + "core_maths", + "iana-time-zone", "icu_calendar", "icu_locale_core", + "ixdtf", + "log", "num-traits", - "temporal_rs", + "resb", "timezone_provider", + "tinystr", + "web-time", "writeable", "zoneinfo64", ] [[package]] -name = "temporal_rs" +name = "temporal_capi" version = "0.2.6" dependencies = [ - "calendrical_calculations", - "core_maths", - "iana-time-zone", + "diplomat", + "diplomat-runtime", "icu_calendar", "icu_locale_core", - "ixdtf", - "log", "num-traits", - "resb", + "temporal", "timezone_provider", - "tinystr", - "web-time", "writeable", "zoneinfo64", ] +[[package]] +name = "temporal_rs" +version = "0.2.7" +dependencies = [ + "temporal", +] + [[package]] name = "timezone_provider" version = "0.2.6" @@ -980,7 +987,7 @@ name = "tzif-inspect" version = "0.2.6" dependencies = [ "jiff-tzdb", - "temporal_rs", + "temporal", "timezone_provider", "tzif", ] diff --git a/Cargo.toml b/Cargo.toml index edbc63370..c78d84c4f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,9 +1,7 @@ [workspace] resolver = "2" members = [ - "provider", - "temporal_capi", - "zoneinfo", + "crates/*", # Tools "tools/*", @@ -12,7 +10,7 @@ members = [ [workspace.package] edition = "2021" version = "0.2.6" -rust-version = "1.86.0" +rust-version = "1.95.0" authors = ["boa-dev"] license = "MIT OR Apache-2.0" repository = "https://github.com/boa-dev/temporal" @@ -29,9 +27,9 @@ exclude = [ [workspace.dependencies] # Self -temporal_rs = { version = "0.2.6", path = ".", default-features = false } -timezone_provider = { version = "0.2.6", path = "./provider", default-features = false } -zoneinfo_rs = { version = "0.1.0", path = "./zoneinfo", default-features = false } +temporal = { version = "0.2.6", path = "./crates/temporal", default-features = false } +timezone_provider = { version = "0.2.6", path = "./crates/provider", default-features = false } +zoneinfo_rs = { version = "0.1.0", path = "./crates/zoneinfo", default-features = false } # Dependencies rustc-hash = "2.1.0" @@ -60,65 +58,3 @@ diplomat-runtime = { version = ">= 0.15.2, < 0.17.0", default-features = false } diplomat = { version = "0.16.0", default-features = false } -[package] -name = "temporal_rs" -keywords = ["date", "time", "calendar", "timezone", "duration"] -categories = ["date-and-time", "internationalization"] -description = "Temporal in Rust is an implementation of the TC39 Temporal Builtin Proposal in Rust." -version.workspace = true -edition.workspace = true -authors.workspace = true -license.workspace = true -repository.workspace = true -rust-version.workspace = true -readme.workspace = true -exclude.workspace = true - -[dependencies] - -core_maths = "0.1.1" -icu_calendar = { workspace = true, features = ["compiled_data"] } -icu_locale_core.workspace = true -ixdtf = { workspace = true, features = ["duration"] } -num-traits.workspace = true -tinystr.workspace = true -writeable.workspace = true - -# log feature -log = { workspace = true, optional = true } - -# tzdb feature -timezone_provider = { workspace = true } - -# System time feature -web-time = { workspace = true, optional = true } -iana-time-zone = { workspace = true, optional = true } -calendrical_calculations = "0.2.4" - -[dev-dependencies] -timezone_provider = { workspace = true, features = ["zoneinfo64", "experimental_tzif"] } -zoneinfo64 = { workspace = true } -resb = "0.1.0" - -[features] -default = ["sys-local"] -log = ["dep:log"] -compiled_data = ["tzdb"] -sys = ["std", "compiled_data", "dep:web-time"] -sys-local = ["sys", "dep:iana-time-zone"] -tzdb = [ - "std", - "timezone_provider/tzif", -] -std = [] -# https://github.com/boa-dev/temporal/issues/613 -# ECMA-conformant implementations must store durations as float64-representable numbers -# Rust users probably should not enable this, unless they wish to match the quirks of JavaScript -float64_representable_durations = [] - -[package.metadata.cargo-all-features] -denylist = ["default"] -max_combination_size = 4 - -[package.metadata.docs.rs] -all-features = true diff --git a/README.md b/README.md index b6453f8f4..19d666de7 100644 --- a/README.md +++ b/README.md @@ -1,29 +1,29 @@ # Temporal in Rust -`temporal_rs` is a Rust date/time library that provides support for calendrical +`temporal` is a Rust date/time library that provides support for calendrical calculations and time zones that is based on the Temporal specification. This implementation aims to be 100% test compliant. While initially developed for [Boa][boa-repo], the crate was split from the engine repository for general Rust usage and vendoring to other ECMAScript implementations. -For more information on `temporal_rs`'s general position in the Rust date/time +For more information on `temporal`'s general position in the Rust date/time library ecoystem or whether we may address your use case, see our [FAQ](./docs/FAQ.md). -Currently, `temporal_rs` is used in Boa, [Kiesel](https://codeberg.org/kiesel-js/kiesel), +Currently, `temporal` is used in Boa, [Kiesel](https://codeberg.org/kiesel-js/kiesel), and [V8](https://v8.dev) for the core functionality of their Temporal built-ins. ## Project overview This project publishes the following crates: -- [`temporal_rs`](https://docs.rs/temporal_rs/latest/temporal_rs/), the core date/time library +- [`temporal`](https://docs.rs/temporal/latest/temporal/), the core date/time library - [`temporal_capi`](https://docs.rs/temporal_capi/latest/temporal_capi/), a FFI crate for C and C++ - [`timezone_provider`](https://docs.rs/timezone_provider/latest/timezone_provider/), a time zone data provider crate - [`zoneinfo_rs`](https://docs.rs/zoneinfo_rs/latest/zoneinfo_rs/), an experimental zoneinfo compiler crate -## Why use temporal_rs? +## Why use temporal? Temporal is a date and time library that is both calendar and time zone aware manner. This means that calendar and time zone support are first class in Temporal. @@ -32,7 +32,7 @@ For instance, converting between calendars is as simple as providing the calenda shown below. ```rust -use temporal_rs::{PlainDate, Calendar}; +use temporal::{PlainDate, Calendar}; use tinystr::tinystr; use core::str::FromStr; @@ -46,15 +46,15 @@ assert_eq!(japanese_date.era_year(), Some(7)); assert_eq!(japanese_date.month(), 3) ``` -Beyond the general calendar use case, temporal_rs has robust support for +Beyond the general calendar use case, `temporal` has robust support for time zones which can generally by applied to a `PlainDate` via [`ZonedDateTime`]. **Important Note:** The below API is enabled with the `compiled_data` feature flag. ```rust -use temporal_rs::{ZonedDateTime, TimeZone}; -use temporal_rs::options::{Disambiguation, OffsetDisambiguation}; +use temporal::{ZonedDateTime, TimeZone}; +use temporal::options::{Disambiguation, OffsetDisambiguation}; let zdt = ZonedDateTime::from_utf8( b"2025-03-01T11:16:10Z[America/Chicago][u-ca=iso8601]", @@ -83,7 +83,7 @@ assert_eq!(zdt_zurich.second(), 10); ## Library Overview -temporal_rs provides 8 core types for working with date and time. The core types are: +`temporal` provides 8 core types for working with date and time. The core types are: - [PlainDate] - [PlainTime] @@ -117,7 +117,7 @@ time. This can then be used to map to any of the above Temporal types. ```rust use core::cmp::Ordering; -use temporal_rs::{Temporal, Calendar, ZonedDateTime}; +use temporal::{Temporal, Calendar, ZonedDateTime}; let current_instant = Temporal::now().instant().unwrap(); let current_zoned_date_time = Temporal::now().zoned_date_time_iso(None).unwrap(); @@ -146,19 +146,19 @@ Ordering::Less ## General design -While temporal_rs can be used in native Rust programs, the library is -- first and +While `temporal` can be used in native Rust programs, the library is -- first and foremost -- designed for use in ECMAScript implementations. This is not to detract -from temporal_rs's use in a native Rust program, but it is important information to +from `temporal`'s use in a native Rust program, but it is important information to understand in order to understand the library's architecture and general API design. -Without default feature flags, temporal_rs is not released with access to the host +Without default feature flags, `temporal` is not released with access to the host environment and it does not embed any time zone data. This is important from an interpreter perspective, because access to the host environment and time zone data comes from the interpreter's agent, not from a dependency. -Instead, temporal_rs provides the [`HostHooks`][host::HostHooks] and [`TimeZoneProvider`][provider::TimeZoneProvider] -traits that can be implemented and provided as function arguments that temporal_rs will -use to access the host system or time zone data. temporal_rs also provides some baseline +Instead, `temporal` provides the [`HostHooks`][host::HostHooks] and [`TimeZoneProvider`][provider::TimeZoneProvider] +traits that can be implemented and provided as function arguments that `temporal` will +use to access the host system or time zone data. `temporal` also provides some baseline implementations of the traits that can be selected from depending on application needs. That being said, this does not mean that everyone must implement their own trait @@ -177,7 +177,7 @@ For instance, let's manually write our [`Now`][now::Now] implementation instead [`Temporal::now()`] with an empty host system implementation. ```rust -use temporal_rs::{Instant, now::Now, host::EmptyHostSystem}; +use temporal::{Instant, now::Now, host::EmptyHostSystem}; // The empty host system is a system implementation HostHooks that always // returns the UNIX_EPOCH and the "+00:00" time zone. @@ -193,7 +193,7 @@ However, even in our above example, we cheated a bit. We were still relying on t but this time without the feature flag. ```rust -use temporal_rs::{Instant, now::Now, host::EmptyHostSystem}; +use temporal::{Instant, now::Now, host::EmptyHostSystem}; use timezone_provider::tzif::CompiledTzdbProvider; let provider = CompiledTzdbProvider::default(); @@ -209,7 +209,7 @@ assert_eq!(now.instant(), Instant::try_new(0)); ``` Now -- pun only partially intended -- we've successfully written a no-default-features -example with temporal_rs! +example with `temporal`! ### What have we learned going over this all this? @@ -221,14 +221,14 @@ provides time zone data for you. Finally, sourcing time zone data is a very scary (but fun!) business. If you're interested in learning more, feel free to check out the `timezone_provider` crate! -With any luck, this also highlights the general design of temporal_rs. It provides a +With any luck, this also highlights the general design of `temporal`. It provides a general usage API that aligns with the Temporal specification while also being flexible enough to provide an power user to take control of their host system access and time zone data sourcing as needed. ## Formatting -temporal_rs adheres to Temporal grammar, which is a strict version of +`temporal` adheres to Temporal grammar, which is a strict version of [RFC9557's IXDTF][ixdtf]. RFC9557 is an update to RFC3339 that adds extensions to the format. @@ -269,12 +269,12 @@ information. -The `temporal_rs`'s current conformance results can be viewed on Boa's +The `temporal`'s current conformance results can be viewed on Boa's [test262 conformance page](https://boajs.dev/conformance). ## FFI -`temporal_rs` currently has bindings for C++, available via the +`temporal` currently has bindings for C++, available via the `temporal_capi` crate. ## Communication diff --git a/provider/Cargo.toml b/crates/provider/Cargo.toml similarity index 100% rename from provider/Cargo.toml rename to crates/provider/Cargo.toml diff --git a/provider/LICENSE-Apache b/crates/provider/LICENSE-Apache similarity index 100% rename from provider/LICENSE-Apache rename to crates/provider/LICENSE-Apache diff --git a/provider/LICENSE-MIT b/crates/provider/LICENSE-MIT similarity index 100% rename from provider/LICENSE-MIT rename to crates/provider/LICENSE-MIT diff --git a/crates/provider/README.md b/crates/provider/README.md new file mode 100644 index 000000000..c43030b98 --- /dev/null +++ b/crates/provider/README.md @@ -0,0 +1,63 @@ +# Time zone providers + + + +Providers for time zone data + +Let's talk about time zone data everyone! + +At a high level, the `timezone_provider` crate provides a set of traits along with a few +implementations of those traits. The general intention here is to make providing time zone +data as agnostic and easy as possible. + +This crate is fairly "low level" at least as far as date and time needs are concerned. So +we'll cover the basic overview of the trait and some of the general implementations of +those traits, and then we will go on a bit further of a dive for the power users that +are interested in implementing their own provider or is just really curious about what +is going on. + +### Available providers + +Below is a list of currently available time zone providers. + +- `ZoneInfo64TzdbProvider`: a provider using ICU4C's zoneinfo64 resource bundle (enable with `zoneinfo64` features flag) +- `FsTzdbProvider`: a provider that reads and parses tzdata at runtime from the host file system's + TZif files (enable with `tzif` feature flag) +- `CompiledTzdbProvider`: a provider that reads and parses tzdata at runtime from TZifs compiled + into the application (enable with `tzif` feature flag) +- `ZeroCompiledTzdbProvider`: a provider that deserializes time zone data from TZifs compiled + into the application (enable with `experimental_tzif` feature flag) + +### Time zone provider traits + +This crate provides three primary traits for working with time zone data. + +- [`TimeZoneProvider`][crate::provider::TimeZoneProvider] +- [`TimeZoneNormalizer`][crate::provider::TimeZoneNormalizer] +- [`TimeZoneResolver`][crate::provider::TimeZoneResolver] + +The first trait `TimeZoneProvider` is the primary interface for a time zone provider used by `temporal`. + +Meanwhile, the two other traits, `TimeZoneNormalizer` and `TimeZoneResolver`, are secondary +traits that can be used to implement the core `TimeZoneProvider`. Once implemented, this +crate providers a default type for creating a `TimeZoneProvider` by mixing and matching objects that implement the secondary +traits, `NormalizerAndResolver`. + +#### Why two secondary traits? + +Well that's because `TimeZoneProvider` handles two different concerns: fetching and +formatting normalized and canonicalized time zone identifiers, and resolving time +zone data requests. This functionality typically requires two different sets of data, +each of which may be in a variety of formats. + +#### Why not just have the two secondary traits without `TimeZoneProvider`? + +Well while the functionality typically requires two sets of data. Those sets are not +necessarily completely unique. The time zone database updates potentially multiple times a +year so having your formatting in 2025a while your data is in 2025b could cause some +desync. So in order to better represent this `TimeZoneProvider` is used on top of them. + +**NOTE:** you CAN always just directly use `TimeZoneNormalizer` and +`TimeZoneResolver` together if you want. We just wouldn't recommemnd it. + + diff --git a/provider/src/common.rs b/crates/provider/src/common.rs similarity index 100% rename from provider/src/common.rs rename to crates/provider/src/common.rs diff --git a/provider/src/data/compiled_zoneinfo_provider.rs.data b/crates/provider/src/data/compiled_zoneinfo_provider.rs.data similarity index 99% rename from provider/src/data/compiled_zoneinfo_provider.rs.data rename to crates/provider/src/data/compiled_zoneinfo_provider.rs.data index c6d62f370..eabdabfb0 100644 --- a/provider/src/data/compiled_zoneinfo_provider.rs.data +++ b/crates/provider/src/data/compiled_zoneinfo_provider.rs.data @@ -1,5 +1,5 @@ //@generated -// (by `bakeddata` binary in temporal_rs, using `databake`) +// (by the `bakeddata` tool, using `databake`) #[macro_export] macro_rules! compiled_zoneinfo_provider { diff --git a/provider/src/data/iana_normalizer.rs.data b/crates/provider/src/data/iana_normalizer.rs.data similarity index 99% rename from provider/src/data/iana_normalizer.rs.data rename to crates/provider/src/data/iana_normalizer.rs.data index 67d36e37f..471af5797 100644 --- a/provider/src/data/iana_normalizer.rs.data +++ b/crates/provider/src/data/iana_normalizer.rs.data @@ -1,5 +1,5 @@ //@generated -// (by `bakeddata` binary in temporal_rs, using `databake`) +// (by the `bakeddata` tool, using `databake`) #[macro_export] macro_rules! iana_normalizer_singleton { diff --git a/provider/src/data/mod.rs b/crates/provider/src/data/mod.rs similarity index 100% rename from provider/src/data/mod.rs rename to crates/provider/src/data/mod.rs diff --git a/provider/src/epoch_nanoseconds.rs b/crates/provider/src/epoch_nanoseconds.rs similarity index 100% rename from provider/src/epoch_nanoseconds.rs rename to crates/provider/src/epoch_nanoseconds.rs diff --git a/provider/src/error.rs b/crates/provider/src/error.rs similarity index 100% rename from provider/src/error.rs rename to crates/provider/src/error.rs diff --git a/provider/src/experimental_tzif/datagen.rs b/crates/provider/src/experimental_tzif/datagen.rs similarity index 100% rename from provider/src/experimental_tzif/datagen.rs rename to crates/provider/src/experimental_tzif/datagen.rs diff --git a/provider/src/experimental_tzif/mod.rs b/crates/provider/src/experimental_tzif/mod.rs similarity index 100% rename from provider/src/experimental_tzif/mod.rs rename to crates/provider/src/experimental_tzif/mod.rs diff --git a/provider/src/experimental_tzif/posix.rs b/crates/provider/src/experimental_tzif/posix.rs similarity index 100% rename from provider/src/experimental_tzif/posix.rs rename to crates/provider/src/experimental_tzif/posix.rs diff --git a/provider/src/experimental_tzif/provider.rs b/crates/provider/src/experimental_tzif/provider.rs similarity index 100% rename from provider/src/experimental_tzif/provider.rs rename to crates/provider/src/experimental_tzif/provider.rs diff --git a/crates/provider/src/lib.rs b/crates/provider/src/lib.rs new file mode 100644 index 000000000..469627a6e --- /dev/null +++ b/crates/provider/src/lib.rs @@ -0,0 +1,144 @@ +//! Providers for time zone data +//! +//! Let's talk about time zone data everyone! +//! +//! At a high level, the `timezone_provider` crate provides a set of traits along with a few +//! implementations of those traits. The general intention here is to make providing time zone +//! data as agnostic and easy as possible. +//! +//! This crate is fairly "low level" at least as far as date and time needs are concerned. So +//! we'll cover the basic overview of the trait and some of the general implementations of +//! those traits, and then we will go on a bit further of a dive for the power users that +//! are interested in implementing their own provider or is just really curious about what +//! is going on. +//! +//! ## Available providers +//! +//! Below is a list of currently available time zone providers. +//! +//! - `ZoneInfo64TzdbProvider`: a provider using ICU4C's zoneinfo64 resource bundle (enable with `zoneinfo64` features flag) +//! - `FsTzdbProvider`: a provider that reads and parses tzdata at runtime from the host file system's +//! TZif files (enable with `tzif` feature flag) +//! - `CompiledTzdbProvider`: a provider that reads and parses tzdata at runtime from TZifs compiled +//! into the application (enable with `tzif` feature flag) +//! - `ZeroCompiledTzdbProvider`: a provider that deserializes time zone data from TZifs compiled +//! into the application (enable with `experimental_tzif` feature flag) +//! +//! ## Time zone provider traits +//! +//! This crate provides three primary traits for working with time zone data. +//! +//! - [`TimeZoneProvider`][crate::provider::TimeZoneProvider] +//! - [`TimeZoneNormalizer`][crate::provider::TimeZoneNormalizer] +//! - [`TimeZoneResolver`][crate::provider::TimeZoneResolver] +//! +//! The first trait `TimeZoneProvider` is the primary interface for a time zone provider used by `temporal`. +//! +//! Meanwhile, the two other traits, `TimeZoneNormalizer` and `TimeZoneResolver`, are secondary +//! traits that can be used to implement the core `TimeZoneProvider`. Once implemented, this +//! crate providers a default type for creating a `TimeZoneProvider` by mixing and matching objects that implement the secondary +//! traits, `NormalizerAndResolver`. +//! +//! ### Why two secondary traits? +//! +//! Well that's because `TimeZoneProvider` handles two different concerns: fetching and +//! formatting normalized and canonicalized time zone identifiers, and resolving time +//! zone data requests. This functionality typically requires two different sets of data, +//! each of which may be in a variety of formats. +//! +//! ### Why not just have the two secondary traits without `TimeZoneProvider`? +//! +//! Well while the functionality typically requires two sets of data. Those sets are not +//! necessarily completely unique. The time zone database updates potentially multiple times a +//! year so having your formatting in 2025a while your data is in 2025b could cause some +//! desync. So in order to better represent this `TimeZoneProvider` is used on top of them. +//! +//! **NOTE:** you CAN always just directly use `TimeZoneNormalizer` and +//! `TimeZoneResolver` together if you want. We just wouldn't recommemnd it. +//! + +#![no_std] +#![cfg_attr( + not(test), + warn(clippy::unwrap_used, clippy::expect_used, clippy::indexing_slicing) +)] + +extern crate alloc; + +#[cfg(feature = "std")] +extern crate std; + +#[macro_use] +mod private { + include!("./data/mod.rs"); +} + +mod tzdb; +pub use tzdb::{CompiledNormalizer, IanaIdentifierNormalizer}; + +#[cfg(feature = "tzif")] +pub mod tzif; + +#[cfg(feature = "experimental_tzif")] +pub mod experimental_tzif; + +#[cfg(feature = "zoneinfo64")] +pub mod zoneinfo64; + +pub mod epoch_nanoseconds; + +#[cfg(any(feature = "tzif", feature = "experimental_tzif"))] +pub(crate) mod common; + +#[doc(hidden)] +pub mod utils; + +mod error; +pub mod provider; +pub use error::TimeZoneProviderError; + +use crate as timezone_provider; +iana_normalizer_singleton!(SINGLETON_IANA_NORMALIZER); + +#[cfg(test)] +mod tests { + extern crate alloc; + use super::SINGLETON_IANA_NORMALIZER; + + #[test] + fn basic_normalization() { + let index = SINGLETON_IANA_NORMALIZER + .available_id_index + .get("America/CHICAGO") + .unwrap(); + assert_eq!( + SINGLETON_IANA_NORMALIZER.normalized_identifiers.get(index), + Some("America/Chicago") + ); + + let index = SINGLETON_IANA_NORMALIZER + .available_id_index + .get("uTc") + .unwrap(); + assert_eq!( + SINGLETON_IANA_NORMALIZER.normalized_identifiers.get(index), + Some("UTC") + ); + + let index = SINGLETON_IANA_NORMALIZER + .available_id_index + .get("eTC/uTc") + .unwrap(); + assert_eq!( + SINGLETON_IANA_NORMALIZER.normalized_identifiers.get(index), + Some("Etc/UTC") + ); + } + + #[test] + #[cfg(feature = "experimental_tzif")] + fn zone_info_basic() { + let tzif = crate::experimental_tzif::COMPILED_ZONEINFO_PROVIDER.get("America/Chicago"); + assert!(tzif.is_some()) + } +} diff --git a/provider/src/provider.rs b/crates/provider/src/provider.rs similarity index 100% rename from provider/src/provider.rs rename to crates/provider/src/provider.rs diff --git a/provider/src/tzdb.rs b/crates/provider/src/tzdb.rs similarity index 99% rename from provider/src/tzdb.rs rename to crates/provider/src/tzdb.rs index 96556b5d9..2ee636568 100644 --- a/provider/src/tzdb.rs +++ b/crates/provider/src/tzdb.rs @@ -1,4 +1,4 @@ -//! `timezone_provider` is the core data provider implementations for `temporal_rs` +//! `timezone_provider` is the core data provider implementations for `temporal` // What are we even doing here? Why are providers needed? // diff --git a/provider/src/tzdb/cldr_test.rs b/crates/provider/src/tzdb/cldr_test.rs similarity index 100% rename from provider/src/tzdb/cldr_test.rs rename to crates/provider/src/tzdb/cldr_test.rs diff --git a/provider/src/tzdb/datagen.rs b/crates/provider/src/tzdb/datagen.rs similarity index 100% rename from provider/src/tzdb/datagen.rs rename to crates/provider/src/tzdb/datagen.rs diff --git a/provider/src/tzif.rs b/crates/provider/src/tzif.rs similarity index 99% rename from provider/src/tzif.rs rename to crates/provider/src/tzif.rs index e6236695c..2ea606cca 100644 --- a/provider/src/tzif.rs +++ b/crates/provider/src/tzif.rs @@ -1686,7 +1686,7 @@ mod tests { ); } - // This test mimicks the operations present in `temporal_rs`'s `disambiguate_possible_epoch_nanoseconds` + // This test mimicks the operations present in `temporal`'s `disambiguate_possible_epoch_nanoseconds` #[test] fn disambiguate_ambiguous_posix_time() { let provider = CompiledTzdbProvider::default(); diff --git a/provider/src/utc.rs b/crates/provider/src/utc.rs similarity index 100% rename from provider/src/utc.rs rename to crates/provider/src/utc.rs diff --git a/provider/src/utils.rs b/crates/provider/src/utils.rs similarity index 100% rename from provider/src/utils.rs rename to crates/provider/src/utils.rs diff --git a/provider/src/utils/neri_schneider.rs b/crates/provider/src/utils/neri_schneider.rs similarity index 100% rename from provider/src/utils/neri_schneider.rs rename to crates/provider/src/utils/neri_schneider.rs diff --git a/provider/src/zoneinfo64.rs b/crates/provider/src/zoneinfo64.rs similarity index 100% rename from provider/src/zoneinfo64.rs rename to crates/provider/src/zoneinfo64.rs diff --git a/crates/temporal/Cargo.toml b/crates/temporal/Cargo.toml new file mode 100644 index 000000000..dde03aa05 --- /dev/null +++ b/crates/temporal/Cargo.toml @@ -0,0 +1,62 @@ +[package] +name = "temporal" +keywords = ["date", "time", "calendar", "timezone", "duration"] +categories = ["date-and-time", "internationalization"] +description = "Temporal in Rust is an implementation of the TC39 Temporal Builtin Proposal in Rust." +version.workspace = true +edition.workspace = true +authors.workspace = true +license.workspace = true +repository.workspace = true +rust-version.workspace = true +readme.workspace = true +exclude.workspace = true + +[dependencies] + +core_maths = "0.1.1" +icu_calendar = { workspace = true, features = ["compiled_data"] } +icu_locale_core.workspace = true +ixdtf = { workspace = true, features = ["duration"] } +num-traits.workspace = true +tinystr.workspace = true +writeable.workspace = true + +# log feature +log = { workspace = true, optional = true } + +# tzdb feature +timezone_provider = { workspace = true } + +# System time feature +web-time = { workspace = true, optional = true } +iana-time-zone = { workspace = true, optional = true } +calendrical_calculations = "0.2.4" + +[dev-dependencies] +timezone_provider = { workspace = true, features = ["zoneinfo64", "experimental_tzif"] } +zoneinfo64 = { workspace = true } +resb = "0.1.0" + +[features] +default = ["sys-local"] +log = ["dep:log"] +compiled_data = ["tzdb"] +sys = ["std", "compiled_data", "dep:web-time"] +sys-local = ["sys", "dep:iana-time-zone"] +tzdb = [ + "std", + "timezone_provider/tzif", +] +std = [] +# https://github.com/boa-dev/temporal/issues/613 +# ECMA-conformant implementations must store durations as float64-representable numbers +# Rust users probably should not enable this, unless they wish to match the quirks of JavaScript +float64_representable_durations = [] + +[package.metadata.cargo-all-features] +denylist = ["default"] +max_combination_size = 4 + +[package.metadata.docs.rs] +all-features = true diff --git a/src/builtins/compiled/duration.rs b/crates/temporal/src/builtins/compiled/duration.rs similarity index 100% rename from src/builtins/compiled/duration.rs rename to crates/temporal/src/builtins/compiled/duration.rs diff --git a/src/builtins/compiled/duration/tests.rs b/crates/temporal/src/builtins/compiled/duration/tests.rs similarity index 100% rename from src/builtins/compiled/duration/tests.rs rename to crates/temporal/src/builtins/compiled/duration/tests.rs diff --git a/src/builtins/compiled/instant.rs b/crates/temporal/src/builtins/compiled/instant.rs similarity index 100% rename from src/builtins/compiled/instant.rs rename to crates/temporal/src/builtins/compiled/instant.rs diff --git a/src/builtins/compiled/mod.rs b/crates/temporal/src/builtins/compiled/mod.rs similarity index 100% rename from src/builtins/compiled/mod.rs rename to crates/temporal/src/builtins/compiled/mod.rs diff --git a/src/builtins/compiled/now.rs b/crates/temporal/src/builtins/compiled/now.rs similarity index 100% rename from src/builtins/compiled/now.rs rename to crates/temporal/src/builtins/compiled/now.rs diff --git a/src/builtins/compiled/plain_date.rs b/crates/temporal/src/builtins/compiled/plain_date.rs similarity index 100% rename from src/builtins/compiled/plain_date.rs rename to crates/temporal/src/builtins/compiled/plain_date.rs diff --git a/src/builtins/compiled/plain_date_time.rs b/crates/temporal/src/builtins/compiled/plain_date_time.rs similarity index 100% rename from src/builtins/compiled/plain_date_time.rs rename to crates/temporal/src/builtins/compiled/plain_date_time.rs diff --git a/src/builtins/compiled/plain_month_day.rs b/crates/temporal/src/builtins/compiled/plain_month_day.rs similarity index 100% rename from src/builtins/compiled/plain_month_day.rs rename to crates/temporal/src/builtins/compiled/plain_month_day.rs diff --git a/src/builtins/compiled/plain_year_month.rs b/crates/temporal/src/builtins/compiled/plain_year_month.rs similarity index 100% rename from src/builtins/compiled/plain_year_month.rs rename to crates/temporal/src/builtins/compiled/plain_year_month.rs diff --git a/src/builtins/compiled/zoned_date_time.rs b/crates/temporal/src/builtins/compiled/zoned_date_time.rs similarity index 100% rename from src/builtins/compiled/zoned_date_time.rs rename to crates/temporal/src/builtins/compiled/zoned_date_time.rs diff --git a/crates/temporal/src/builtins/core/calendar.rs b/crates/temporal/src/builtins/core/calendar.rs new file mode 100644 index 000000000..58c22f865 --- /dev/null +++ b/crates/temporal/src/builtins/core/calendar.rs @@ -0,0 +1,1071 @@ +//! This module implements the calendar traits and related components. +//! +//! The goal of the calendar module of `boa_temporal` is to provide +//! Temporal compatible calendar implementations. + +use crate::{ + builtins::core::{ + duration::DateDuration, Duration, PlainDate, PlainDateTime, PlainMonthDay, PlainYearMonth, + }, + error::ErrorMessage, + iso::IsoDate, + options::{Overflow, Unit}, + parsers::parse_allowed_calendar_formats, + TemporalError, TemporalResult, +}; +use core::str::FromStr; + +use icu_calendar::{ + cal::{ + Buddhist, ChineseTraditional, Coptic, Ethiopian, EthiopianEraStyle, Hebrew, Hijri, Indian, + Japanese, KoreanTraditional, Persian, Roc, + }, + AnyCalendar, AnyCalendarKind, Calendar as IcuCalendar, Iso, Ref, +}; +use icu_calendar::{ + cal::{HijriTabularEpoch, HijriTabularLeapYears}, + options::DateDurationUnit as IcuUnit, + options::{ + DateAddOptions, DateDifferenceOptions, DateFromFieldsOptions, MissingFieldsStrategy, + Overflow as IcuOverflow, + }, + preferences::CalendarAlgorithm, + types::DateDuration as IcuDateDuration, + types::DateFields, + Gregorian, +}; +use icu_locale_core::extensions::unicode::Value; +use tinystr::TinyAsciiStr; + +use super::ZonedDateTime; + +mod fields; +mod types; + +pub use fields::{CalendarFields, YearMonthCalendarFields}; +#[cfg(test)] +pub(crate) use types::month_to_month_code; +pub(crate) use types::ResolutionType; +pub use types::{MonthCode, ResolvedIsoFields}; + +/// The core `Calendar` type for `temporal` +/// +/// A `Calendar` in `temporal` can be any calendar that is currently +/// supported by [`icu_calendar`]. +#[derive(Debug, Clone)] +pub struct Calendar(Ref<'static, AnyCalendar>); + +impl Default for Calendar { + fn default() -> Self { + Self::ISO + } +} + +impl PartialEq for Calendar { + fn eq(&self, other: &Self) -> bool { + self.identifier() == other.identifier() + } +} + +impl Eq for Calendar {} + +impl Calendar { + /// The Buddhist calendar + pub const BUDDHIST: Self = Self::new(AnyCalendarKind::Buddhist); + /// The Chinese calendar + pub const CHINESE: Self = Self::new(AnyCalendarKind::Chinese); + /// The Coptic calendar + pub const COPTIC: Self = Self::new(AnyCalendarKind::Coptic); + /// The Dangi calendar + pub const DANGI: Self = Self::new(AnyCalendarKind::Dangi); + /// The Ethiopian calendar + pub const ETHIOPIAN: Self = Self::new(AnyCalendarKind::Ethiopian); + /// The Ethiopian Amete Alem calendar + pub const ETHIOPIAN_AMETE_ALEM: Self = Self::new(AnyCalendarKind::EthiopianAmeteAlem); + /// The Gregorian calendar + pub const GREGORIAN: Self = Self::new(AnyCalendarKind::Gregorian); + /// The Hebrew calendar + pub const HEBREW: Self = Self::new(AnyCalendarKind::Hebrew); + /// The Indian calendar + pub const INDIAN: Self = Self::new(AnyCalendarKind::Indian); + /// The Hijri Tabular calendar with a Friday epoch + pub const HIJRI_TABULAR_FRIDAY: Self = Self::new(AnyCalendarKind::HijriTabularTypeIIFriday); + /// The Hijri Tabular calendar with a Thursday epoch + pub const HIJRI_TABULAR_THURSDAY: Self = Self::new(AnyCalendarKind::HijriTabularTypeIIThursday); + /// The Hijri Umm al-Qura calendar + pub const HIJRI_UMM_AL_QURA: Self = Self::new(AnyCalendarKind::HijriUmmAlQura); + /// The ISO 8601 calendar + pub const ISO: Self = Self::new(AnyCalendarKind::Iso); + /// The Japanese calendar + pub const JAPANESE: Self = Self::new(AnyCalendarKind::Japanese); + /// The Persian calendar + pub const PERSIAN: Self = Self::new(AnyCalendarKind::Persian); + /// The ROC calendar + pub const ROC: Self = Self::new(AnyCalendarKind::Roc); + + /// Create a `Calendar` from an ICU [`AnyCalendarKind`]. + #[warn(clippy::wildcard_enum_match_arm)] // Warns if the calendar kind gets out of sync. + pub const fn new(kind: AnyCalendarKind) -> Self { + let cal = match kind { + AnyCalendarKind::Buddhist => &AnyCalendar::Buddhist(Buddhist), + AnyCalendarKind::Chinese => const { &AnyCalendar::Chinese(ChineseTraditional::new()) }, + AnyCalendarKind::Coptic => &AnyCalendar::Coptic(Coptic), + AnyCalendarKind::Dangi => const { &AnyCalendar::Dangi(KoreanTraditional::new()) }, + AnyCalendarKind::Ethiopian => { + const { + &AnyCalendar::Ethiopian(Ethiopian::new_with_era_style( + EthiopianEraStyle::AmeteMihret, + )) + } + } + AnyCalendarKind::EthiopianAmeteAlem => { + const { + &AnyCalendar::Ethiopian(Ethiopian::new_with_era_style( + EthiopianEraStyle::AmeteAlem, + )) + } + } + AnyCalendarKind::Gregorian => &AnyCalendar::Gregorian(Gregorian), + AnyCalendarKind::Hebrew => &AnyCalendar::Hebrew(Hebrew), + AnyCalendarKind::Indian => &AnyCalendar::Indian(Indian), + AnyCalendarKind::HijriTabularTypeIIFriday => { + const { + &AnyCalendar::HijriTabular(Hijri::new_tabular( + HijriTabularLeapYears::TypeII, + HijriTabularEpoch::Friday, + )) + } + } + AnyCalendarKind::HijriSimulatedMecca => { + // This calendar is currently unsupported by Temporal + &AnyCalendar::Iso(Iso) + } + AnyCalendarKind::HijriTabularTypeIIThursday => { + const { + &AnyCalendar::HijriTabular(Hijri::new_tabular( + HijriTabularLeapYears::TypeII, + HijriTabularEpoch::Thursday, + )) + } + } + AnyCalendarKind::HijriUmmAlQura => { + const { &AnyCalendar::HijriUmmAlQura(Hijri::new_umm_al_qura()) } + } + AnyCalendarKind::Iso => &AnyCalendar::Iso(Iso), + #[allow( + deprecated, + reason = "need to match on JapaneseExtended for exhaustiveness" + )] + AnyCalendarKind::Japanese | AnyCalendarKind::JapaneseExtended => { + const { &AnyCalendar::Japanese(Japanese::new()) } + } + AnyCalendarKind::Persian => &AnyCalendar::Persian(Persian), + AnyCalendarKind::Roc => &AnyCalendar::Roc(Roc), + _ => { + debug_assert!( + false, + "Unreachable: match must handle all variants of `AnyCalendarKind`" + ); + &AnyCalendar::Iso(Iso) + } + }; + + Self(Ref(cal)) + } + + /// Returns a `Calendar` from the a slice of UTF-8 encoded bytes. + pub fn try_from_utf8(bytes: &[u8]) -> TemporalResult { + let kind = Self::try_kind_from_utf8(bytes)?; + Ok(Self::new(kind)) + } + + /// Returns a `Calendar` from the a slice of UTF-8 encoded bytes. + pub(crate) fn try_kind_from_utf8(bytes: &[u8]) -> TemporalResult { + // TODO: Determine the best way to handle "julian" here. + // Not supported by `CalendarAlgorithm` + let icu_locale_value = Value::try_from_utf8(&bytes.to_ascii_lowercase()) + .map_err(|_| TemporalError::range().with_message("unknown calendar"))?; + let algorithm = CalendarAlgorithm::try_from(&icu_locale_value) + .map_err(|_| TemporalError::range().with_message("unknown calendar"))?; + let calendar_kind = match AnyCalendarKind::try_from(algorithm) { + Ok(c) => c, + // Handle `islamic` calendar idenitifier. + // + // This should be updated depending on `icu_calendar` support and + // intl-era-monthcode. + Err(()) if algorithm == CalendarAlgorithm::Hijri(None) => { + AnyCalendarKind::HijriTabularTypeIIFriday + } + Err(()) => return Err(TemporalError::range().with_message("unknown calendar")), + }; + Ok(calendar_kind) + } +} + +impl FromStr for Calendar { + type Err = TemporalError; + + // 13.34 ParseTemporalCalendarString ( string ) + fn from_str(s: &str) -> Result { + match parse_allowed_calendar_formats(s.as_bytes()) { + Some([]) => Ok(Calendar::ISO), + Some(result) => Calendar::try_from_utf8(result), + None => Calendar::try_from_utf8(s.as_bytes()), + } + } +} + +impl From for IcuOverflow { + fn from(other: Overflow) -> Self { + match other { + Overflow::Reject => Self::Reject, + Overflow::Constrain => Self::Constrain, + } + } +} + +impl TryFrom for IcuUnit { + type Error = TemporalError; + fn try_from(other: Unit) -> TemporalResult { + Ok(match other { + Unit::Day => IcuUnit::Days, + Unit::Week => IcuUnit::Weeks, + Unit::Month => IcuUnit::Months, + Unit::Year => IcuUnit::Years, + _ => { + return Err(TemporalError::r#type() + .with_message("Found time unit when computing CalendarDateUntil.")) + } + }) + } +} + +impl<'a> TryFrom<&'a CalendarFields> for DateFields<'a> { + type Error = TemporalError; + fn try_from(other: &'a CalendarFields) -> TemporalResult { + let mut this = DateFields::default(); + this.era = other.era.as_ref().map(|o| o.as_bytes()); + this.era_year = other.era_year; + this.extended_year = other.year; + this.month_code = other.month_code.as_ref().map(|o| o.0.as_bytes()); + this.ordinal_month = other.month; + this.day = other.day; + Ok(this) + } +} + +/// See +/// +/// We don't want to trigger any pathological or panicky testcases in ICU4X. +/// +/// To aid in that, we early constrain date durations to things that have no hope of producing a datetime +/// that is within Temporal range. +fn early_constrain_date_duration(duration: &IcuDateDuration) -> Result<(), TemporalError> { + // Temporal range is -271821-04-20 to +275760-09-13 + // This is (roughly) the maximum year duration that can exist for ISO + const TEMPORAL_MAX_ISO_YEAR_DURATION: u32 = 275760 + 271821; + // Double it. No calendar has years that are half the size of ISO years. + const YEAR_DURATION: u32 = 2 * TEMPORAL_MAX_ISO_YEAR_DURATION; + // Assume every year is a leap year, calculate a month range + const MONTH_DURATION: u32 = YEAR_DURATION * 13; + // Our longest year is 390 days + const DAY_DURATION: u32 = YEAR_DURATION * 390; + const WEEK_DURATION: u32 = DAY_DURATION / 7; + + let err = Err(TemporalError::range().with_enum(ErrorMessage::IntermediateDateTimeOutOfRange)); + + if duration.years > YEAR_DURATION { + return err; + } + if duration.months > MONTH_DURATION { + return err; + } + if duration.weeks > WEEK_DURATION { + return err; + } + if duration.days > DAY_DURATION { + return err; + } + + Ok(()) +} + +// ==== Public `CalendarSlot` methods ==== + +impl Calendar { + /// Returns whether the current calendar is `ISO` + #[inline] + pub fn is_iso(&self) -> bool { + matches!(self.0 .0, AnyCalendar::Iso(_)) + } + + /// Returns the kind of this calendar + #[inline] + pub fn kind(&self) -> AnyCalendarKind { + self.0 .0.kind() + } + + /// `CalendarDateFromFields` + pub fn date_from_fields( + &self, + fields: CalendarFields, + overflow: Overflow, + ) -> TemporalResult { + if self.is_iso() { + let resolved_fields = + ResolvedIsoFields::try_from_fields(&fields, overflow, ResolutionType::Date)?; + + // Resolve month and monthCode; + return PlainDate::new_with_overflow( + resolved_fields.arithmetic_year, + resolved_fields.month, + resolved_fields.day, + self.clone(), + overflow, + ); + } + + let fields = DateFields::try_from(&fields)?; + let mut options = DateFromFieldsOptions::default(); + options.overflow = Some(overflow.into()); + options.missing_fields_strategy = Some(MissingFieldsStrategy::Reject); + + let calendar_date = self.0.from_fields(fields, options)?; + let iso = self.0.to_iso(&calendar_date); + PlainDate::new_with_overflow( + Iso.extended_year(&iso), + Iso.month(&iso).ordinal, + Iso.day_of_month(&iso).0, + self.clone(), + overflow, + ) + } + + /// `CalendarPlainMonthDayFromFields` + pub fn month_day_from_fields( + &self, + mut fields: CalendarFields, + overflow: Overflow, + ) -> TemporalResult { + // You are allowed to specify year information, however + // it is *only* used for resolving the given month/day data. + // + // For example, constructing a PlainMonthDay for {year: 2025, month: 2, day: 29} + // with overflow: constrain will produce 02-28 since it will constrain + // the date to 2025-02-28 first, and only *then* will it construct an MD. + if fields.year.is_some() || (fields.era.is_some() && fields.era_year.is_some()) { + // The ISO case is specified in + // It does not perform any range checks, arbitrarily large year values can be used. + if self.is_iso() { + let resolved = ResolvedIsoFields::try_from_fields( + &fields, + overflow, + ResolutionType::MonthDayWithYear, + )?; + fields = CalendarFields { + year: Some(1972), + month: Some(resolved.month), + day: Some(resolved.day), + ..Default::default() + }; + } else { + // The non-ISO case is specified in + // + let date_fields = DateFields::try_from(&fields)?; + { + // This algorithm requires an early-check to ensure the year is *somewhat* valid: + // > b. If there exists no combination of inputs such that ! CalendarIntegersToISO(calendar, fields.[[Year]], ..., ...) would + // return an ISO Date Record isoDate for which ISODateWithinLimits(isoDate) is true, throw a RangeError exception. + + // We do this by using constrain with minimal and maximal month-day values to try and + // see if either is in the ISO year range. + // + // This is complicated, it would be nice to not have to do this: + let mut options = DateFromFieldsOptions::default(); + options.overflow = Some(IcuOverflow::Constrain); + options.missing_fields_strategy = Some(MissingFieldsStrategy::Reject); + + let mut fields_min = fields.clone(); + let mut fields_max = fields.clone(); + fields_min.month = Some(1); + fields_max.month = Some(15); + fields_min.month_code = None; + fields_max.month_code = None; + fields_min.day = Some(1); + fields_max.day = Some(40); + let fields_min = DateFields::try_from(&fields_min)?; + let fields_max = DateFields::try_from(&fields_max)?; + let date_min = self.0.from_fields(fields_min, options)?; + let date_max = self.0.from_fields(fields_max, options)?; + let iso_min = IsoDate::from_icu4x(self.0.to_iso(&date_min)); + let iso_max = IsoDate::from_icu4x(self.0.to_iso(&date_max)); + + // If *both* are an error, then no date in this year maps to the ISO year range. + if iso_min.check_within_limits().is_err() + && iso_max.check_within_limits().is_err() + { + return Err(TemporalError::range().with_enum(ErrorMessage::DateOutOfRange)); + } + } + let mut options = DateFromFieldsOptions::default(); + options.overflow = Some(overflow.into()); + options.missing_fields_strategy = Some(MissingFieldsStrategy::Reject); + let calendar_date = self.0.from_fields(date_fields, options)?; + + fields = CalendarFields { + month_code: Some(MonthCode(self.0.month(&calendar_date).to_input().code().0)), + day: Some(self.0.day_of_month(&calendar_date).0), + ..Default::default() + }; + } + } + if self.is_iso() { + let resolved_fields = + ResolvedIsoFields::try_from_fields(&fields, overflow, ResolutionType::MonthDay)?; + return PlainMonthDay::new_with_overflow( + resolved_fields.month, + resolved_fields.day, + self.clone(), + overflow, + None, + ); + } + + let fields = DateFields::try_from(&fields)?; + let mut options = DateFromFieldsOptions::default(); + options.overflow = Some(overflow.into()); + if fields.day.is_none() { + // Otherwise we're liable to hit the YearMonth resolution + return Err(TemporalError::r#type().with_message("Must specify day for MonthDay")); + } + options.missing_fields_strategy = Some(MissingFieldsStrategy::Ecma); + + let mut calendar_date = self.0.from_fields(fields, options)?; + + // The MonthDay algorithm wants us to resolve a date *with* the provided year, + // if one was provided, but then use a reference year afterwards. + // So if a year was provided, we reresolve. + if fields.era_year.is_some() || fields.extended_year.is_some() { + let mut fields2 = DateFields::default(); + fields2.day = Some(self.0.day_of_month(&calendar_date).0); + let code = self.0.month(&calendar_date).to_input().code(); + fields2.month_code = Some(code.0.as_bytes()); + + calendar_date = self.0.from_fields(fields2, options)?; + } + + let iso = self.0.to_iso(&calendar_date); + PlainMonthDay::new_with_overflow( + Iso.month(&iso).ordinal, + Iso.day_of_month(&iso).0, + self.clone(), + overflow, + Some(Iso.extended_year(&iso)), + ) + } + + /// `CalendarPlainYearMonthFromFields` + pub fn year_month_from_fields( + &self, + fields: YearMonthCalendarFields, + overflow: Overflow, + ) -> TemporalResult { + if self.is_iso() { + // TODO: add a from_partial_year_month method on ResolvedCalendarFields + let resolved_fields = ResolvedIsoFields::try_from_fields( + &CalendarFields::from(fields), + overflow, + ResolutionType::YearMonth, + )?; + return PlainYearMonth::new_with_overflow( + resolved_fields.arithmetic_year, + resolved_fields.month, + Some(resolved_fields.day), + self.clone(), + overflow, + ); + } + + let fields = CalendarFields::from(fields); + let fields = DateFields::try_from(&fields)?; + let mut options = DateFromFieldsOptions::default(); + options.overflow = Some(overflow.into()); + if fields.extended_year.is_none() && fields.era_year.is_none() { + // Otherwise we're liable to hit the MonthDay resolution + return Err(TemporalError::r#type().with_message("Must specify year for YearMonth")); + } + options.missing_fields_strategy = Some(MissingFieldsStrategy::Ecma); + let calendar_date = self.0.from_fields(fields, options)?; + let iso = self.0.to_iso(&calendar_date); + PlainYearMonth::new_with_overflow( + Iso.year_info(&iso).year, + Iso.month(&iso).ordinal, + Some(Iso.day_of_month(&iso).0), + self.clone(), + overflow, + ) + } + + /// `CalendarDateAdd` + pub fn date_add( + &self, + date: &IsoDate, + duration: &DateDuration, + overflow: Overflow, + ) -> TemporalResult { + // 1. If calendar is "iso8601", then + if self.is_iso() { + let result = date.add_date_duration(duration, overflow)?; + // 11. Return ? CreateTemporalDate(result.[[Year]], result.[[Month]], result.[[Day]], "iso8601"). + return PlainDate::try_new(result.year, result.month, result.day, self.clone()); + } + + // This should be a valid duration at this point so we can just call .abs() + let invalid = TemporalError::range().with_enum(ErrorMessage::DurationNotValid); + let duration = IcuDateDuration { + is_negative: duration.years < 0 + || duration.months < 0 + || duration.weeks < 0 + || duration.days < 0, + years: u32::try_from(duration.years.abs()).map_err(|_| invalid)?, + months: u32::try_from(duration.months.abs()).map_err(|_| invalid)?, + weeks: u32::try_from(duration.weeks.abs()).map_err(|_| invalid)?, + days: u32::try_from(duration.days.abs()).map_err(|_| invalid)?, + }; + + early_constrain_date_duration(&duration)?; + let mut options = DateAddOptions::default(); + options.overflow = Some(overflow.into()); + let calendar_date = self.0.from_rata_die(date.to_rd()); + + let added = self.0.add(&calendar_date, duration, options)?; + + let iso = self.0.to_iso(&added); + PlainDate::new_with_overflow( + Iso.extended_year(&iso), + Iso.month(&iso).ordinal, + Iso.day_of_month(&iso).0, + self.clone(), + overflow, + ) + } + + /// `CalendarDateUntil` + pub fn date_until( + &self, + one: &IsoDate, + two: &IsoDate, + largest_unit: Unit, + ) -> TemporalResult { + if self.is_iso() { + let date_duration = one.diff_iso_date(two, largest_unit)?; + return Ok(Duration::from(date_duration)); + } + let mut options = DateDifferenceOptions::default(); + options.largest_unit = Some(largest_unit.try_into()?); + let calendar_date1 = self.0.from_rata_die(one.to_rd()); + let calendar_date2 = self.0.from_rata_die(two.to_rd()); + + let added = self.0.until(&calendar_date1, &calendar_date2, options); + + let days = added.days.into(); + let mut duration = DateDuration::new( + added.years.into(), + added.months.into(), + added.weeks.into(), + days, + )?; + + if added.is_negative { + duration = duration.negated(); + } + Ok(Duration::from(duration)) + } + + /// `CalendarEra` + pub fn era(&self, iso_date: &IsoDate) -> Option> { + if self.is_iso() { + return None; + } + let calendar_date = self.0.from_rata_die(iso_date.to_rd()); + self.0 + .year_info(&calendar_date) + .era() + .map(|era_info| era_info.era) + } + + /// `CalendarEraYear` + pub fn era_year(&self, iso_date: &IsoDate) -> Option { + if self.is_iso() { + return None; + } + let calendar_date = self.0.from_rata_die(iso_date.to_rd()); + self.0 + .year_info(&calendar_date) + .era() + .map(|era_info| era_info.year) + } + + /// `CalendarArithmeticYear` + pub fn year(&self, iso_date: &IsoDate) -> i32 { + if self.is_iso() { + return iso_date.year; + } + let calendar_date = self.0.from_rata_die(iso_date.to_rd()); + self.0.extended_year(&calendar_date) + } + + /// `CalendarMonth` + pub fn month(&self, iso_date: &IsoDate) -> u8 { + if self.is_iso() { + return iso_date.month; + } + let calendar_date = self.0.from_rata_die(iso_date.to_rd()); + self.0.month(&calendar_date).ordinal + } + + /// `CalendarMonthCode` + pub fn month_code(&self, iso_date: &IsoDate) -> MonthCode { + let calendar_date = self.0.from_rata_die(iso_date.to_rd()); + MonthCode(self.0.month(&calendar_date).to_input().code().0) + } + + /// `CalendarDay` + pub fn day(&self, iso_date: &IsoDate) -> u8 { + if self.is_iso() { + return iso_date.day; + } + let calendar_date = self.0.from_rata_die(iso_date.to_rd()); + self.0.day_of_month(&calendar_date).0 + } + + /// `CalendarDayOfWeek` + pub fn day_of_week(&self, iso_date: &IsoDate) -> u16 { + iso_date.to_icu4x_iso().weekday() as u16 + } + + /// `CalendarDayOfYear` + pub fn day_of_year(&self, iso_date: &IsoDate) -> u16 { + let calendar_date = self.0.from_rata_die(iso_date.to_rd()); + self.0.day_of_year(&calendar_date).0 + } + + /// `CalendarWeekOfYear` + pub fn week_of_year(&self, iso_date: &IsoDate) -> Option { + if self.is_iso() { + return Some(iso_date.to_icu4x_iso().week_of_year().week_number); + } + // TODO: Research in ICU4X and determine best approach. + None + } + + /// `CalendarYearOfWeek` + pub fn year_of_week(&self, iso_date: &IsoDate) -> Option { + if self.is_iso() { + return Some(iso_date.to_icu4x_iso().week_of_year().iso_year); + } + // TODO: Research in ICU4X and determine best approach. + None + } + + /// `CalendarDaysInWeek` + pub fn days_in_week(&self, _iso_date: &IsoDate) -> u16 { + 7 + } + + /// `CalendarDaysInMonth` + pub fn days_in_month(&self, iso_date: &IsoDate) -> u16 { + let calendar_date = self.0.from_rata_die(iso_date.to_rd()); + self.0.days_in_month(&calendar_date) as u16 + } + + /// `CalendarDaysInYear` + pub fn days_in_year(&self, iso_date: &IsoDate) -> u16 { + let calendar_date = self.0.from_rata_die(iso_date.to_rd()); + self.0.days_in_year(&calendar_date) + } + + /// `CalendarMonthsInYear` + pub fn months_in_year(&self, iso_date: &IsoDate) -> u16 { + if self.is_iso() { + return 12; + } + let calendar_date = self.0.from_rata_die(iso_date.to_rd()); + self.0.months_in_year(&calendar_date) as u16 + } + + /// `CalendarInLeapYear` + pub fn in_leap_year(&self, iso_date: &IsoDate) -> bool { + let calendar_date = self.0.from_rata_die(iso_date.to_rd()); + self.0.is_in_leap_year(&calendar_date) + } + + /// Returns the identifier of this calendar slot. + pub fn identifier(&self) -> &'static str { + // icu_calendar lists iso8601 and julian as None + match self.0.calendar_algorithm() { + Some(c) => c.as_str(), + None if self.is_iso() => "iso8601", + None => "julian", + } + } +} + +impl Calendar { + pub(crate) fn calendar_has_eras(kind: AnyCalendarKind) -> bool { + match kind { + AnyCalendarKind::Buddhist + | AnyCalendarKind::Coptic + | AnyCalendarKind::Ethiopian + | AnyCalendarKind::EthiopianAmeteAlem + | AnyCalendarKind::Gregorian + | AnyCalendarKind::Hebrew + | AnyCalendarKind::Indian + | AnyCalendarKind::HijriSimulatedMecca + | AnyCalendarKind::HijriTabularTypeIIFriday + | AnyCalendarKind::HijriTabularTypeIIThursday + | AnyCalendarKind::HijriUmmAlQura + | AnyCalendarKind::Japanese + | AnyCalendarKind::Persian + | AnyCalendarKind::Roc => true, + AnyCalendarKind::Chinese | AnyCalendarKind::Dangi | AnyCalendarKind::Iso => false, + _ => false, + } + } +} + +impl From for Calendar { + fn from(value: PlainDate) -> Self { + value.calendar().clone() + } +} + +impl From for Calendar { + fn from(value: PlainDateTime) -> Self { + value.calendar().clone() + } +} + +impl From for Calendar { + fn from(value: ZonedDateTime) -> Self { + value.calendar().clone() + } +} + +impl From for Calendar { + fn from(value: PlainMonthDay) -> Self { + value.calendar().clone() + } +} + +impl From for Calendar { + fn from(value: PlainYearMonth) -> Self { + value.calendar().clone() + } +} + +#[cfg(test)] +mod tests { + use crate::{iso::IsoDate, options::Unit}; + use core::str::FromStr; + + use super::Calendar; + + #[test] + fn calendar_from_str_is_case_insensitive() { + let cal_str = "iSo8601"; + let calendar = Calendar::try_from_utf8(cal_str.as_bytes()).unwrap(); + assert_eq!(calendar, Calendar::default()); + + let cal_str = "iSO8601"; + let calendar = Calendar::try_from_utf8(cal_str.as_bytes()).unwrap(); + assert_eq!(calendar, Calendar::default()); + } + + #[test] + fn calendar_invalid_ascii_value() { + let cal_str = "İSO8601"; + let _err = Calendar::from_str(cal_str).unwrap_err(); + + let cal_str = "\u{0130}SO8601"; + let _err = Calendar::from_str(cal_str).unwrap_err(); + + // Verify that an empty calendar is an error. + let cal_str = "2025-02-07T01:24:00-06:00[u-ca=]"; + let _err = Calendar::from_str(cal_str).unwrap_err(); + } + + #[test] + fn date_until_largest_year() { + // tests format: (Date one, PlainDate two, Duration result) + let tests = [ + ((2021, 7, 16), (2021, 7, 16), (0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), + ((2021, 7, 16), (2021, 7, 17), (0, 0, 0, 1, 0, 0, 0, 0, 0, 0)), + ((2021, 7, 16), (2021, 7, 23), (0, 0, 0, 7, 0, 0, 0, 0, 0, 0)), + ((2021, 7, 16), (2021, 8, 16), (0, 1, 0, 0, 0, 0, 0, 0, 0, 0)), + ( + (2020, 12, 16), + (2021, 1, 16), + (0, 1, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ((2021, 1, 5), (2021, 2, 5), (0, 1, 0, 0, 0, 0, 0, 0, 0, 0)), + ((2021, 1, 7), (2021, 3, 7), (0, 2, 0, 0, 0, 0, 0, 0, 0, 0)), + ((2021, 7, 16), (2021, 8, 17), (0, 1, 0, 1, 0, 0, 0, 0, 0, 0)), + ( + (2021, 7, 16), + (2021, 8, 13), + (0, 0, 0, 28, 0, 0, 0, 0, 0, 0), + ), + ((2021, 7, 16), (2021, 9, 16), (0, 2, 0, 0, 0, 0, 0, 0, 0, 0)), + ((2021, 7, 16), (2022, 7, 16), (1, 0, 0, 0, 0, 0, 0, 0, 0, 0)), + ( + (2021, 7, 16), + (2031, 7, 16), + (10, 0, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ((2021, 7, 16), (2022, 7, 19), (1, 0, 0, 3, 0, 0, 0, 0, 0, 0)), + ((2021, 7, 16), (2022, 9, 19), (1, 2, 0, 3, 0, 0, 0, 0, 0, 0)), + ( + (2021, 7, 16), + (2031, 12, 16), + (10, 5, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ( + (1997, 12, 16), + (2021, 7, 16), + (23, 7, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ( + (1997, 7, 16), + (2021, 7, 16), + (24, 0, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ( + (1997, 7, 16), + (2021, 7, 15), + (23, 11, 0, 29, 0, 0, 0, 0, 0, 0), + ), + ( + (1997, 6, 16), + (2021, 6, 15), + (23, 11, 0, 30, 0, 0, 0, 0, 0, 0), + ), + ( + (1960, 2, 16), + (2020, 3, 16), + (60, 1, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ( + (1960, 2, 16), + (2021, 3, 15), + (61, 0, 0, 27, 0, 0, 0, 0, 0, 0), + ), + ( + (1960, 2, 16), + (2020, 3, 15), + (60, 0, 0, 28, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 3, 30), + (2021, 7, 16), + (0, 3, 0, 16, 0, 0, 0, 0, 0, 0), + ), + ( + (2020, 3, 30), + (2021, 7, 16), + (1, 3, 0, 16, 0, 0, 0, 0, 0, 0), + ), + ( + (1960, 3, 30), + (2021, 7, 16), + (61, 3, 0, 16, 0, 0, 0, 0, 0, 0), + ), + ( + (2019, 12, 30), + (2021, 7, 16), + (1, 6, 0, 16, 0, 0, 0, 0, 0, 0), + ), + ( + (2020, 12, 30), + (2021, 7, 16), + (0, 6, 0, 16, 0, 0, 0, 0, 0, 0), + ), + ( + (1997, 12, 30), + (2021, 7, 16), + (23, 6, 0, 16, 0, 0, 0, 0, 0, 0), + ), + ( + (1, 12, 25), + (2021, 7, 16), + (2019, 6, 0, 21, 0, 0, 0, 0, 0, 0), + ), + ((2019, 12, 30), (2021, 3, 5), (1, 2, 0, 5, 0, 0, 0, 0, 0, 0)), + ( + (2021, 7, 17), + (2021, 7, 16), + (0, 0, 0, -1, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 7, 23), + (2021, 7, 16), + (0, 0, 0, -7, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 8, 16), + (2021, 7, 16), + (0, -1, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 1, 16), + (2020, 12, 16), + (0, -1, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ((2021, 2, 5), (2021, 1, 5), (0, -1, 0, 0, 0, 0, 0, 0, 0, 0)), + ((2021, 3, 7), (2021, 1, 7), (0, -2, 0, 0, 0, 0, 0, 0, 0, 0)), + ( + (2021, 8, 17), + (2021, 7, 16), + (0, -1, 0, -1, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 8, 13), + (2021, 7, 16), + (0, 0, 0, -28, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 9, 16), + (2021, 7, 16), + (0, -2, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ( + (2022, 7, 16), + (2021, 7, 16), + (-1, 0, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ( + (2031, 7, 16), + (2021, 7, 16), + (-10, 0, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ( + (2022, 7, 19), + (2021, 7, 16), + (-1, 0, 0, -3, 0, 0, 0, 0, 0, 0), + ), + ( + (2022, 9, 19), + (2021, 7, 16), + (-1, -2, 0, -3, 0, 0, 0, 0, 0, 0), + ), + ( + (2031, 12, 16), + (2021, 7, 16), + (-10, -5, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 7, 16), + (1997, 12, 16), + (-23, -7, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 7, 16), + (1997, 7, 16), + (-24, 0, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 7, 15), + (1997, 7, 16), + (-23, -11, 0, -30, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 6, 15), + (1997, 6, 16), + (-23, -11, 0, -29, 0, 0, 0, 0, 0, 0), + ), + ( + (2020, 3, 16), + (1960, 2, 16), + (-60, -1, 0, 0, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 3, 15), + (1960, 2, 16), + (-61, 0, 0, -28, 0, 0, 0, 0, 0, 0), + ), + ( + (2020, 3, 15), + (1960, 2, 16), + (-60, 0, 0, -28, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 7, 16), + (2021, 3, 30), + (0, -3, 0, -17, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 7, 16), + (2020, 3, 30), + (-1, -3, 0, -17, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 7, 16), + (1960, 3, 30), + (-61, -3, 0, -17, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 7, 16), + (2019, 12, 30), + (-1, -6, 0, -17, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 7, 16), + (2020, 12, 30), + (0, -6, 0, -17, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 7, 16), + (1997, 12, 30), + (-23, -6, 0, -17, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 7, 16), + (1, 12, 25), + (-2019, -6, 0, -22, 0, 0, 0, 0, 0, 0), + ), + ( + (2021, 3, 5), + (2019, 12, 30), + (-1, -2, 0, -6, 0, 0, 0, 0, 0, 0), + ), + ]; + + let calendar = Calendar::default(); + + for test in tests { + let first = IsoDate::new_unchecked(test.0 .0, test.0 .1, test.0 .2); + let second = IsoDate::new_unchecked(test.1 .0, test.1 .1, test.1 .2); + let result = calendar.date_until(&first, &second, Unit::Year).unwrap(); + assert_eq!( + result.years() as i32, + test.2 .0, + "year failed for test \"{test:?}\"" + ); + assert_eq!( + result.months() as i32, + test.2 .1, + "months failed for test \"{test:?}\"" + ); + assert_eq!( + result.weeks() as i32, + test.2 .2, + "weeks failed for test \"{test:?}\"" + ); + assert_eq!( + result.days(), + test.2 .3, + "days failed for test \"{test:?}\"" + ); + } + } +} diff --git a/src/builtins/core/calendar/fields.rs b/crates/temporal/src/builtins/core/calendar/fields.rs similarity index 100% rename from src/builtins/core/calendar/fields.rs rename to crates/temporal/src/builtins/core/calendar/fields.rs diff --git a/src/builtins/core/calendar/types.rs b/crates/temporal/src/builtins/core/calendar/types.rs similarity index 100% rename from src/builtins/core/calendar/types.rs rename to crates/temporal/src/builtins/core/calendar/types.rs diff --git a/crates/temporal/src/builtins/core/duration.rs b/crates/temporal/src/builtins/core/duration.rs new file mode 100644 index 000000000..a49f84ced --- /dev/null +++ b/crates/temporal/src/builtins/core/duration.rs @@ -0,0 +1,1609 @@ +//! This module implements `Duration` along with it's methods and components. + +use crate::{ + builtins::core::{PlainDateTime, PlainTime}, + error::ErrorMessage, + iso::{IsoDateTime, IsoTime}, + options::{ + Overflow, RelativeTo, ResolvedRoundingOptions, RoundingIncrement, RoundingOptions, + ToStringRoundingOptions, Unit, UnitGroup, + }, + parsers::{FormattableDateDuration, FormattableDuration, FormattableTimeDuration, Precision}, + primitive::FiniteF64, + provider::TimeZoneProvider, + temporal_assert, Sign, TemporalError, TemporalResult, NS_PER_DAY, +}; +use alloc::string::String; +use core::{cmp::Ordering, str::FromStr}; +use ixdtf::{ + encoding::Utf8, parsers::IsoDurationParser, records::Fraction, records::TimeDurationRecord, +}; +use normalized::InternalDurationRecord; +use num_traits::Euclid; + +use self::normalized::TimeDuration; + +mod date; +pub(crate) mod normalized; + +#[cfg(test)] +mod tests; + +#[doc(inline)] +pub use date::DateDuration; + +/// A `PartialDuration` is a Duration that may have fields not set. +#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)] +pub struct PartialDuration { + /// A potentially existent `years` field. + pub years: Option, + /// A potentially existent `months` field. + pub months: Option, + /// A potentially existent `weeks` field. + pub weeks: Option, + /// A potentially existent `days` field. + pub days: Option, + /// A potentially existent `hours` field. + pub hours: Option, + /// A potentially existent `minutes` field. + pub minutes: Option, + /// A potentially existent `seconds` field. + pub seconds: Option, + /// A potentially existent `milliseconds` field. + pub milliseconds: Option, + /// A potentially existent `microseconds` field. + pub microseconds: Option, + /// A potentially existent `nanoseconds` field. + pub nanoseconds: Option, +} + +impl Default for PartialDuration { + fn default() -> Self { + Self::empty() + } +} + +impl PartialDuration { + pub const fn empty() -> Self { + Self { + years: None, + months: None, + weeks: None, + days: None, + hours: None, + minutes: None, + seconds: None, + milliseconds: None, + microseconds: None, + nanoseconds: None, + } + } + + pub const fn with_years(mut self, years: i64) -> Self { + self.years = Some(years); + self + } + + pub const fn with_months(mut self, months: i64) -> Self { + self.months = Some(months); + self + } + + pub const fn with_weeks(mut self, weeks: i64) -> Self { + self.weeks = Some(weeks); + self + } + + pub const fn with_days(mut self, days: i64) -> Self { + self.days = Some(days); + self + } + + pub const fn with_hours(mut self, hours: i64) -> Self { + self.hours = Some(hours); + self + } + + pub const fn with_minutes(mut self, minutes: i64) -> Self { + self.minutes = Some(minutes); + self + } + + pub const fn with_seconds(mut self, seconds: i64) -> Self { + self.seconds = Some(seconds); + self + } + + pub const fn with_milliseconds(mut self, milliseconds: i64) -> Self { + self.milliseconds = Some(milliseconds); + self + } + + pub const fn with_microseconds(mut self, microseconds: i128) -> Self { + self.microseconds = Some(microseconds); + self + } + + pub const fn with_nanoseconds(mut self, nanoseconds: i128) -> Self { + self.nanoseconds = Some(nanoseconds); + self + } +} + +impl PartialDuration { + /// Returns whether the `PartialDuration` is empty. + #[inline] + #[must_use] + pub fn is_empty(&self) -> bool { + self == &Self::default() + } +} + +/// The native Rust implementation of `Temporal.Duration`. +/// +/// Represents a span of time such as "2 hours and 30 minutes" or "3 years, 2 months". +/// Unlike `Instant` which represents a specific moment in time, Duration represents +/// the amount of time between two moments. +/// +/// A Duration consists of two categories of components: +/// - Date components: years, months, weeks, and days +/// - Time components: hours, minutes, seconds, and subsecond units (nanosecond precision) +/// +/// Note that date arithmetic can be complex. For example, adding "1 month" to January 31st +/// could result in February 28th (non-leap year), February 29th (leap year), or March 3rd +/// (if you overflow February), depending on the calendar system and overflow handling. +/// +/// ## Examples +/// +/// ### Creating durations +/// +/// ```rust +/// use temporal::Duration; +/// +/// // Create a duration with specific components +/// let vacation_duration = Duration::new( +/// 0, 0, 2, 3, // 2 weeks and 3 days +/// 0, 0, 0, // no time components +/// 0, 0, 0 // no subsecond components +/// ).unwrap(); +/// +/// assert_eq!(vacation_duration.weeks(), 2); +/// assert_eq!(vacation_duration.days(), 3); +/// ``` +/// +/// ### Parsing ISO 8601 duration strings +/// +/// ```rust +/// use temporal::Duration; +/// use core::str::FromStr; +/// +/// // Complex duration with multiple components +/// let complex = Duration::from_str("P1Y2M3DT4H5M6.789S").unwrap(); +/// assert_eq!(complex.years(), 1); +/// assert_eq!(complex.months(), 2); +/// assert_eq!(complex.days(), 3); +/// assert_eq!(complex.hours(), 4); +/// assert_eq!(complex.minutes(), 5); +/// assert_eq!(complex.seconds(), 6); +/// +/// // Time-only duration +/// let movie_length = Duration::from_str("PT2H30M").unwrap(); +/// assert_eq!(movie_length.hours(), 2); +/// assert_eq!(movie_length.minutes(), 30); +/// +/// // Negative durations +/// let negative = Duration::from_str("-P1D").unwrap(); +/// assert_eq!(negative.days(), -1); +/// ``` +/// +/// ### Duration arithmetic +/// +/// ```rust +/// use temporal::Duration; +/// use core::str::FromStr; +/// +/// let commute_time = Duration::from_str("PT45M").unwrap(); +/// let lunch_break = Duration::from_str("PT1H").unwrap(); +/// +/// // Add durations together +/// let total_time = commute_time.add(&lunch_break).unwrap(); +/// assert_eq!(total_time.hours(), 1); // Results in 1 hour 45 minutes +/// assert_eq!(total_time.minutes(), 45); +/// +/// // Subtract duration components +/// let shortened = lunch_break.subtract(&Duration::from_str("PT15M").unwrap()).unwrap(); +/// assert_eq!(shortened.minutes(), 45); +/// ``` +/// +/// ### Date arithmetic with durations +/// +/// ```rust +/// use temporal::{PlainDate, Duration, options::Overflow}; +/// use core::str::FromStr; +/// +/// // January 31st in different years +/// let jan_31_2023 = PlainDate::try_new_iso(2023, 1, 31).unwrap(); +/// let jan_31_2024 = PlainDate::try_new_iso(2024, 1, 31).unwrap(); // leap year +/// +/// let one_month = Duration::from_str("P1M").unwrap(); +/// +/// // Adding 1 month to Jan 31st gives different results: +/// let feb_2023 = jan_31_2023.add(&one_month, Some(Overflow::Constrain)).unwrap(); +/// let feb_2024 = jan_31_2024.add(&one_month, Some(Overflow::Constrain)).unwrap(); +/// +/// // 2023: Jan 31 + 1 month = Feb 28 (no Feb 31st exists) +/// assert_eq!(feb_2023.day(), 28); +/// // 2024: Jan 31 + 1 month = Feb 29 (leap year) +/// assert_eq!(feb_2024.day(), 29); +/// ``` +/// +/// ### Working with partial durations +/// +/// ```rust +/// use temporal::{Duration, partial::PartialDuration}; +/// +/// let partial = PartialDuration { +/// hours: Some(3), +/// minutes: Some(45), +/// ..Default::default() +/// }; +/// +/// let duration = Duration::from_partial_duration(partial).unwrap(); +/// assert_eq!(duration.hours(), 3); +/// assert_eq!(duration.minutes(), 45); +/// assert_eq!(duration.days(), 0); // other fields default to 0 +/// ``` +/// +/// ### Duration properties +/// +/// ```rust +/// use temporal::Duration; +/// use core::str::FromStr; +/// +/// let duration = Duration::from_str("P1Y2M3D").unwrap(); +/// +/// // Check if duration is zero +/// assert!(!duration.is_zero()); +/// +/// // Get the sign of the duration +/// let sign = duration.sign(); +/// // Note: This particular duration has mixed signs which affects the overall sign +/// +/// // Get absolute value +/// let abs_duration = duration.abs(); +/// assert_eq!(abs_duration.years(), 1); +/// assert_eq!(abs_duration.months(), 2); +/// assert_eq!(abs_duration.days(), 3); +/// +/// // Negate duration +/// let negated = duration.negated(); +/// assert_eq!(negated.years(), -1); +/// assert_eq!(negated.months(), -2); +/// assert_eq!(negated.days(), -3); +/// ``` +/// +/// ## Reference +/// +/// For more information, see the [MDN documentation][mdn-duration]. +/// +/// [mdn-duration]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration +#[non_exhaustive] +#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)] +pub struct Duration { + pub(crate) sign: Sign, + pub(crate) years: u32, + pub(crate) months: u32, + pub(crate) weeks: u32, + pub(crate) days: u64, + pub(crate) hours: u64, + pub(crate) minutes: u64, + pub(crate) seconds: u64, + pub(crate) milliseconds: u64, + pub(crate) microseconds: u128, + pub(crate) nanoseconds: u128, +} + +impl Default for Duration { + fn default() -> Self { + Self { + sign: Sign::Zero, + years: 0, + months: 0, + weeks: 0, + days: 0, + hours: 0, + minutes: 0, + seconds: 0, + milliseconds: 0, + microseconds: 0, + nanoseconds: 0, + } + } +} + +impl core::fmt::Display for Duration { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let string = self.as_temporal_string(ToStringRoundingOptions::default()); + + debug_assert!( + string.is_ok(), + "Duration must return a valid string with default options." + ); + f.write_str(&string.map_err(|_| Default::default())?) + } +} + +impl TryFrom for Duration { + type Error = TemporalError; + fn try_from(partial: PartialDuration) -> Result { + Duration::from_partial_duration(partial) + } +} + +// NOTE(nekevss): Structure of the below is going to be a little convoluted, +// but intended to section everything based on the below +// +// Notation - [section](sub-section(s)). +// +// Sections: +// - Creation (private/public) +// - Getters/Setters +// - Methods (private/public/feature) +// + +#[cfg(test)] +impl Duration { + pub(crate) fn from_hours(value: i64) -> Self { + Self { + sign: Sign::from(value.signum() as i8), + hours: value.saturating_abs() as u64, + ..Default::default() + } + } +} + +// ==== Private Creation methods ==== + +impl Duration { + /// Creates a new `Duration` from a `DateDuration` and `TimeDuration`. + #[allow(clippy::too_many_arguments)] + pub(crate) const fn new_unchecked( + sign: Sign, + years: u32, + months: u32, + weeks: u32, + days: u64, + hours: u64, + minutes: u64, + seconds: u64, + milliseconds: u64, + microseconds: u128, + nanoseconds: u128, + ) -> Self { + Self { + sign, + years, + months, + weeks, + days, + hours, + minutes, + seconds, + + // https://github.com/boa-dev/temporal/issues/613 + // With float64_representable_durations enabled, force all smaller units + // to be in the float64-representable range. + #[cfg(feature = "float64_representable_durations")] + milliseconds: milliseconds as f64 as u64, + #[cfg(feature = "float64_representable_durations")] + microseconds: microseconds as f64 as u128, + #[cfg(feature = "float64_representable_durations")] + nanoseconds: nanoseconds as f64 as u128, + #[cfg(not(feature = "float64_representable_durations"))] + milliseconds, + #[cfg(not(feature = "float64_representable_durations"))] + microseconds, + #[cfg(not(feature = "float64_representable_durations"))] + nanoseconds, + } + } + + #[inline] + pub(crate) fn from_internal( + duration_record: InternalDurationRecord, + largest_unit: Unit, + ) -> TemporalResult { + // 1. Let days, hours, minutes, seconds, milliseconds, and microseconds be 0. + let mut days = 0; + let mut hours = 0; + let mut minutes = 0; + let mut seconds = 0; + let mut milliseconds = 0; + let mut microseconds = 0; + + // 2. Let sign be TimeDurationSign(internalDuration.[[Time]]). + let sign = duration_record + .normalized_time_duration() + .sign() + .as_sign_multiplier(); + + // 3. Let nanoseconds be abs(internalDuration.[[Time]]). + let mut nanoseconds = duration_record.normalized_time_duration().0.abs(); + match largest_unit { + // 4. If largestUnit is "year", "month", "week", or "day", then + Unit::Year | Unit::Month | Unit::Week | Unit::Day => { + // a. Set microseconds to floor(nanoseconds / 1000). + // b. Set nanoseconds to nanoseconds modulo 1000. + (microseconds, nanoseconds) = nanoseconds.div_rem_euclid(&1_000); + + // c. Set milliseconds to floor(microseconds / 1000). + // d. Set microseconds to microseconds modulo 1000. + (milliseconds, microseconds) = microseconds.div_rem_euclid(&1_000); + + // e. Set seconds to floor(milliseconds / 1000). + // f. Set milliseconds to milliseconds modulo 1000. + (seconds, milliseconds) = milliseconds.div_rem_euclid(&1_000); + + // g. Set minutes to floor(seconds / 60). + // h. Set seconds to seconds modulo 60. + (minutes, seconds) = seconds.div_rem_euclid(&60); + + // i. Set hours to floor(minutes / 60). + // j. Set minutes to minutes modulo 60. + (hours, minutes) = minutes.div_rem_euclid(&60); + + // k. Set days to floor(hours / 24). + // l. Set hours to hours modulo 24. + (days, hours) = hours.div_rem_euclid(&24); + } + // 5. Else if largestUnit is "hour", then + Unit::Hour => { + // a. Set microseconds to floor(nanoseconds / 1000). + // b. Set nanoseconds to nanoseconds modulo 1000. + (microseconds, nanoseconds) = nanoseconds.div_rem_euclid(&1_000); + + // c. Set milliseconds to floor(microseconds / 1000). + // d. Set microseconds to microseconds modulo 1000. + (milliseconds, microseconds) = microseconds.div_rem_euclid(&1_000); + + // e. Set seconds to floor(milliseconds / 1000). + // f. Set milliseconds to milliseconds modulo 1000. + (seconds, milliseconds) = milliseconds.div_rem_euclid(&1_000); + + // g. Set minutes to floor(seconds / 60). + // h. Set seconds to seconds modulo 60. + (minutes, seconds) = seconds.div_rem_euclid(&60); + + // i. Set hours to floor(minutes / 60). + // j. Set minutes to minutes modulo 60. + (hours, minutes) = minutes.div_rem_euclid(&60); + } + // 6. Else if largestUnit is "minute", then + Unit::Minute => { + // a. Set microseconds to floor(nanoseconds / 1000). + // b. Set nanoseconds to nanoseconds modulo 1000. + (microseconds, nanoseconds) = nanoseconds.div_rem_euclid(&1_000); + + // c. Set milliseconds to floor(microseconds / 1000). + // d. Set microseconds to microseconds modulo 1000. + (milliseconds, microseconds) = microseconds.div_rem_euclid(&1_000); + + // e. Set seconds to floor(milliseconds / 1000). + // f. Set milliseconds to milliseconds modulo 1000. + (seconds, milliseconds) = milliseconds.div_rem_euclid(&1_000); + + // g. Set minutes to floor(seconds / 60). + // h. Set seconds to seconds modulo 60. + (minutes, seconds) = seconds.div_rem_euclid(&60); + } + // 7. Else if largestUnit is "second", then + Unit::Second => { + // a. Set microseconds to floor(nanoseconds / 1000). + // b. Set nanoseconds to nanoseconds modulo 1000. + (microseconds, nanoseconds) = nanoseconds.div_rem_euclid(&1_000); + + // c. Set milliseconds to floor(microseconds / 1000). + // d. Set microseconds to microseconds modulo 1000. + (milliseconds, microseconds) = microseconds.div_rem_euclid(&1_000); + + // e. Set seconds to floor(milliseconds / 1000). + // f. Set milliseconds to milliseconds modulo 1000. + (seconds, milliseconds) = milliseconds.div_rem_euclid(&1_000); + } + // 8. Else if largestUnit is "millisecond", then + Unit::Millisecond => { + // a. Set microseconds to floor(nanoseconds / 1000). + // b. Set nanoseconds to nanoseconds modulo 1000. + (microseconds, nanoseconds) = nanoseconds.div_rem_euclid(&1_000); + + // c. Set milliseconds to floor(microseconds / 1000). + // d. Set microseconds to microseconds modulo 1000. + (milliseconds, microseconds) = microseconds.div_rem_euclid(&1_000); + } + // 9. Else if largestUnit is "microsecond", then + Unit::Microsecond => { + // a. Set microseconds to floor(nanoseconds / 1000). + // b. Set nanoseconds to nanoseconds modulo 1000. + (microseconds, nanoseconds) = nanoseconds.div_rem_euclid(&1_000); + } + // 10. Else, + // a. Assert: largestUnit is "nanosecond". + _ => temporal_assert!(largest_unit == Unit::Nanosecond), + } + // 11. NOTE: When largestUnit is millisecond, microsecond, or nanosecond, milliseconds, microseconds, or + // nanoseconds may be an unsafe integer. In this case, care must be taken when implementing the calculation using + // floating point arithmetic. It can be implemented in C++ using std::fma(). String manipulation will also give an + // exact result, since the multiplication is by a power of 10. + // 12. Return ? CreateTemporalDuration(internalDuration.[[Date]].[[Years]], internalDuration.[[Date]].[[Months]], + // internalDuration.[[Date]].[[Weeks]], internalDuration.[[Date]].[[Days]] + days × sign, hours × sign, minutes × sign, + // seconds × sign, milliseconds × sign, microseconds × sign, nanoseconds × sign). + Duration::new( + duration_record.date().years, + duration_record.date().months, + duration_record.date().weeks, + duration_record.date().days + days as i64 * sign as i64, + hours as i64 * sign as i64, + minutes as i64 * sign as i64, + seconds as i64 * sign as i64, + milliseconds as i64 * sign as i64, + microseconds * sign as i128, + nanoseconds * sign as i128, + ) + } + + /// Returns this `Duration` as a `TimeDuration`. + #[inline] + pub(crate) fn to_normalized(self) -> TimeDuration { + TimeDuration::from_duration(&self) + } + + /// Returns the a `Vec` of the fields values. + #[inline] + #[must_use] + pub(crate) fn fields_signum(&self) -> [i64; 10] { + [ + self.years().signum(), + self.months().signum(), + self.weeks().signum(), + self.days().signum(), + self.hours().signum(), + self.minutes().signum(), + self.seconds().signum(), + self.milliseconds().signum(), + self.microseconds().signum() as i64, + self.nanoseconds().signum() as i64, + ] + } + + /// Returns the `Unit` corresponding to the largest non-zero field. + #[inline] + pub(crate) fn default_largest_unit(&self) -> Unit { + self.fields_signum() + .iter() + .enumerate() + .find(|x| x.1 != &0) + .map(|x| Unit::from(10 - x.0)) + .unwrap_or(Unit::Nanosecond) + } + + // 7.5.5 ToInternalDurationRecord ( duration ) + pub(crate) fn to_internal_duration_record(self) -> InternalDurationRecord { + // 1. Let dateDuration be ! CreateDateDurationRecord(duration.[[Years]], duration.[[Months]], duration.[[Weeks]], duration.[[Days]]). + let date_duration = + DateDuration::new_unchecked(self.years(), self.months(), self.weeks(), self.days()); + // 2. Let timeDuration be TimeDurationFromComponents(duration.[[Hours]], duration.[[Minutes]], duration.[[Seconds]], duration.[[Milliseconds]], duration.[[Microseconds]], duration.[[Nanoseconds]]). + let time_duration = TimeDuration::from_components( + self.hours(), + self.minutes(), + self.seconds(), + self.milliseconds(), + self.microseconds(), + self.nanoseconds(), + ); + // 3. Return CombineDateAndTimeDuration(dateDuration, timeDuration). + InternalDurationRecord::combine(date_duration, time_duration) + } + + /// Equivalent of [`7.5.7 ToDateDurationRecordWithoutTime ( duration )`][spec] + /// + /// [spec]: + /// + // spec(2025-06-23): https://github.com/tc39/proposal-temporal/tree/ed49b0b482981119c9b5e28b0686d877d4a9bae0 + #[allow(clippy::wrong_self_convention)] + pub(crate) fn to_date_duration_record_without_time(&self) -> TemporalResult { + // 1. Let internalDuration be ToInternalDurationRecordWith24HourDays(duration). + let internal_duration = InternalDurationRecord::from_duration_with_24_hour_days(self)?; + + // 2. Let days be truncate(internalDuration.[[Time]] / nsPerDay). + // 3. Return ! CreateDateDurationRecord(internalDuration.[[Date]].[[Years]], internalDuration.[[Date]].[[Months]], internalDuration.[[Date]].[[Weeks]], days). + internal_duration.to_date_duration_record_without_time() + } +} + +// ==== Public Duration API ==== + +impl Duration { + /// Creates a new validated `Duration`. + #[allow(clippy::too_many_arguments)] + pub fn new( + years: i64, + months: i64, + weeks: i64, + days: i64, + hours: i64, + minutes: i64, + seconds: i64, + milliseconds: i64, + microseconds: i128, + nanoseconds: i128, + ) -> TemporalResult { + if !is_valid_duration( + years, + months, + weeks, + days, + hours, + minutes, + seconds, + milliseconds, + microseconds, + nanoseconds, + ) { + return Err(TemporalError::range().with_enum(ErrorMessage::DurationNotValid)); + } + let sign = duration_sign(&[ + years, + months, + weeks, + days, + hours, + minutes, + seconds, + milliseconds, + microseconds.signum() as i64, + nanoseconds.signum() as i64, + ]); + Ok(Duration::new_unchecked( + sign, + years.saturating_abs() as u32, + months.saturating_abs() as u32, + weeks.saturating_abs() as u32, + days.unsigned_abs(), + hours.unsigned_abs(), + minutes.unsigned_abs(), + seconds.unsigned_abs(), + milliseconds.unsigned_abs(), + microseconds.unsigned_abs(), + nanoseconds.unsigned_abs(), + )) + } + + /// Creates a `Duration` from a provided `PartialDuration`. + /// + /// ## Examples + /// + /// ```rust + /// use temporal::{partial::PartialDuration, Duration}; + /// + /// let duration = Duration::from_partial_duration(PartialDuration { + /// seconds: Some(4), + /// ..Default::default() + /// }).unwrap(); + /// + /// assert_eq!(duration.seconds(), 4); + /// assert_eq!(duration.to_string(), "PT4S"); + /// ``` + pub fn from_partial_duration(partial: PartialDuration) -> TemporalResult { + if partial == PartialDuration::default() { + return Err(TemporalError::r#type() + .with_message("PartialDuration cannot have all empty fields.")); + } + Self::new( + partial.years.unwrap_or_default(), + partial.months.unwrap_or_default(), + partial.weeks.unwrap_or_default(), + partial.days.unwrap_or_default(), + partial.hours.unwrap_or_default(), + partial.minutes.unwrap_or_default(), + partial.seconds.unwrap_or_default(), + partial.milliseconds.unwrap_or_default(), + partial.microseconds.unwrap_or_default(), + partial.nanoseconds.unwrap_or_default(), + ) + } + + // Converts a UTF-8 encoded string into a `Duration`. + pub fn from_utf8(s: &[u8]) -> TemporalResult { + let parse_record = IsoDurationParser::::from_utf8(s).parse()?; + + fn fraction_to_unadjusted_ns(fraction: Option) -> Result { + if let Some(fraction) = fraction { + fraction.to_nanoseconds().ok_or( + TemporalError::range() + .with_enum(ErrorMessage::FractionalTimeMoreThanNineDigits), + ) + } else { + Ok(0) + } + } + + let (hours, minutes, seconds, millis, micros, nanos) = match parse_record.time { + Some(TimeDurationRecord::Hours { hours, fraction }) => { + let unadjusted_fraction = fraction_to_unadjusted_ns(fraction)? as u64; + let fractional_hours_ns = unadjusted_fraction * 3600; + let minutes = fractional_hours_ns.div_euclid(60 * 1_000_000_000); + let fractional_minutes_ns = fractional_hours_ns.rem_euclid(60 * 1_000_000_000); + + let seconds = fractional_minutes_ns.div_euclid(1_000_000_000); + let fractional_seconds = fractional_minutes_ns.rem_euclid(1_000_000_000); + + let milliseconds = fractional_seconds.div_euclid(1_000_000); + let rem = fractional_seconds.rem_euclid(1_000_000); + + let microseconds = rem.div_euclid(1_000); + let nanoseconds = rem.rem_euclid(1_000); + + ( + hours, + minutes, + seconds, + milliseconds, + microseconds, + nanoseconds, + ) + } + // Minutes variant is defined as { hours: u32, minutes: u32, fraction: u64 } + Some(TimeDurationRecord::Minutes { + hours, + minutes, + fraction, + }) => { + let unadjusted_fraction = fraction_to_unadjusted_ns(fraction)? as u64; + let fractional_minutes_ns = unadjusted_fraction * 60; + let seconds = fractional_minutes_ns.div_euclid(1_000_000_000); + let fractional_seconds = fractional_minutes_ns.rem_euclid(1_000_000_000); + + let milliseconds = fractional_seconds.div_euclid(1_000_000); + let rem = fractional_seconds.rem_euclid(1_000_000); + + let microseconds = rem.div_euclid(1_000); + let nanoseconds = rem.rem_euclid(1_000); + + ( + hours, + minutes, + seconds, + milliseconds, + microseconds, + nanoseconds, + ) + } + // Seconds variant is defined as { hours: u32, minutes: u32, seconds: u32, fraction: u32 } + Some(TimeDurationRecord::Seconds { + hours, + minutes, + seconds, + fraction, + }) => { + let ns = fraction_to_unadjusted_ns(fraction)?; + let milliseconds = ns.div_euclid(1_000_000); + let rem = ns.rem_euclid(1_000_000); + + let microseconds = rem.div_euclid(1_000); + let nanoseconds = rem.rem_euclid(1_000); + + ( + hours, + minutes, + seconds, + milliseconds as u64, + microseconds as u64, + nanoseconds as u64, + ) + } + None => (0, 0, 0, 0, 0, 0), + }; + + let (years, months, weeks, days) = if let Some(date) = parse_record.date { + (date.years, date.months, date.weeks, date.days) + } else { + (0, 0, 0, 0) + }; + + let sign = parse_record.sign as i64; + + Self::new( + years as i64 * sign, + months as i64 * sign, + weeks as i64 * sign, + days as i64 * sign, + hours as i64 * sign, + minutes as i64 * sign, + seconds as i64 * sign, + millis as i64 * sign, + micros as i128 * sign as i128, + nanos as i128 * sign as i128, + ) + } + + /// Return if the Durations values are within their valid ranges. + #[inline] + #[must_use] + pub fn is_time_within_range(&self) -> bool { + self.hours < 24 + && self.minutes < 60 + && self.seconds < 60 + && self.milliseconds < 1000 + && self.microseconds < 1000 + && self.nanoseconds < 1000 + } + + #[inline] + pub fn compare_with_provider( + &self, + other: &Duration, + relative_to: Option, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + if self == other { + return Ok(Ordering::Equal); + } + // 8. Let largestUnit1 be DefaultTemporalLargestUnit(one). + // 9. Let largestUnit2 be DefaultTemporalLargestUnit(two). + let largest_unit_1 = self.default_largest_unit(); + let largest_unit_2 = other.default_largest_unit(); + // 10. Let duration1 be ToInternalDurationRecord(one). + let duration_one = self.to_internal_duration_record(); + // 11. Let duration2 be ToInternalDurationRecord(two). + let duration_two = other.to_internal_duration_record(); + // 12. If zonedRelativeTo is not undefined, and either UnitCategory(largestUnit1) or UnitCategory(largestUnit2) is date, then + if let Some(RelativeTo::ZonedDateTime(zdt)) = relative_to.as_ref() { + if largest_unit_1.is_date_unit() || largest_unit_2.is_date_unit() { + // a. Let timeZone be zonedRelativeTo.[[TimeZone]]. + // b. Let calendar be zonedRelativeTo.[[Calendar]]. + // c. Let after1 be ? AddZonedDateTime(zonedRelativeTo.[[EpochNanoseconds]], timeZone, calendar, duration1, constrain). + // d. Let after2 be ? AddZonedDateTime(zonedRelativeTo.[[EpochNanoseconds]], timeZone, calendar, duration2, constrain). + let after1 = + zdt.add_zoned_date_time(duration_one, Overflow::Constrain, provider)?; + let after2 = + zdt.add_zoned_date_time(duration_two, Overflow::Constrain, provider)?; + // e. If after1 > after2, return 1𝔽. + // f. If after1 < after2, return -1𝔽. + // g. Return +0𝔽. + return Ok(after1.cmp(&after2)); + } + } + // 13. If IsCalendarUnit(largestUnit1) is true or IsCalendarUnit(largestUnit2) is true, then + let (days1, days2) = + if largest_unit_1.is_calendar_unit() || largest_unit_2.is_calendar_unit() { + // a. If plainRelativeTo is undefined, throw a RangeError exception. + // b. Let days1 be ? DateDurationDays(duration1.[[Date]], plainRelativeTo). + // c. Let days2 be ? DateDurationDays(duration2.[[Date]], plainRelativeTo). + let Some(RelativeTo::PlainDate(pdt)) = relative_to.as_ref() else { + return Err(TemporalError::range()); + }; + let days1 = self.date().days(pdt)?; + let days2 = other.date().days(pdt)?; + (days1, days2) + } else { + (self.date().days, other.date().days) + }; + // 15. Let timeDuration1 be ? Add24HourDaysToTimeDuration(duration1.[[Time]], days1). + let time_duration_1 = self.to_normalized().add_days(days1)?; + // 16. Let timeDuration2 be ? Add24HourDaysToTimeDuration(duration2.[[Time]], days2). + let time_duration_2 = other.to_normalized().add_days(days2)?; + // 17. Return 𝔽(CompareTimeDuration(timeDuration1, timeDuration2)). + Ok(time_duration_1.cmp(&time_duration_2)) + } +} + +// ==== Public `Duration` Getters/Setters ==== + +impl Duration { + /// Returns a reference to the inner `DateDuration` + #[inline] + #[must_use] + pub fn date(&self) -> DateDuration { + DateDuration::from(self) + } + + /// Returns the `years` field of duration. + #[inline] + #[must_use] + pub const fn years(&self) -> i64 { + self.years as i64 * self.sign.as_sign_multiplier() as i64 + } + + /// Returns the `months` field of duration. + #[inline] + #[must_use] + pub const fn months(&self) -> i64 { + self.months as i64 * self.sign.as_sign_multiplier() as i64 + } + + /// Returns the `weeks` field of duration. + #[inline] + #[must_use] + pub const fn weeks(&self) -> i64 { + self.weeks as i64 * self.sign.as_sign_multiplier() as i64 + } + + /// Returns the `days` field of duration. + #[inline] + #[must_use] + pub const fn days(&self) -> i64 { + self.days as i64 * self.sign.as_sign_multiplier() as i64 + } + + /// Returns the `hours` field of duration. + #[inline] + #[must_use] + pub const fn hours(&self) -> i64 { + self.hours as i64 * self.sign.as_sign_multiplier() as i64 + } + + /// Returns the `hours` field of duration. + #[inline] + #[must_use] + pub const fn minutes(&self) -> i64 { + self.minutes as i64 * self.sign.as_sign_multiplier() as i64 + } + + /// Returns the `seconds` field of duration. + #[inline] + #[must_use] + pub const fn seconds(&self) -> i64 { + self.seconds as i64 * self.sign.as_sign_multiplier() as i64 + } + + /// Returns the `hours` field of duration. + #[inline] + #[must_use] + pub const fn milliseconds(&self) -> i64 { + self.milliseconds as i64 * self.sign.as_sign_multiplier() as i64 + } + + /// Returns the `microseconds` field of duration. + #[inline] + #[must_use] + pub const fn microseconds(&self) -> i128 { + self.microseconds as i128 * self.sign.as_sign_multiplier() as i128 + } + + /// Returns the `nanoseconds` field of duration. + #[inline] + #[must_use] + pub const fn nanoseconds(&self) -> i128 { + self.nanoseconds as i128 * self.sign.as_sign_multiplier() as i128 + } +} + +// ==== Public Duration methods ==== + +impl Duration { + /// Determines the sign for the current self. + #[inline] + #[must_use] + pub fn sign(&self) -> Sign { + self.sign + } + + /// Returns whether the current `Duration` is zero. + /// + /// Equivalant to `Temporal.Duration.blank()`. + #[inline] + #[must_use] + pub fn is_zero(&self) -> bool { + self.sign() == Sign::Zero + } + + /// Returns a negated `Duration` + #[inline] + #[must_use] + pub fn negated(&self) -> Self { + Self { + sign: self.sign.negate(), + ..*self + } + } + + /// Returns the absolute value of `Duration`. + #[inline] + #[must_use] + pub fn abs(&self) -> Self { + Self { + sign: if self.sign == Sign::Zero { + Sign::Zero + } else { + Sign::Positive + }, + ..*self + } + } + + /// Returns the result of adding a `Duration` to the current `Duration` + #[inline] + pub fn add(&self, other: &Self) -> TemporalResult { + // 1. Set other to ? ToTemporalDuration(other). + // 2. If operation is subtract, set other to CreateNegatedTemporalDuration(other). + // 3. Let largestUnit1 be DefaultTemporalLargestUnit(duration). + let largest_unit_one = self.default_largest_unit(); + // 4. Let largestUnit2 be DefaultTemporalLargestUnit(other). + let largest_unit_two = other.default_largest_unit(); + // 5. Let largestUnit be LargerOfTwoTemporalUnits(largestUnit1, largestUnit2). + let largest_unit = largest_unit_one.max(largest_unit_two); + // 6. If IsCalendarUnit(largestUnit) is true, throw a RangeError exception. + if largest_unit.is_calendar_unit() { + return Err(TemporalError::range().with_message( + "Largest unit cannot be a calendar unit when adding two durations.", + )); + } + + // 7. Let d1 be ToInternalDurationRecordWith24HourDays(duration). + let d1 = InternalDurationRecord::from_duration_with_24_hour_days(self)?; + // 8. Let d2 be ToInternalDurationRecordWith24HourDays(other). + let d2 = InternalDurationRecord::from_duration_with_24_hour_days(other)?; + // 9. Let timeResult be ? AddTimeDuration(d1.[[Time]], d2.[[Time]]). + let time_result = (d1.normalized_time_duration() + d2.normalized_time_duration())?; + // 10. Let result be CombineDateAndTimeDuration(ZeroDateDuration(), timeResult). + let result = InternalDurationRecord::combine(DateDuration::default(), time_result); + // 11. Return ? TemporalDurationFromInternal(result, largestUnit). + Duration::from_internal(result, largest_unit) + } + + /// Returns the result of subtracting a `Duration` from the current `Duration` + #[inline] + pub fn subtract(&self, other: &Self) -> TemporalResult { + self.add(&other.negated()) + } + + /// `17.3.20 Temporal.Duration.prototype.round ( roundTo )` + /// + /// Spec: + /// + // Spec last accessed: 2025-09-08, + #[inline] + pub fn round_with_provider( + &self, + options: RoundingOptions, + relative_to: Option, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + // NOTE(HalidOdat): Steps 1-12 are handled before calling the function. + // + // SKIP: 1. Let duration be the this value. + // SKIP: 2. Perform ? RequireInternalSlot(duration, [[InitializedTemporalDuration]]). + // SKIP: 3. If roundTo is undefined, then + // SKIP: a. Throw a TypeError exception. + // SKIP: 4. If roundTo is a String, then + // SKIP: a. Let paramString be roundTo. + // SKIP: b. Set roundTo to OrdinaryObjectCreate(null). + // SKIP: c. Perform ! CreateDataPropertyOrThrow(roundTo, "smallestUnit", paramString). + // SKIP: 5. Else, + // SKIP: a. Set roundTo to ? GetOptionsObject(roundTo). + // SKIP: 6. Let smallestUnitPresent be true. + // SKIP: 7. Let largestUnitPresent be true. + // SKIP: 8. NOTE: The following steps read options and perform independent validation in alphabetical order + // (GetTemporalRelativeToOption reads "relativeTo", + // GetRoundingIncrementOption reads "roundingIncrement" + // and GetRoundingModeOption reads "roundingMode"). + // SKIP: 9. Let largestUnit be ? GetTemporalUnitValuedOption(roundTo, "largestUnit", unset). + // SKIP: 10. Let relativeToRecord be ? GetTemporalRelativeToOption(roundTo). + // SKIP: 11. Let zonedRelativeTo be relativeToRecord.[[ZonedRelativeTo]]. + // SKIP: 12. Let plainRelativeTo be relativeToRecord.[[PlainRelativeTo]]. + + // 13. Let roundingIncrement be ? GetRoundingIncrementOption(roundTo). + let rounding_increment = options.increment.unwrap_or_default(); + + // 14. Let roundingMode be ? GetRoundingModeOption(roundTo, half-expand). + let rounding_mode = options.rounding_mode.unwrap_or_default(); + + // 15. Let smallestUnit be ? GetTemporalUnitValuedOption(roundTo, "smallestUnit", datetime, unset). + let smallest_unit = options.smallest_unit; + + // 16. Perform ?ValidateTemporalUnitValue(smallestUnit, datetime). + UnitGroup::DateTime.validate_unit(smallest_unit, None)?; + + // 17. If smallestUnit is unset, then + // a. Set smallestUnitPresent to false. + // b. Set smallestUnit to nanosecond. + let smallest_unit = smallest_unit.unwrap_or(Unit::Nanosecond); + + // 18. Let existingLargestUnit be DefaultTemporalLargestUnit(duration). + let existing_largest_unit = self.default_largest_unit(); + + // 19. Let defaultLargestUnit be LargerOfTwoTemporalUnits(existingLargestUnit, smallestUnit). + let default_largest_unit = Unit::larger(existing_largest_unit, smallest_unit)?; + + let largest_unit = match options.largest_unit { + // 20. If largestUnit is unset, then + // a. Set largestUnitPresent to false. + // b. Set largestUnit to defaultLargestUnit. + // 21. Else if largestUnit is auto, then + // a. Set largestUnit to defaultLargestUnit. + Some(Unit::Auto) | None => default_largest_unit, + Some(unit) => unit, + }; + + // 22. If smallestUnitPresent is false and largestUnitPresent is false, then + if options.largest_unit.is_none() && options.smallest_unit.is_none() { + // a. Throw a RangeError exception. + return Err(TemporalError::range() + .with_message("smallestUnit and largestUnit cannot both be None.")); + } + + // 23. If LargerOfTwoTemporalUnits(largestUnit, smallestUnit) is not largestUnit, throw a RangeError exception. + if Unit::larger(largest_unit, smallest_unit)? != largest_unit { + return Err( + TemporalError::range().with_message("smallestUnit is larger than largestUnit.") + ); + } + + // 24. Let maximum be MaximumTemporalDurationRoundingIncrement(smallestUnit). + let maximum = smallest_unit.to_maximum_rounding_increment(); + + // 25. If maximum is not unset, perform ? ValidateTemporalRoundingIncrement(roundingIncrement, maximum, false). + if let Some(maximum) = maximum { + rounding_increment.validate(maximum.into(), false)?; + } + + // 26. If roundingIncrement > 1, and largestUnit is not smallestUnit, and TemporalUnitCategory(smallestUnit) is date, throw a RangeError exception. + if rounding_increment > RoundingIncrement::ONE + && largest_unit != smallest_unit + && smallest_unit.is_date_unit() + { + return Err(TemporalError::range().with_message( + "roundingIncrement > 1 and largest_unit is not smallest_unit and smallest_unit is date", + )); + } + + let resolved_options = ResolvedRoundingOptions { + largest_unit, + smallest_unit, + increment: rounding_increment, + rounding_mode, + }; + + match relative_to { + // 27. If zonedRelativeTo is not undefined, then + Some(RelativeTo::ZonedDateTime(zoned_relative_to)) => { + // a. Let internalDuration be ToInternalDurationRecord(duration). + let internal_duration = self.to_internal_duration_record(); + + // b. Let timeZone be zonedRelativeTo.[[TimeZone]]. + // c. Let calendar be zonedRelativeTo.[[Calendar]]. + // (bundled in zoned_relative_to) + + // d. Let relativeEpochNs be zonedRelativeTo.[[EpochNanoseconds]]. + // let relative_epoch_ns = zoned_relative_to.epoch_nanoseconds(); + + // e. Let targetEpochNs be ? AddZonedDateTime(relativeEpochNs, timeZone, calendar, internalDuration, constrain). + let target_epoch_ns = zoned_relative_to.add_zoned_date_time( + internal_duration, + Overflow::Constrain, + provider, + )?; + + // f. Set internalDuration to ? DifferenceZonedDateTimeWithRounding(relativeEpochNs, targetEpochNs, timeZone, calendar, largestUnit, roundingIncrement, smallestUnit, roundingMode). + let internal = zoned_relative_to.diff_with_rounding( + &target_epoch_ns, + resolved_options, + provider, + )?; + + // g. If TemporalUnitCategory(largestUnit) is date, set largestUnit to hour. + let mut largest_unit = resolved_options.largest_unit; + if resolved_options.largest_unit.is_date_unit() { + largest_unit = Unit::Hour; + } + + // h. Return ? TemporalDurationFromInternal(internalDuration, largestUnit). + return Duration::from_internal(internal, largest_unit); + } + + // 28. If plainRelativeTo is not undefined, then + Some(RelativeTo::PlainDate(plain_relative_to)) => { + // a. Let internalDuration be ToInternalDurationRecordWith24HourDays(duration). + let internal_duration = + InternalDurationRecord::from_duration_with_24_hour_days(self)?; + + // b. Let targetTime be AddTime(MidnightTimeRecord(), internalDuration.[[Time]]). + let (target_time_days, target_time) = PlainTime::default() + .add_normalized_time_duration(internal_duration.normalized_time_duration()); + + // c. Let calendar be plainRelativeTo.[[Calendar]]. + let calendar = plain_relative_to.calendar(); + + // d. Let dateDuration be ! AdjustDateDurationRecord(internalDuration.[[Date]], targetTime.[[Days]]). + let date_duration = + internal_duration + .date() + .adjust(target_time_days, None, None)?; + + // e. Let targetDate be ? CalendarDateAdd(calendar, plainRelativeTo.[[ISODate]], dateDuration, constrain). + let target_date = calendar.date_add( + &plain_relative_to.iso, + &date_duration, + Overflow::Constrain, + )?; + + // f. Let isoDateTime be CombineISODateAndTimeRecord(plainRelativeTo.[[ISODate]], MidnightTimeRecord()). + let iso_date_time = + IsoDateTime::new_unchecked(plain_relative_to.iso, IsoTime::default()); + + // g. Let targetDateTime be CombineISODateAndTimeRecord(targetDate, targetTime). + let target_date_time = IsoDateTime::new_unchecked(target_date.iso, target_time.iso); + + // h. Set internalDuration to ? DifferencePlainDateTimeWithRounding(isoDateTime, targetDateTime, calendar, largestUnit, roundingIncrement, smallestUnit, roundingMode). + let internal_duration = + PlainDateTime::new_unchecked(iso_date_time, calendar.clone()) + .diff_dt_with_rounding( + &PlainDateTime::new_unchecked(target_date_time, calendar.clone()), + resolved_options, + )?; + + // i. Return ? TemporalDurationFromInternal(internalDuration, largestUnit). + return Duration::from_internal(internal_duration, resolved_options.largest_unit); + } + None => {} + } + + // 29. If IsCalendarUnit(existingLargestUnit) is true, or IsCalendarUnit(largestUnit) is true, throw a RangeError exception. + if existing_largest_unit.is_calendar_unit() + || resolved_options.largest_unit.is_calendar_unit() + { + return Err(TemporalError::range().with_message( + "largestUnit when rounding Duration was not the largest provided unit", + )); + } + + // 30. Assert: IsCalendarUnit(smallestUnit) is false. + temporal_assert!(!resolved_options.smallest_unit.is_calendar_unit()); + + // 31. Let internalDuration be ToInternalDurationRecordWith24HourDays(duration). + let internal_duration = InternalDurationRecord::from_duration_with_24_hour_days(self)?; + + // 32. If smallestUnit is day, then + let internal_duration = if resolved_options.smallest_unit == Unit::Day { + // a. Let fractionalDays be TotalTimeDuration(internalDuration.[[Time]], day). + // b. Let days be RoundNumberToIncrement(fractionalDays, roundingIncrement, roundingMode). + let days = internal_duration + .normalized_time_duration() + .round_to_fractional_days( + resolved_options.increment, + resolved_options.rounding_mode, + )?; + + // c. Let dateDuration be ? CreateDateDurationRecord(0, 0, 0, days). + let date = DateDuration::new(0, 0, 0, days)?; + + // d. Set internalDuration to CombineDateAndTimeDuration(dateDuration, 0). + InternalDurationRecord::new(date, TimeDuration::default())? + } else { + // 33. Else, + // a. Let timeDuration be ? RoundTimeDuration(internalDuration.[[Time]], roundingIncrement, smallestUnit, roundingMode). + let time_duration = internal_duration + .normalized_time_duration() + .round(resolved_options)?; + + // b. Set internalDuration to CombineDateAndTimeDuration(ZeroDateDuration(), timeDuration). + InternalDurationRecord::new(DateDuration::default(), time_duration)? + }; + + // 34. Return ? TemporalDurationFromInternal(internalDuration, largestUnit). + Duration::from_internal(internal_duration, resolved_options.largest_unit) + } + + /// Returns the total of the `Duration` + pub fn total_with_provider( + &self, + unit: Unit, + relative_to: Option, + provider: &(impl TimeZoneProvider + ?Sized), + // Review question what is the return type of duration.prototye.total? + ) -> TemporalResult { + match relative_to { + // 11. If zonedRelativeTo is not undefined, then + Some(RelativeTo::ZonedDateTime(zoned_datetime)) => { + // a. Let internalDuration be ToInternalDurationRecord(duration). + let internal_duration = self.to_internal_duration_record(); + // b. Let timeZone be zonedRelativeTo.[[TimeZone]]. + // c. Let calendar be zonedRelativeTo.[[Calendar]]. + // d. Let relativeEpochNs be zonedRelativeTo.[[EpochNanoseconds]]. + // e. Let targetEpochNs be ? AddZonedDateTime(relativeEpochNs, timeZone, calendar, internalDuration, constrain). + let target_epoch_ns = zoned_datetime.add_zoned_date_time( + internal_duration, + Overflow::Constrain, + provider, + )?; + // f. Let total be ? DifferenceZonedDateTimeWithTotal(relativeEpochNs, targetEpochNs, timeZone, calendar, unit). + let total = zoned_datetime.diff_with_total(&target_epoch_ns, unit, provider)?; + Ok(total) + } + // 12. Else if plainRelativeTo is not undefined, then + Some(RelativeTo::PlainDate(plain_date)) => { + // a. Let internalDuration be ToInternalDurationRecordWith24HourDays(duration). + // b. Let targetTime be AddTime(MidnightTimeRecord(), internalDuration.[[Time]]). + let (balanced_days, time) = + PlainTime::default().add_normalized_time_duration(self.to_normalized()); + // c. Let calendar be plainRelativeTo.[[Calendar]]. + // d. Let dateDuration be ! AdjustDateDurationRecord(internalDuration.[[Date]], targetTime.[[Days]]). + let date_duration = DateDuration::new( + self.years(), + self.months(), + self.weeks(), + self.days() + .checked_add(balanced_days) + .ok_or(TemporalError::range())?, + )?; + // e. Let targetDate be ? CalendarDateAdd(calendar, plainRelativeTo.[[ISODate]], dateDuration, constrain). + let target_date = plain_date.calendar().date_add( + &plain_date.iso, + &date_duration, + Overflow::Constrain, + )?; + // f. Let isoDateTime be CombineISODateAndTimeRecord(plainRelativeTo.[[ISODate]], MidnightTimeRecord()). + let iso_date_time = IsoDateTime::new_unchecked(plain_date.iso, IsoTime::default()); + // g. Let targetDateTime be CombineISODateAndTimeRecord(targetDate, targetTime). + let target_date_time = IsoDateTime::new_unchecked(target_date.iso, time.iso); + // h. Let total be ? DifferencePlainDateTimeWithTotal(isoDateTime, targetDateTime, calendar, unit). + let plain_dt = + PlainDateTime::new_unchecked(iso_date_time, plain_date.calendar().clone()); + let total = plain_dt.diff_dt_with_total( + &PlainDateTime::new_unchecked(target_date_time, plain_date.calendar().clone()), + unit, + )?; + Ok(total) + } + None => { + // a. Let largestUnit be DefaultTemporalLargestUnit(duration). + let largest_unit = self.default_largest_unit(); + // b. If IsCalendarUnit(largestUnit) is true, or IsCalendarUnit(unit) is true, throw a RangeError exception. + if largest_unit.is_calendar_unit() || unit.is_calendar_unit() { + return Err(TemporalError::range()); + } + // c. Let internalDuration be ToInternalDurationRecordWith24HourDays(duration). + let internal = InternalDurationRecord::from_duration_with_24_hour_days(self)?; + // d. Let total be TotalTimeDuration(internalDuration.[[Time]], unit). + let total = internal.normalized_time_duration().total(unit)?; + Ok(total) + } + } + } + + /// Returns the `Duration` as a formatted string + pub fn as_temporal_string(&self, options: ToStringRoundingOptions) -> TemporalResult { + if options.smallest_unit == Some(Unit::Hour) || options.smallest_unit == Some(Unit::Minute) + { + return Err(TemporalError::range().with_message( + "string rounding options cannot have hour or minute smallest unit.", + )); + } + + let resolved_options = options.resolve()?; + if resolved_options.smallest_unit == Unit::Nanosecond + && resolved_options.increment == RoundingIncrement::ONE + { + let duration = duration_to_formattable(self, resolved_options.precision)?; + return Ok(duration.to_string()); + } + + let rounding_options = ResolvedRoundingOptions::from_to_string_options(&resolved_options); + + // 12. Let largestUnit be DefaultTemporalLargestUnit(duration). + let largest = self.default_largest_unit(); + // 13. Let internalDuration be ToInternalDurationRecord(duration). + let internal_duration = self.to_internal_duration_record(); + // 14. Let timeDuration be ? RoundTimeDuration(internalDuration.[[Time]], precision.[[Increment]], precision.[[Unit]], roundingMode). + let time_duration = internal_duration + .normalized_time_duration() + .round(rounding_options)?; + // 15. Set internalDuration to CombineDateAndTimeDuration(internalDuration.[[Date]], timeDuration). + let internal_duration = + InternalDurationRecord::combine(internal_duration.date(), time_duration); + // 16. Let roundedLargestUnit be LargerOfTwoTemporalUnits(largestUnit, second). + let rounded_largest_unit = largest.max(Unit::Second); + + // 17. Let roundedDuration be ? TemporalDurationFromInternal(internalDuration, roundedLargestUnit). + let rounded = Self::from_internal(internal_duration, rounded_largest_unit)?; + + // 18. Return TemporalDurationToString(roundedDuration, precision.[[Precision]]). + Ok(duration_to_formattable(&rounded, resolved_options.precision)?.to_string()) + } +} + +pub fn duration_to_formattable( + duration: &Duration, + precision: Precision, +) -> TemporalResult { + let sign = duration.sign(); + let duration = duration.abs(); + let date = duration.years() + duration.months() + duration.weeks() + duration.days(); + let date = if date != 0 { + Some(FormattableDateDuration { + years: duration.years() as u32, + months: duration.months() as u32, + weeks: duration.weeks() as u32, + days: duration.days() as u64, + }) + } else { + None + }; + + let hours = duration.hours().abs(); + let minutes = duration.minutes().abs(); + + let time = TimeDuration::from_components( + 0, + 0, + duration.seconds(), + duration.milliseconds(), + duration.microseconds(), + duration.nanoseconds(), + ); + + let seconds = time.seconds().unsigned_abs(); + let subseconds = time.subseconds().unsigned_abs(); + + let time = Some(FormattableTimeDuration::Seconds( + hours as u64, + minutes as u64, + seconds, + Some(subseconds), + )); + + Ok(FormattableDuration { + precision, + sign, + date, + time, + }) +} + +// TODO: Update, optimize, and fix the below. is_valid_duration should probably be generic over a T. + +const TWO_POWER_FIFTY_THREE: i128 = 9_007_199_254_740_992; +const MAX_SAFE_NS_PRECISION: i128 = TWO_POWER_FIFTY_THREE * 1_000_000_000; + +// NOTE: Can FiniteF64 optimize the duration_validation +/// Utility function to check whether the `Duration` fields are valid. +#[inline] +#[must_use] +#[allow(clippy::too_many_arguments)] +pub(crate) fn is_valid_duration( + years: i64, + months: i64, + weeks: i64, + days: i64, + hours: i64, + minutes: i64, + seconds: i64, + milliseconds: i64, + microseconds: i128, + nanoseconds: i128, +) -> bool { + // 1. Let sign be ! DurationSign(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds). + let set = [ + years, + months, + weeks, + days, + hours, + minutes, + seconds, + milliseconds, + microseconds.signum() as i64, + nanoseconds.signum() as i64, + ]; + let sign = duration_sign(&set); + // 2. For each value v of « years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds », do + for v in set { + // FiniteF64 must always be finite. + // a. If 𝔽(v) is not finite, return false. + // b. If v < 0 and sign > 0, return false. + if v < 0 && sign == Sign::Positive { + return false; + } + // c. If v > 0 and sign < 0, return false. + if v > 0 && sign == Sign::Negative { + return false; + } + } + // 3. If abs(years) ≥ 2**32, return false. + // n.b. u32::MAX is 2**32 - 1 + if years.saturating_abs() > u32::MAX as i64 { + return false; + }; + // 4. If abs(months) ≥ 2**32, return false. + if months.saturating_abs() > u32::MAX as i64 { + return false; + }; + // 5. If abs(weeks) ≥ 2**32, return false. + if weeks.saturating_abs() > u32::MAX as i64 { + return false; + }; + + // Work around https://github.com/boa-dev/temporal/issues/189 + // For the purpose of the validity check, we should normalize the i128 values + // to valid floating point values. This may round up! + // + // We only need to do this seconds and below, if any of the larger + // values are near MAX_SAFE_INTEGER then their seconds value will without question + // also be near MAX_SAFE_INTEGER. + let seconds = seconds as f64 as i64; + let milliseconds = milliseconds as f64 as i64; + let microseconds = microseconds as f64 as i128; + let nanoseconds = nanoseconds as f64 as i128; + + // 6. Let normalizedSeconds be days × 86,400 + hours × 3600 + minutes × 60 + seconds + // + ℝ(𝔽(milliseconds)) × 10**-3 + ℝ(𝔽(microseconds)) × 10**-6 + ℝ(𝔽(nanoseconds)) × 10**-9. + // 7. NOTE: The above step cannot be implemented directly using floating-point arithmetic. + // Multiplying by 10**-3, 10**-6, and 10**-9 respectively may be imprecise when milliseconds, + // microseconds, or nanoseconds is an unsafe integer. This multiplication can be implemented + // in C++ with an implementation of core::remquo() with sufficient bits in the quotient. + // String manipulation will also give an exact result, since the multiplication is by a power of 10. + // Seconds part + // TODO: Fix the below parts after clarification around behavior. + let normalized_nanoseconds = (days as i128 * NS_PER_DAY as i128) + + (hours as i128) * 3_600_000_000_000 + + minutes as i128 * 60_000_000_000 + + seconds as i128 * 1_000_000_000; + // Subseconds part + let normalized_subseconds_parts = (milliseconds as i128) + .saturating_mul(1_000_000) + .saturating_add(microseconds.saturating_mul(1_000)) + .saturating_add(nanoseconds); + + let total_normalized_seconds = + normalized_nanoseconds.saturating_add(normalized_subseconds_parts); + // 8. If abs(normalizedSeconds) ≥ 2**53, return false. + if total_normalized_seconds.saturating_abs() >= MAX_SAFE_NS_PRECISION { + return false; + } + + // 9. Return true. + true +} + +/// Utility function for determining the sign for the current set of `Duration` fields. +/// +/// Equivalent: 7.5.10 `DurationSign ( years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds )` +#[inline] +#[must_use] +pub(crate) fn duration_sign(set: &[i64]) -> Sign { + // 1. For each value v of « years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds », do + for v in set { + // a. If v < 0, return -1. + // b. If v > 0, return 1. + match (*v).cmp(&0) { + Ordering::Less => return Sign::Negative, + Ordering::Greater => return Sign::Positive, + _ => {} + } + } + // 2. Return 0. + Sign::Zero +} + +impl From for Duration { + fn from(value: DateDuration) -> Self { + Self { + sign: value.sign(), + years: value.years.unsigned_abs() as u32, + months: value.months.unsigned_abs() as u32, + weeks: value.weeks.unsigned_abs() as u32, + days: value.days.unsigned_abs(), + ..Default::default() + } + } +} + +// ==== FromStr trait impl ==== + +impl FromStr for Duration { + type Err = TemporalError; + + fn from_str(s: &str) -> Result { + Self::from_utf8(s.as_bytes()) + } +} diff --git a/src/builtins/core/duration/date.rs b/crates/temporal/src/builtins/core/duration/date.rs similarity index 100% rename from src/builtins/core/duration/date.rs rename to crates/temporal/src/builtins/core/duration/date.rs diff --git a/src/builtins/core/duration/normalized.rs b/crates/temporal/src/builtins/core/duration/normalized.rs similarity index 99% rename from src/builtins/core/duration/normalized.rs rename to crates/temporal/src/builtins/core/duration/normalized.rs index 9def7f7e0..9635ae7af 100644 --- a/src/builtins/core/duration/normalized.rs +++ b/crates/temporal/src/builtins/core/duration/normalized.rs @@ -406,7 +406,7 @@ struct NudgeWindow { } impl InternalDurationRecord { - /// `compute_and_adjust_nudge_window` in `temporal_rs` refers to step 1-12 of `NudgeToCalendarUnit`. + /// `compute_and_adjust_nudge_window` in `temporal` refers to step 1-12 of `NudgeToCalendarUnit`. fn compute_and_adjust_nudge_window( &self, sign: NonZeroSign, diff --git a/src/builtins/core/duration/tests.rs b/crates/temporal/src/builtins/core/duration/tests.rs similarity index 100% rename from src/builtins/core/duration/tests.rs rename to crates/temporal/src/builtins/core/duration/tests.rs diff --git a/crates/temporal/src/builtins/core/instant.rs b/crates/temporal/src/builtins/core/instant.rs new file mode 100644 index 000000000..542ce0951 --- /dev/null +++ b/crates/temporal/src/builtins/core/instant.rs @@ -0,0 +1,846 @@ +//! An implementation of the Temporal Instant. + +use alloc::string::String; +use core::{num::NonZeroU128, str::FromStr}; + +use crate::{ + builtins::core::{zoned_date_time::nanoseconds_to_formattable_offset_minutes, Duration}, + error::ErrorMessage, + iso::IsoDateTime, + options::{ + DifferenceOperation, DifferenceSettings, DisplayOffset, ResolvedRoundingOptions, + RoundingOptions, ToStringRoundingOptions, Unit, UnitGroup, + }, + parsers::{parse_instant, IxdtfStringBuilder}, + provider::TimeZoneProvider, + rounding::IncrementRounder, + unix_time::EpochNanoseconds, + Calendar, TemporalError, TemporalResult, TemporalUnwrap, TimeZone, +}; + +use ixdtf::records::UtcOffsetRecordOrZ; +use num_traits::Euclid; +use writeable::Writeable; + +use super::{ + duration::normalized::{InternalDurationRecord, TimeDuration}, + DateDuration, ZonedDateTime, +}; + +pub(crate) const NANOSECONDS_PER_SECOND: i64 = 1_000_000_000; +const NANOSECONDS_PER_MINUTE: i64 = 60 * NANOSECONDS_PER_SECOND; +const NANOSECONDS_PER_HOUR: i64 = 60 * NANOSECONDS_PER_MINUTE; + +/// The native Rust implementation of `Temporal.Instant`. +/// +/// Represents a precise moment in time measured as nanoseconds since the Unix epoch +/// (1970-01-01T00:00:00\[UTC\]). An `Instant` provides a universal timestamp +/// that represents the same moment regardless of timezone or calendar system. +/// +/// Use `Instant` when you need to record exact moments in time, measure elapsed time, +/// or work with high-precision timestamps. Unlike `PlainDateTime`, an `Instant` +/// represents an absolute point on the timeline. +/// +/// ## Examples +/// +/// ### Creating instants +/// +/// ```rust +/// use temporal::Instant; +/// +/// // From epoch nanoseconds (high-precision timestamps) +/// let precise_moment = Instant::try_new(1609459200000000000).unwrap(); +/// assert_eq!(precise_moment.epoch_milliseconds(), 1609459200000); +/// +/// // From epoch milliseconds (common in web applications) +/// let web_timestamp = Instant::from_epoch_milliseconds(1609459200000).unwrap(); +/// assert_eq!(web_timestamp.epoch_nanoseconds().as_i128(), 1609459200000000000); +/// ``` +/// +/// ### Parsing ISO 8601 instant strings +/// +/// ```rust +/// use temporal::Instant; +/// use core::str::FromStr; +/// +/// // Parse ISO 8601 instant strings (must include timezone info) +/// let instant = Instant::from_str("2024-03-15T14:30:45.123Z").unwrap(); +/// assert_eq!(instant.epoch_milliseconds(), 1710513045123); +/// +/// // Parse instants with different timezone notations +/// let instant2 = Instant::from_str("2024-03-15T14:30:45.123+00:00").unwrap(); +/// let instant3 = Instant::from_str("2024-03-15T14:30:45.123-00:00").unwrap(); +/// assert_eq!(instant, instant2); +/// assert_eq!(instant2, instant3); +/// ``` +/// +/// ### Instant arithmetic +/// +/// ```rust +/// use temporal::{Instant, Duration}; +/// use core::str::FromStr; +/// +/// let instant = Instant::try_new(1609459200000000000).unwrap(); // 2021-01-01T00:00:00Z +/// +/// // Add time duration (only time durations, not date durations) +/// let later = instant.add(&Duration::from_str("PT1H30M").unwrap()).unwrap(); +/// let expected_ns = 1609459200000000000 + (1 * 3600 + 30 * 60) * 1_000_000_000; +/// assert_eq!(later.epoch_nanoseconds().as_i128(), expected_ns); +/// +/// // Calculate difference between instants +/// let earlier = Instant::try_new(1609459200000000000 - 3600_000_000_000).unwrap(); +/// let duration = earlier.until(&instant, Default::default()).unwrap(); +/// assert_eq!(duration.seconds(), 3600); +/// ``` +/// +/// ### Instant precision and limits +/// +/// ```rust +/// use temporal::Instant; +/// +/// // Instants have well-defined limits based on approximately 100 million days before/after Unix epoch +/// let max_ns = 8_640_000_000_000_000_000_000i128; // ~100M days * 24 * 60 * 60 * 1e9 +/// let min_ns = -max_ns; +/// +/// let max_instant = Instant::try_new(max_ns).unwrap(); +/// let min_instant = Instant::try_new(min_ns).unwrap(); +/// +/// // Values outside the range will fail +/// assert!(Instant::try_new(max_ns + 1).is_err()); +/// assert!(Instant::try_new(min_ns - 1).is_err()); +/// ``` +/// +/// ### Converting to ZonedDateTime (requires provider) +/// +/// ```rust,ignore +/// use temporal::{Instant, TimeZone, Calendar}; +/// +/// let instant = Instant::try_new(1609459200000000000).unwrap(); +/// let timezone = TimeZone::try_from_str("America/New_York").unwrap(); +/// +/// // Convert to a zoned date-time for display in local time +/// let zdt = instant.to_zoned_date_time_iso(timezone); +/// assert_eq!(zdt.timezone().identifier(), "America/New_York"); +/// assert_eq!(zdt.calendar().identifier(), "iso8601"); +/// ``` +/// +/// ### Rounding instants +/// +/// ```rust +/// use temporal::{Instant, options::{RoundingOptions, Unit}}; +/// +/// let instant = Instant::try_new(1609459245123456789).unwrap(); // some precise moment +/// +/// let mut opts = RoundingOptions::default(); +/// opts.smallest_unit = Some(Unit::Second); +/// let rounded = instant.round(opts).unwrap(); +/// +/// // Rounded to the nearest second +/// assert_eq!(rounded.epoch_nanoseconds().as_i128() % 1_000_000_000, 0); +/// ``` +/// +/// ## Reference +/// +/// For more information, see the [MDN documentation][mdn-instant]. +/// +/// [mdn-instant]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Instant +#[non_exhaustive] +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] +pub struct Instant(EpochNanoseconds); + +impl From for Instant { + fn from(value: EpochNanoseconds) -> Self { + Self(value) + } +} + +// ==== Private API ==== + +impl Instant { + /// Adds a `TimeDuration` to the current `Instant`. + /// + /// Temporal-Proposal equivalent: `AddInstant`. + pub(crate) fn add_to_instant(&self, duration: &TimeDuration) -> TemporalResult { + // 1. Let result be AddTimeDurationToEpochNanoseconds(timeDuration, epochNanoseconds). + let result = self.epoch_nanoseconds().0 + duration.0; + let ns = EpochNanoseconds::from(result); + // 2. If IsValidEpochNanoseconds(result) is false, throw a RangeError exception. + ns.check_validity()?; + // 3. Return result. + Ok(Self::from(ns)) + } + + /// 8.5.10 AddDurationToInstant ( operation, instant, temporalDurationLike ) + pub(crate) fn add_duration_to_instant(&self, duration: &Duration) -> TemporalResult { + // 3. Let largestUnit be DefaultTemporalLargestUnit(duration). + let largest_unit = duration.default_largest_unit(); + // 4. If TemporalUnitCategory(largestUnit) is date, throw a RangeError exception. + if largest_unit.is_date_unit() { + return Err(TemporalError::range().with_enum(ErrorMessage::LargestUnitCannotBeDateUnit)); + } + // 5. Let internalDuration be ToInternalDurationRecordWith24HourDays(duration). + let internal_duration = InternalDurationRecord::from_duration_with_24_hour_days(duration)?; + // 6. Let ns be ? AddInstant(instant.[[EpochNanoseconds]], internalDuration.[[Time]]). + // 7. Return ! CreateTemporalInstant(ns). + self.add_to_instant(&internal_duration.normalized_time_duration()) + } + + /// `temporal` equivalent of `DifferenceInstant` + pub(crate) fn diff_instant_internal( + &self, + other: &Self, + resolved_options: ResolvedRoundingOptions, + ) -> TemporalResult { + let diff = TimeDuration::from_nanosecond_difference(other.as_i128(), self.as_i128())?; + let normalized_time = diff.round(resolved_options)?; + InternalDurationRecord::new(DateDuration::default(), normalized_time) + } + + // TODO: Add test for `diff_instant`. + // NOTE(nekevss): As the below is internal, op will be left as a boolean + // with a `since` op being true and `until` being false. + /// Internal operation to handle `since` and `until` difference ops. + pub(crate) fn diff_instant( + &self, + op: DifferenceOperation, + other: &Self, + options: DifferenceSettings, + ) -> TemporalResult { + // 1. If operation is since, let sign be -1. Otherwise, let sign be 1. + // 2. Set other to ? ToTemporalInstant(other). + // 3. Let resolvedOptions be ? SnapshotOwnProperties(? GetOptionsObject(options), null). + // 4. Let settings be ? GetDifferenceSettings(operation, resolvedOptions, time, « », "nanosecond", "second"). + let resolved_options = ResolvedRoundingOptions::from_diff_settings( + options, + op, + UnitGroup::Time, + Unit::Second, + Unit::Nanosecond, + )?; + + // Below are the steps from Difference Instant. + // 5. Let diffRecord be DifferenceInstant(instant.[[Nanoseconds]], other.[[Nanoseconds]], + // settings.[[RoundingIncrement]], settings.[[SmallestUnit]], settings.[[RoundingMode]]). + let internal_record = self.diff_instant_internal(other, resolved_options)?; + + let result = Duration::from_internal(internal_record, resolved_options.largest_unit)?; + + // 6. Let norm be diffRecord.[[TimeDuration]]. + // 7. Let result be ! BalanceTimeDuration(norm, settings.[[LargestUnit]]). + // 8. Return ! CreateTemporalDuration(0, 0, 0, 0, sign × result.[[Hours]], sign × result.[[Minutes]], sign × result.[[Seconds]], sign × result.[[Milliseconds]], sign × result.[[Microseconds]], sign × result.[[Nanoseconds]]). + match op { + DifferenceOperation::Until => Ok(result), + DifferenceOperation::Since => Ok(result.negated()), + } + } + + /// Rounds a current `Instant` given the resolved options, returning a `BigInt` result. + pub(crate) fn round_instant( + &self, + resolved_options: ResolvedRoundingOptions, + ) -> TemporalResult { + let increment = resolved_options.increment.as_extended_increment(); + let increment = match resolved_options.smallest_unit { + Unit::Hour => increment + .checked_mul(NonZeroU128::new(NANOSECONDS_PER_HOUR as u128).temporal_unwrap()?), + Unit::Minute => increment + .checked_mul(NonZeroU128::new(NANOSECONDS_PER_MINUTE as u128).temporal_unwrap()?), + Unit::Second => increment + .checked_mul(NonZeroU128::new(NANOSECONDS_PER_SECOND as u128).temporal_unwrap()?), + Unit::Millisecond => { + increment.checked_mul(NonZeroU128::new(1_000_000).temporal_unwrap()?) + } + Unit::Microsecond => increment.checked_mul(NonZeroU128::new(1_000).temporal_unwrap()?), + Unit::Nanosecond => Some(increment), + _ => { + return Err(TemporalError::range() + .with_message("Invalid unit provided for Instant::round.")) + } + }; + + // NOTE: Potentially remove the below and just `temporal_unwrap` + let Some(increment) = increment else { + return Err(TemporalError::range().with_message("Increment exceeded a valid range.")); + }; + + let rounded = IncrementRounder::::from_signed_num(self.as_i128(), increment)? + .round_as_if_positive(resolved_options.rounding_mode); + + Ok(rounded) + } + + // Utility for converting `Instant` to `i128`. + pub fn as_i128(&self) -> i128 { + self.epoch_nanoseconds().0 + } +} + +// ==== Public API ==== + +impl Instant { + /// Create a new validated `Instant`. + #[inline] + pub fn try_new(nanoseconds: i128) -> TemporalResult { + let ns = EpochNanoseconds::from(nanoseconds); + ns.check_validity()?; + Ok(Self::from(ns)) + } + + /// Creates a new `Instant` from the provided Epoch millisecond value. + pub fn from_epoch_milliseconds(epoch_milliseconds: i64) -> TemporalResult { + // Input at most is `i64::MAX`. This means guarantees that the + // transition into nanoseconds MUST be in range of `i128` + let epoch_nanos = (epoch_milliseconds as i128) * 1_000_000; + Self::try_new(epoch_nanos) + } + + // Converts a UTF-8 encoded string into a `Instant`. + pub fn from_utf8(s: &[u8]) -> TemporalResult { + let ixdtf_record = parse_instant(s)?; + + // Find the offset + let ns_offset = match ixdtf_record.offset { + UtcOffsetRecordOrZ::Offset(offset) => { + let ns = offset + .fraction() + .map(|x| { + x.to_nanoseconds().ok_or( + TemporalError::range() + .with_enum(ErrorMessage::FractionalTimeMoreThanNineDigits), + ) + }) + .transpose()? + .unwrap_or(0); + (offset.hour() as i64 * NANOSECONDS_PER_HOUR + + i64::from(offset.minute()) * NANOSECONDS_PER_MINUTE + + i64::from(offset.second().unwrap_or(0)) * NANOSECONDS_PER_SECOND + + i64::from(ns)) + * offset.sign() as i64 + } + UtcOffsetRecordOrZ::Z => 0, + }; + + let time_nanoseconds = ixdtf_record + .time + .fraction + .map(|x| { + x.to_nanoseconds().ok_or( + TemporalError::range() + .with_enum(ErrorMessage::FractionalTimeMoreThanNineDigits), + ) + }) + .transpose()? + .unwrap_or(0); + let (millisecond, rem) = time_nanoseconds.div_rem_euclid(&1_000_000); + let (microsecond, nanosecond) = rem.div_rem_euclid(&1_000); + + let balanced = IsoDateTime::balance( + ixdtf_record.date.year, + ixdtf_record.date.month.into(), + ixdtf_record.date.day.into(), + ixdtf_record.time.hour.into(), + ixdtf_record.time.minute.into(), + ixdtf_record.time.second.clamp(0, 59).into(), + millisecond.into(), + microsecond.into(), + i128::from(nanosecond) - i128::from(ns_offset), + ); + + let nanoseconds = balanced.as_nanoseconds(); + + nanoseconds.check_validity()?; + + Ok(Self(nanoseconds)) + } + + /// Adds a `Duration` to the current `Instant`, returning an error if the `Duration` + /// contains a `DateDuration`. + #[inline] + pub fn add(&self, duration: &Duration) -> TemporalResult { + self.add_duration_to_instant(duration) + } + + /// Subtract a `Duration` to the current `Instant`, returning an error if the `Duration` + /// contains a `DateDuration`. + #[inline] + pub fn subtract(&self, duration: &Duration) -> TemporalResult { + self.add_duration_to_instant(&duration.negated()) + } + + /// Returns a `Duration` representing the duration since provided `Instant` + #[inline] + pub fn since(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { + self.diff_instant(DifferenceOperation::Since, other, settings) + } + + /// Returns a `Duration` representing the duration until provided `Instant` + #[inline] + pub fn until(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { + self.diff_instant(DifferenceOperation::Until, other, settings) + } + + /// Returns an `Instant` by rounding the current `Instant` according to the provided settings. + #[inline] + pub fn round(&self, options: RoundingOptions) -> TemporalResult { + let resolved_options = ResolvedRoundingOptions::from_instant_options(options)?; + + let round_result = self.round_instant(resolved_options)?; + Self::try_new(round_result) + } + + /// Returns the `epochMilliseconds` value for this `Instant`. + #[inline] + #[must_use] + pub fn epoch_milliseconds(&self) -> i64 { + self.as_i128().div_euclid(1_000_000) as i64 + } + + /// Returns the [`EpochNanoseconds`] value for this `Instant`. + #[inline] + #[must_use] + pub fn epoch_nanoseconds(&self) -> &EpochNanoseconds { + &self.0 + } + + /// Returns a [`ZonedDateTime`] for the current `Instant`. + #[inline] + pub fn to_zoned_date_time_iso_with_provider( + &self, + time_zone: TimeZone, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + ZonedDateTime::new_unchecked_with_provider(*self, time_zone, Calendar::ISO, provider) + } +} + +// ==== Instant Provider API ==== + +impl Instant { + /// Returns an RFC9557 IXDTF string representing the current `Instant`. + pub fn to_ixdtf_string_with_provider( + &self, + timezone: Option, + options: ToStringRoundingOptions, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + self.to_ixdtf_writeable_with_provider(timezone, options, provider) + .map(|x| x.write_to_string().into()) + } + + /// Returns a [`Writeable`] for formatting the current `Instant` in RFC9557's IXDTF. + pub fn to_ixdtf_writeable_with_provider( + &self, + timezone: Option, + options: ToStringRoundingOptions, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + let resolved_options = options.resolve()?; + let round = self.round_instant(ResolvedRoundingOptions::from_to_string_options( + &resolved_options, + ))?; + let rounded_instant = Instant::try_new(round)?; + + let mut ixdtf = IxdtfStringBuilder::default(); + let datetime = if let Some(timezone) = timezone { + let datetime = timezone.get_iso_datetime_for(&rounded_instant, provider)?; + let nanoseconds = timezone.get_offset_nanos_for(rounded_instant.as_i128(), provider)?; + let (sign, hour, minute) = nanoseconds_to_formattable_offset_minutes(nanoseconds)?; + ixdtf = ixdtf.with_minute_offset(sign, hour, minute, DisplayOffset::Auto); + datetime + } else { + ixdtf = ixdtf.with_z(DisplayOffset::Auto); + TimeZone::utc_with_provider(provider) + .get_iso_datetime_for(&rounded_instant, provider)? + }; + let builder = ixdtf + .with_date(datetime.date) + .with_time(datetime.time, resolved_options.precision); + + Ok(builder) + } +} + +// ==== Utility Functions ==== + +impl FromStr for Instant { + type Err = TemporalError; + + fn from_str(s: &str) -> Result { + Self::from_utf8(s.as_bytes()) + } +} + +// ==== Instant Tests ==== + +#[cfg(test)] +mod tests { + + use core::str::FromStr; + + use crate::{ + builtins::{core::Instant, duration::duration_sign}, + options::{DifferenceSettings, RoundingMode, Unit}, + partial::PartialDuration, + unix_time::EpochNanoseconds, + Duration, NS_MAX_INSTANT, NS_MIN_INSTANT, + }; + + #[test] + #[allow(clippy::float_cmp)] + fn max_and_minimum_instant_bounds() { + // This test is primarily to assert that the `expect` in the epoch methods is + // valid, i.e., a valid instant is within the range of an f64. + let max = NS_MAX_INSTANT; + let min = NS_MIN_INSTANT; + let max_instant = Instant::try_new(max).unwrap(); + let min_instant = Instant::try_new(min).unwrap(); + + assert_eq!(max_instant.epoch_nanoseconds().0, max); + assert_eq!(min_instant.epoch_nanoseconds().0, min); + + let max_plus_one = NS_MAX_INSTANT + 1; + let min_minus_one = NS_MIN_INSTANT - 1; + + assert!(Instant::try_new(max_plus_one).is_err()); + assert!(Instant::try_new(min_minus_one).is_err()); + } + + #[test] + fn max_min_epoch_millseconds() { + // Assert the casting is valid. + let max = NS_MAX_INSTANT; + let min = NS_MIN_INSTANT; + let max_instant = Instant::try_new(max).unwrap(); + let min_instant = Instant::try_new(min).unwrap(); + + // Assert max and min are valid for casting. + assert_eq!( + max_instant.epoch_milliseconds(), + max.div_euclid(1_000_000) as i64 + ); + assert_eq!( + min_instant.epoch_milliseconds(), + min.div_euclid(1_000_000) as i64 + ); + // Assert the max and min are not being truncated. + assert_ne!(max_instant.epoch_milliseconds(), i64::MAX); + assert_ne!(max_instant.epoch_milliseconds(), i64::MIN); + } + + #[test] + fn instant_parsing_limits() { + // valid cases + let valid_str = "-271821-04-20T00:00Z"; + let instant = Instant::from_str(valid_str).unwrap(); + assert_eq!( + instant, + Instant::from(EpochNanoseconds(-8640000000000000000000)) + ); + + let valid_str = "-271821-04-19T23:00-01:00"; + let instant = Instant::from_str(valid_str).unwrap(); + assert_eq!( + instant, + Instant::from(EpochNanoseconds(-8640000000000000000000)) + ); + + let valid_str = "-271821-04-19T00:00:00.000000001-23:59:59.999999999"; + let instant = Instant::from_str(valid_str).unwrap(); + assert_eq!( + instant, + Instant::from(EpochNanoseconds(-8640000000000000000000)) + ); + + let valid_str = "+275760-09-13T00:00Z"; + let instant = Instant::from_str(valid_str).unwrap(); + assert_eq!( + instant, + Instant::from(EpochNanoseconds(8640000000000000000000)) + ); + + // invalid cases + let invalid_str = "-271821-04-19T00:00Z"; + let instant = Instant::from_str(invalid_str); + assert!(instant.is_err()); + + let invalid_str = "-271821-04-19T23:59:59.999999999Z"; + let instant = Instant::from_str(invalid_str); + assert!(instant.is_err()); + + let invalid_str = "-271821-04-19T23:00-00:59:59.999999999"; + let instant = Instant::from_str(invalid_str); + assert!(instant.is_err()); + } + + #[test] + fn basic_instant_until() { + let init_diff_setting = |unit: Unit| -> DifferenceSettings { + DifferenceSettings { + largest_unit: Some(Unit::Hour), + rounding_mode: Some(RoundingMode::Ceil), + increment: None, + smallest_unit: Some(unit), + } + }; + + let assert_duration = |td: Duration, expected: (i64, i64, i64, i64, i128, i128)| { + assert_eq!( + td, + Duration { + sign: duration_sign(&[ + expected.0, + expected.1, + expected.2, + expected.3, + expected.4 as i64, + expected.5 as i64 + ]), + hours: expected.0.unsigned_abs(), + minutes: expected.1.unsigned_abs(), + seconds: expected.2.unsigned_abs(), + milliseconds: expected.3.unsigned_abs(), + microseconds: expected.4.unsigned_abs(), + nanoseconds: expected.5.unsigned_abs(), + ..Default::default() + } + ) + }; + + let earlier = Instant::try_new( + 217_178_610_123_456_789, /* 1976-11-18T15:23:30.123456789Z */ + ) + .unwrap(); + let later = Instant::try_new( + 1_572_345_998_271_986_289, /* 2019-10-29T10:46:38.271986289Z */ + ) + .unwrap(); + + let positive_result = earlier + .until(&later, init_diff_setting(Unit::Hour)) + .unwrap(); + assert_duration(positive_result, (376436, 0, 0, 0, 0, 0)); + let negative_result = later + .until(&earlier, init_diff_setting(Unit::Hour)) + .unwrap(); + assert_duration(negative_result, (-376435, 0, 0, 0, 0, 0)); + + let positive_result = earlier + .until(&later, init_diff_setting(Unit::Minute)) + .unwrap(); + assert_duration(positive_result, (376435, 24, 0, 0, 0, 0)); + let negative_result = later + .until(&earlier, init_diff_setting(Unit::Minute)) + .unwrap(); + assert_duration(negative_result, (-376435, -23, 0, 0, 0, 0)); + + // ... Skip to lower units ... + + let positive_result = earlier + .until(&later, init_diff_setting(Unit::Microsecond)) + .unwrap(); + assert_duration(positive_result, (376435, 23, 8, 148, 530, 0)); + let negative_result = later + .until(&earlier, init_diff_setting(Unit::Microsecond)) + .unwrap(); + assert_duration(negative_result, (-376435, -23, -8, -148, -529, 0)); + + let positive_result = earlier + .until(&later, init_diff_setting(Unit::Nanosecond)) + .unwrap(); + assert_duration(positive_result, (376435, 23, 8, 148, 529, 500)); + let negative_result = later + .until(&earlier, init_diff_setting(Unit::Nanosecond)) + .unwrap(); + assert_duration(negative_result, (-376435, -23, -8, -148, -529, -500)); + } + + #[test] + fn basic_instant_since() { + let init_diff_setting = |unit: Unit| -> DifferenceSettings { + DifferenceSettings { + largest_unit: Some(Unit::Hour), + rounding_mode: Some(RoundingMode::Ceil), + increment: None, + smallest_unit: Some(unit), + } + }; + + let assert_duration = |td: Duration, expected: (i64, i64, i64, i64, i128, i128)| { + assert_eq!( + td, + Duration { + sign: duration_sign(&[ + expected.0, + expected.1, + expected.2, + expected.3, + expected.4 as i64, + expected.5 as i64 + ]), + hours: expected.0.unsigned_abs(), + minutes: expected.1.unsigned_abs(), + seconds: expected.2.unsigned_abs(), + milliseconds: expected.3.unsigned_abs(), + microseconds: expected.4.unsigned_abs(), + nanoseconds: expected.5.unsigned_abs(), + ..Default::default() + } + ) + }; + + let earlier = Instant::try_new( + 217_178_610_123_456_789, /* 1976-11-18T15:23:30.123456789Z */ + ) + .unwrap(); + let later = Instant::try_new( + 1_572_345_998_271_986_289, /* 2019-10-29T10:46:38.271986289Z */ + ) + .unwrap(); + + let positive_result = later + .since(&earlier, init_diff_setting(Unit::Hour)) + .unwrap(); + assert_duration(positive_result, (376436, 0, 0, 0, 0, 0)); + let negative_result = earlier + .since(&later, init_diff_setting(Unit::Hour)) + .unwrap(); + assert_duration(negative_result, (-376435, 0, 0, 0, 0, 0)); + + let positive_result = later + .since(&earlier, init_diff_setting(Unit::Minute)) + .unwrap(); + assert_duration(positive_result, (376435, 24, 0, 0, 0, 0)); + let negative_result = earlier + .since(&later, init_diff_setting(Unit::Minute)) + .unwrap(); + assert_duration(negative_result, (-376435, -23, 0, 0, 0, 0)); + + // ... Skip to lower units ... + + let positive_result = later + .since(&earlier, init_diff_setting(Unit::Microsecond)) + .unwrap(); + assert_duration(positive_result, (376435, 23, 8, 148, 530, 0)); + let negative_result = earlier + .since(&later, init_diff_setting(Unit::Microsecond)) + .unwrap(); + assert_duration(negative_result, (-376435, -23, -8, -148, -529, 0)); + + let positive_result = later + .since(&earlier, init_diff_setting(Unit::Nanosecond)) + .unwrap(); + assert_duration(positive_result, (376435, 23, 8, 148, 529, 500)); + let negative_result = earlier + .since(&later, init_diff_setting(Unit::Nanosecond)) + .unwrap(); + assert_duration(negative_result, (-376435, -23, -8, -148, -529, -500)); + } + + // /test/built-ins/Temporal/Instant/prototype/add/cross-epoch.js + #[cfg(feature = "tzdb")] + #[test] + fn instant_add_across_epoch() { + use crate::builtins::core::Duration; + use crate::{ + options::ToStringRoundingOptions, partial::PartialDuration, tzdb::FsTzdbProvider, + }; + use core::str::FromStr; + + let instant = Instant::from_str("1969-12-25T12:23:45.678901234Z").unwrap(); + let one = instant + .subtract( + &Duration::from_partial_duration(PartialDuration { + hours: Some(240.into()), + nanoseconds: Some(800.into()), + ..Default::default() + }) + .unwrap(), + ) + .unwrap(); + let two = instant + .add( + &Duration::from_partial_duration(PartialDuration { + hours: Some(240.into()), + nanoseconds: Some(800.into()), + ..Default::default() + }) + .unwrap(), + ) + .unwrap(); + let three = two + .subtract( + &Duration::from_partial_duration(PartialDuration { + hours: Some(480.into()), + nanoseconds: Some(1600.into()), + ..Default::default() + }) + .unwrap(), + ) + .unwrap(); + let four = one + .add( + &Duration::from_partial_duration(PartialDuration { + hours: Some(480.into()), + nanoseconds: Some(1600.into()), + ..Default::default() + }) + .unwrap(), + ) + .unwrap(); + + let one_comp = Instant::from_str("1969-12-15T12:23:45.678900434Z").unwrap(); + let two_comp = Instant::from_str("1970-01-04T12:23:45.678902034Z").unwrap(); + + // Assert the comparisons all hold. + assert_eq!(one, one_comp); + assert_eq!(two, two_comp); + assert_eq!(three, one); + assert_eq!(four, two); + + // Assert the to_string is valid. + let provider = &FsTzdbProvider::default(); + let inst_string = instant + .to_ixdtf_string_with_provider(None, ToStringRoundingOptions::default(), provider) + .unwrap(); + let one_string = one + .to_ixdtf_string_with_provider(None, ToStringRoundingOptions::default(), provider) + .unwrap(); + let two_string = two + .to_ixdtf_string_with_provider(None, ToStringRoundingOptions::default(), provider) + .unwrap(); + + assert_eq!(&inst_string, "1969-12-25T12:23:45.678901234Z"); + assert_eq!(&one_string, "1969-12-15T12:23:45.678900434Z"); + assert_eq!(&two_string, "1970-01-04T12:23:45.678902034Z"); + } + + // Adapted from add[subtract]/minimum-maximum-instant.js + #[test] + fn instant_add_subtract_max_min() { + let min = Instant::try_new(-86_40000_00000_00000_00000).unwrap(); + let max = Instant::try_new(86_40000_00000_00000_00000).unwrap(); + + let zero = Duration::from_partial_duration(PartialDuration::default().with_nanoseconds(0)) + .unwrap(); + let one = Duration::from_partial_duration(PartialDuration::default().with_nanoseconds(1)) + .unwrap(); + let neg_one = + Duration::from_partial_duration(PartialDuration::default().with_nanoseconds(-1)) + .unwrap(); + // Adding/subtracting zero does not cross max/min boundary. + assert_eq!(min.add(&zero).unwrap(), min); + assert_eq!(min.subtract(&zero).unwrap(), min); + + // Addition or subtraction crosses boundary. + assert!(max.add(&one).is_err()); + assert!(max.subtract(&neg_one).is_err()); + assert!(min.add(&neg_one).is_err()); + assert!(min.subtract(&one).is_err()); + + let insanely_large_partial = + PartialDuration::default().with_nanoseconds(-86_40000_00000_00000_00000 * 2); + let large_duration = Duration::from_partial_duration(insanely_large_partial).unwrap(); + assert_eq!(min.subtract(&large_duration).unwrap(), max); + assert_eq!(max.add(&large_duration).unwrap(), min); + } +} diff --git a/src/builtins/core/mod.rs b/crates/temporal/src/builtins/core/mod.rs similarity index 100% rename from src/builtins/core/mod.rs rename to crates/temporal/src/builtins/core/mod.rs diff --git a/src/builtins/core/now.rs b/crates/temporal/src/builtins/core/now.rs similarity index 100% rename from src/builtins/core/now.rs rename to crates/temporal/src/builtins/core/now.rs diff --git a/crates/temporal/src/builtins/core/plain_date.rs b/crates/temporal/src/builtins/core/plain_date.rs new file mode 100644 index 000000000..15be81bd2 --- /dev/null +++ b/crates/temporal/src/builtins/core/plain_date.rs @@ -0,0 +1,1107 @@ +//! This module implements `PlainDate` and any directly related algorithms. + +use crate::error::ErrorMessage; +use crate::parsed_intermediates::ParsedDate; +use crate::{ + builtins::{ + calendar::{CalendarFields, YearMonthCalendarFields}, + core::{ + calendar::Calendar, duration::DateDuration, Duration, PlainDateTime, PlainTime, + ZonedDateTime, + }, + }, + iso::{IsoDate, IsoDateTime, IsoTime}, + options::{ + DifferenceOperation, DifferenceSettings, Disambiguation, DisplayCalendar, Overflow, + ResolvedRoundingOptions, Unit, UnitGroup, + }, + parsers::IxdtfStringBuilder, + provider::{NeverProvider, TimeZoneProvider}, + unix_time::EpochNanoseconds, + MonthCode, TemporalError, TemporalResult, TimeZone, +}; +use alloc::string::String; +use core::{cmp::Ordering, str::FromStr}; +use icu_calendar::AnyCalendarKind; +use writeable::Writeable; + +use super::{duration::normalized::InternalDurationRecord, PlainMonthDay, PlainYearMonth}; +use tinystr::TinyAsciiStr; + +// TODO (potentially): Bump era up to TinyAsciiStr<18> to accomodate +// "ethiopic-amete-alem". TODO: PrepareTemporalFields expects a type +// error to be thrown when all partial fields are None/undefined. +/// A partial PlainDate that may or may not be complete. +#[derive(Debug, Default, Clone, PartialEq)] +pub struct PartialDate { + /// The calendar fields representing a calendar date. + pub calendar_fields: CalendarFields, + /// The calendar of this `PartialDate` + pub calendar: Calendar, +} + +/// Convenience methods for building a `PartialDate` +impl PartialDate { + pub const fn new() -> Self { + Self { + calendar_fields: CalendarFields { + year: None, + month: None, + month_code: None, + day: None, + era: None, + era_year: None, + }, + calendar: Calendar::new(AnyCalendarKind::Iso), + } + } + + pub const fn with_era(mut self, era: Option>) -> Self { + self.calendar_fields.era = era; + self + } + + pub const fn with_era_year(mut self, era_year: Option) -> Self { + self.calendar_fields.era_year = era_year; + self + } + + pub const fn with_year(mut self, year: Option) -> Self { + self.calendar_fields.year = year; + self + } + + pub const fn with_month(mut self, month: Option) -> Self { + self.calendar_fields.month = month; + self + } + + pub const fn with_month_code(mut self, month_code: Option) -> Self { + self.calendar_fields.month_code = month_code; + self + } + + pub const fn with_day(mut self, day: Option) -> Self { + self.calendar_fields.day = day; + self + } + + pub const fn with_calendar(mut self, calendar: Calendar) -> Self { + self.calendar = calendar; + self + } +} + +/// The native Rust implementation of `Temporal.PlainDate`. +/// +/// Represents a calendar date without any time or timezone +/// information. Useful for dates where the specific time of day doesn't matter, +/// such as deadlines, birth dates, or historical events. +/// +/// Uses the ISO 8601 calendar (proleptic Gregorian calendar) by default, with +/// support for other calendar systems when needed. +/// +/// ## Examples +/// +/// ### Creating dates +/// +/// ```rust +/// use temporal::{PlainDate, Calendar}; +/// +/// // Create a date using the ISO calendar +/// let christmas = PlainDate::try_new_iso(2024, 12, 25).unwrap(); +/// assert_eq!(christmas.year(), 2024); +/// assert_eq!(christmas.month(), 12); +/// assert_eq!(christmas.day(), 25); +/// +/// // Explicit calendar specification +/// let date = PlainDate::try_new(2024, 12, 25, Calendar::default()).unwrap(); +/// assert_eq!(date.year(), 2024); +/// assert_eq!(christmas, date); // Both represent the same date +/// ``` +/// +/// ### Date arithmetic operations +/// +/// ```rust +/// use temporal::{PlainDate, Duration}; +/// use core::str::FromStr; +/// +/// let start = PlainDate::try_new_iso(2024, 1, 15).unwrap(); +/// +/// // Add one month +/// let later = start.add(&Duration::from_str("P1M").unwrap(), None).unwrap(); +/// assert_eq!(later.month(), 2); // Results in 2024-02-15 +/// assert_eq!(later.day(), 15); +/// +/// // Calculate duration between dates +/// let new_year = PlainDate::try_new_iso(2024, 1, 1).unwrap(); +/// let diff = new_year.until(&start, Default::default()).unwrap(); +/// assert_eq!(diff.days(), 14); +/// ``` +/// +/// ### Parsing ISO 8601 date strings +/// +/// ```rust +/// use temporal::PlainDate; +/// use core::str::FromStr; +/// +/// // Standard ISO date format +/// let date = PlainDate::from_str("2024-03-15").unwrap(); +/// assert_eq!(date.year(), 2024); +/// assert_eq!(date.month(), 3); +/// assert_eq!(date.day(), 15); +/// +/// // With explicit calendar annotation +/// let date2 = PlainDate::from_str("2024-03-15[u-ca=iso8601]").unwrap(); +/// assert_eq!(date, date2); +/// ``` +/// +/// ## Reference +/// +/// For more information, see the [MDN documentation][mdn-plaindate]. +/// +/// [mdn-plaindate]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate +#[non_exhaustive] +#[derive(Debug, Default, Clone, PartialEq, Eq)] +pub struct PlainDate { + pub(crate) iso: IsoDate, + calendar: Calendar, +} + +impl core::fmt::Display for PlainDate { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + f.write_str(&self.to_ixdtf_string(DisplayCalendar::Auto)) + } +} + +// ==== Private API ==== + +impl PlainDate { + /// Create a new `PlainDate` with the date values and calendar slot. + #[inline] + #[must_use] + pub(crate) fn new_unchecked(iso: IsoDate, calendar: Calendar) -> Self { + Self { iso, calendar } + } + + // Updated: 2025-08-03 + /// Returns the date after adding the given duration to date. + /// + /// 3.5.14 `AddDurationToDate` + /// + /// More information: + /// + /// - [AO specification](https://tc39.es/proposal-temporal/#sec-temporal-adddurationtodate) + #[inline] + pub(crate) fn add_duration_to_date( + &self, + duration: &Duration, + overflow: Option, + ) -> TemporalResult { + // 3. If operation is subtract, set duration to CreateNegatedTemporalDuration(duration). + // 4. Let dateDuration be ToDateDurationRecordWithoutTime(duration). + // TODO: Look into why this is fallible, and make some adjustments + let date_duration = duration.to_date_duration_record_without_time()?; + // 5. Let resolvedOptions be ? GetOptionsObject(options). + // 6. Let overflow be ? GetTemporalOverflowOption(resolvedOptions). + let overflow = overflow.unwrap_or(Overflow::Constrain); + // 7. Let result be ? CalendarDateAdd(calendar, temporalDate.[[ISODate]], dateDuration, overflow). + // 8. Return ! CreateTemporalDate(result, calendar). + self.calendar() + .date_add(&self.iso, &date_duration, overflow) + } + + /// Returns a duration representing the difference between the dates one and two. + /// + /// Temporal Equivalent: 3.5.6 `DifferenceDate ( calendar, one, two, options )` + #[inline] + pub(crate) fn internal_diff_date( + &self, + other: &Self, + largest_unit: Unit, + ) -> TemporalResult { + if self.iso.year == other.iso.year + && self.iso.month == other.iso.month + && self.iso.day == other.iso.day + { + return Ok(Duration::default()); + } + + if largest_unit == Unit::Day { + let days = self.days_until(other); + return Ok(Duration::from(DateDuration::new(0, 0, 0, days.into())?)); + } + + self.calendar() + .date_until(&self.iso, &other.iso, largest_unit) + } + + /// Equivalent: DifferenceTemporalPlainDate + pub(crate) fn diff_date( + &self, + op: DifferenceOperation, + other: &Self, + settings: DifferenceSettings, + ) -> TemporalResult { + // 1. If operation is SINCE, let sign be -1. Otherwise, let sign be 1. + // 2. Set other to ? ToTemporalDate(other). + + // 3. If ? CalendarEquals(temporalDate.[[Calendar]], other.[[Calendar]]) is false, throw a RangeError exception. + if self.calendar().identifier() != other.calendar().identifier() { + return Err(TemporalError::range() + .with_message("Calendars are for difference operation are not the same.")); + } + + // 4. Let resolvedOptions be ? SnapshotOwnProperties(? GetOptionsObject(options), null). + // 5. Let settings be ? GetDifferenceSettings(operation, resolvedOptions, DATE, « », "day", "day"). + let resolved = ResolvedRoundingOptions::from_diff_settings( + settings, + op, + UnitGroup::Date, + Unit::Day, + Unit::Day, + )?; + + // 6. If temporalDate.[[ISOYear]] = other.[[ISOYear]], and temporalDate.[[ISOMonth]] = other.[[ISOMonth]], + // and temporalDate.[[ISODay]] = other.[[ISODay]], then + if self.iso == other.iso { + // a. Return ! CreateTemporalDuration(0, 0, 0, 0, 0, 0, 0, 0, 0, 0). + return Ok(Duration::default()); + } + + // 7. Let calendarRec be ? CreateCalendarMethodsRecord(temporalDate.[[Calendar]], « DATE-ADD, DATE-UNTIL »). + // 8. Perform ! CreateDataPropertyOrThrow(resolvedOptions, "largestUnit", settings.[[LargestUnit]]). + // 9. Let result be ? DifferenceDate(calendarRec, temporalDate, other, resolvedOptions). + let result = self.internal_diff_date(other, resolved.largest_unit)?; + + // 10. Let duration be ! CreateNormalizedDurationRecord(result.[[Years]], result.[[Months]], result.[[Weeks]], result.[[Days]], ZeroTimeDuration()). + let mut duration = InternalDurationRecord::from_date_duration(result.date())?; + // 11. If settings.[[SmallestUnit]] is "day" and settings.[[RoundingIncrement]] = 1, let roundingGranularityIsNoop be true; else let roundingGranularityIsNoop be false. + let rounding_granularity_is_noop = + resolved.smallest_unit == Unit::Day && resolved.increment.get() == 1; + // 12. If roundingGranularityIsNoop is false, then + if !rounding_granularity_is_noop { + let iso_date_time = IsoDateTime::new_unchecked(self.iso, IsoTime::default()); + let origin_epoch_ns = iso_date_time.as_nanoseconds(); + // a. Let destEpochNs be GetUTCEpochNanoseconds(other.[[ISOYear]], other.[[ISOMonth]], other.[[ISODay]], 0, 0, 0, 0, 0, 0). + let dest_epoch_ns = other.iso.as_nanoseconds(); + // b. Let dateTime be ISO Date-Time Record { [[Year]]: temporalDate.[[ISOYear]], [[Month]]: temporalDate.[[ISOMonth]], [[Day]]: temporalDate.[[ISODay]], [[Hour]]: 0, [[Minute]]: 0, [[Second]]: 0, [[Millisecond]]: 0, [[Microsecond]]: 0, [[Nanosecond]]: 0 }. + let dt = PlainDateTime::new_unchecked(iso_date_time, self.calendar.clone()); + // c. Set duration to ? RoundRelativeDuration(duration, destEpochNs, dateTime, calendarRec, unset, settings.[[LargestUnit]], settings.[[RoundingIncrement]], settings.[[SmallestUnit]], settings.[[RoundingMode]]). + duration = duration.round_relative_duration( + origin_epoch_ns, + dest_epoch_ns.0, + &dt, + Option::<(&TimeZone, &NeverProvider)>::None, + resolved, + )? + } + let result = Duration::from_internal(duration, Unit::Day)?; + // 13. Return ! CreateTemporalDuration(sign × duration.[[Years]], sign × duration.[[Months]], sign × duration.[[Weeks]], sign × duration.[[Days]], 0, 0, 0, 0, 0, 0). + match op { + DifferenceOperation::Until => Ok(result), + DifferenceOperation::Since => Ok(result.negated()), + } + } + + /// Abstract operation `DaysUntil` + /// + /// Calculates the epoch days between two `PlainDate`s + #[inline] + #[must_use] + fn days_until(&self, other: &Self) -> i32 { + // NOTE: cast to i32 is safe as both IsoDates must be in valid range. + debug_assert!(self.iso.check_within_limits().is_ok()); + debug_assert!(other.iso.check_within_limits().is_ok()); + (other.iso.to_epoch_days() - self.iso.to_epoch_days()) as i32 + } + + /// Returns this `PlainDate`'s ISO year value. + #[inline] + #[must_use] + pub(crate) const fn iso_year(&self) -> i32 { + self.iso.year + } + + /// Returns this `PlainDate`'s ISO month value. + #[inline] + #[must_use] + pub(crate) const fn iso_month(&self) -> u8 { + self.iso.month + } + + /// Returns this `PlainDate`'s ISO day value. + #[inline] + #[must_use] + pub(crate) const fn iso_day(&self) -> u8 { + self.iso.day + } +} + +// ==== Public API ==== + +impl PlainDate { + /// Creates a new `PlainDate` automatically constraining any values that may be invalid. + #[inline] + pub fn new(year: i32, month: u8, day: u8, calendar: Calendar) -> TemporalResult { + Self::new_with_overflow(year, month, day, calendar, Overflow::Constrain) + } + + /// Creates a new `PlainDate` with an ISO 8601 calendar automatically constraining any + /// values that may be invalid into a valid range. + #[inline] + pub fn new_iso(year: i32, month: u8, day: u8) -> TemporalResult { + Self::new(year, month, day, Calendar::default()) + } + + /// Creates a new `PlainDate` rejecting any date that may be invalid. + #[inline] + pub fn try_new(year: i32, month: u8, day: u8, calendar: Calendar) -> TemporalResult { + Self::new_with_overflow(year, month, day, calendar, Overflow::Reject) + } + + /// Creates a new `PlainDate` with an ISO 8601 calendar rejecting any date that may be invalid. + #[inline] + pub fn try_new_iso(year: i32, month: u8, day: u8) -> TemporalResult { + Self::try_new(year, month, day, Calendar::default()) + } + + /// Creates a new `PlainDate` with the specified overflow. + /// + /// This operation is the public facing API to Temporal's `RegulateIsoDate` + #[inline] + pub fn new_with_overflow( + year: i32, + month: u8, + day: u8, + calendar: Calendar, + overflow: Overflow, + ) -> TemporalResult { + let iso = IsoDate::new_with_overflow(year, month, day, overflow)?; + Ok(Self::new_unchecked(iso, calendar)) + } + + /// Create a `PlainDate` from a `PartialDate` + /// + /// ```rust + /// use temporal::{PlainDate, fields::CalendarFields, Calendar, partial::PartialDate}; + /// + /// let partial = PartialDate { + /// calendar_fields: CalendarFields::new() + /// .with_year(2000) + /// .with_month(13) + /// .with_day(2), + /// calendar: Calendar::ISO, + /// }; + /// + /// let date = PlainDate::from_partial(partial, None).unwrap(); + /// + /// assert_eq!(date.year(), 2000); + /// assert_eq!(date.month(), 12); + /// assert_eq!(date.day(), 2); + /// assert_eq!(date.calendar().identifier(), "iso8601"); + /// + /// ``` + #[inline] + pub fn from_partial(partial: PartialDate, overflow: Option) -> TemporalResult { + let year_check = partial.calendar_fields.year.is_some() + || (partial.calendar_fields.era.is_some() + && partial.calendar_fields.era_year.is_some()); + let month_check = + partial.calendar_fields.month.is_some() || partial.calendar_fields.month_code.is_some(); + if !year_check || !month_check || partial.calendar_fields.day.is_none() { + return Err(TemporalError::r#type().with_message("Invalid PlainDate fields provided.")); + } + + let overflow = overflow.unwrap_or_default(); + partial + .calendar + .date_from_fields(partial.calendar_fields, overflow) + } + + /// Converts a UTF-8 encoded string into a `PlainDate`. + pub fn from_utf8(s: &[u8]) -> TemporalResult { + let parsed = ParsedDate::from_utf8(s)?; + + Self::from_parsed(parsed) + } + + /// Creates a `PlainDate` from a [`ParsedDate`]. + pub fn from_parsed(parsed: ParsedDate) -> TemporalResult { + Self::try_new( + parsed.record.year, + parsed.record.month, + parsed.record.day, + Calendar::new(parsed.calendar), + ) + } + + /// Creates a `PlainDate` with values from a [`PartialDate`]. + pub fn with(&self, fields: CalendarFields, overflow: Option) -> TemporalResult { + if fields.is_empty() { + return Err(TemporalError::r#type().with_enum(ErrorMessage::EmptyFieldsIsInvalid)); + } + // 6. Let fieldsResult be ? PrepareCalendarFieldsAndFieldNames(calendarRec, temporalDate, « "day", "month", "monthCode", "year" »). + // 7. Let partialDate be ? PrepareTemporalFields(temporalDateLike, fieldsResult.[[FieldNames]], partial). + // 8. Let fields be ? CalendarMergeFields(calendarRec, fieldsResult.[[Fields]], partialDate). + // 9. Set fields to ? PrepareTemporalFields(fields, fieldsResult.[[FieldNames]], «»). + // 10. Return ? CalendarDateFromFields(calendarRec, fields, resolvedOptions). + let overflow = overflow.unwrap_or(Overflow::Constrain); + self.calendar.date_from_fields( + fields.with_fallback_date(self, self.calendar.kind())?, + overflow, + ) + } + + /// Creates a new `PlainDate` from the current `PlainDate` and the provided calendar. + pub fn with_calendar(&self, calendar: Calendar) -> Self { + Self::new_unchecked(self.iso, calendar) + } + + #[inline] + #[must_use] + /// Returns a reference to this `PlainDate`'s calendar slot. + pub fn calendar(&self) -> &Calendar { + &self.calendar + } + + /// 3.5.7 `IsValidISODate` + /// + /// Checks if the current date is a valid `ISODate`. + #[must_use] + pub fn is_valid(&self) -> bool { + self.iso.is_valid() + } + + /// Compares one `PlainDate` to another `PlainDate` using their + /// `IsoDate` representation. + /// + /// # Note on Ordering. + /// + /// `temporal` does not implement `PartialOrd`/`Ord` as `PlainDate` does + /// not fulfill all the conditions required to implement the traits. However, + /// it is possible to compare `PlainDate`'s as their `IsoDate` representation. + #[inline] + #[must_use] + pub fn compare_iso(&self, other: &Self) -> Ordering { + self.iso.cmp(&other.iso) + } + + #[inline] + /// Adds a [`Duration`] to the current `PlainDate`. + pub fn add(&self, duration: &Duration, overflow: Option) -> TemporalResult { + self.add_duration_to_date(duration, overflow) + } + + #[inline] + /// Subtracts a [`Duration`] from the current `PlainDate`. + pub fn subtract( + &self, + duration: &Duration, + overflow: Option, + ) -> TemporalResult { + self.add_duration_to_date(&duration.negated(), overflow) + } + + #[inline] + /// Returns a [`Duration`] representing the time from this `PlainDate` until the other `PlainDate`. + pub fn until(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { + self.diff_date(DifferenceOperation::Until, other, settings) + } + + #[inline] + /// Returns a [`Duration`] representing the time passed from this `PlainDate` since the other `PlainDate`. + pub fn since(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { + self.diff_date(DifferenceOperation::Since, other, settings) + } +} + +// ==== Calendar-derived Public API ==== + +impl PlainDate { + /// Returns the calendar year value. + pub fn year(&self) -> i32 { + self.calendar.year(&self.iso) + } + + /// Returns the calendar month value. + pub fn month(&self) -> u8 { + self.calendar.month(&self.iso) + } + + /// Returns the calendar month code value. + pub fn month_code(&self) -> MonthCode { + self.calendar.month_code(&self.iso) + } + + /// Returns the calendar day value. + pub fn day(&self) -> u8 { + self.calendar.day(&self.iso) + } + + /// Returns the calendar day of week value. + pub fn day_of_week(&self) -> u16 { + self.calendar.day_of_week(&self.iso) + } + + /// Returns the calendar day of year value. + pub fn day_of_year(&self) -> u16 { + self.calendar.day_of_year(&self.iso) + } + + /// Returns the calendar week of year value. + pub fn week_of_year(&self) -> Option { + self.calendar.week_of_year(&self.iso) + } + + /// Returns the calendar year of week value. + pub fn year_of_week(&self) -> Option { + self.calendar.year_of_week(&self.iso) + } + + /// Returns the calendar days in week value. + pub fn days_in_week(&self) -> u16 { + self.calendar.days_in_week(&self.iso) + } + + /// Returns the calendar days in month value. + pub fn days_in_month(&self) -> u16 { + self.calendar.days_in_month(&self.iso) + } + + /// Returns the calendar days in year value. + pub fn days_in_year(&self) -> u16 { + self.calendar.days_in_year(&self.iso) + } + + /// Returns the calendar months in year value. + pub fn months_in_year(&self) -> u16 { + self.calendar.months_in_year(&self.iso) + } + + /// Returns whether the `PlainDate` is in a leap year for the given calendar. + pub fn in_leap_year(&self) -> bool { + self.calendar.in_leap_year(&self.iso) + } + + /// Returns the era current `PlainDate`. + pub fn era(&self) -> Option> { + self.calendar.era(&self.iso) + } + + /// Returns the era year for the current `PlainDate`. + pub fn era_year(&self) -> Option { + self.calendar.era_year(&self.iso) + } +} + +// ==== ToX Methods ==== + +impl PlainDate { + /// Converts the current `PlainDate` into a [`PlainDateTime`]. + /// + /// # Notes + /// + /// If no time is provided, then the time will default to midnight. + #[inline] + pub fn to_plain_date_time(&self, time: Option) -> TemporalResult { + let time = time.unwrap_or_default(); + let iso = IsoDateTime::new(self.iso, time.iso)?; + Ok(PlainDateTime::new_unchecked(iso, self.calendar().clone())) + } + + /// Converts the current `PlainDate` into a [`PlainYearMonth`]. + #[inline] + pub fn to_plain_year_month(&self) -> TemporalResult { + let era = self + .era() + .map(|e| { + TinyAsciiStr::<19>::try_from_utf8(e.as_bytes()) + .map_err(|_| TemporalError::general("Parsing era failed")) + }) + .transpose()?; + let fields = YearMonthCalendarFields::new() + .with_year(self.year()) + .with_era(era) + .with_era_year(self.era_year()) + .with_month(self.month()) + .with_month_code(self.month_code()); + self.calendar() + .year_month_from_fields(fields, Overflow::Constrain) + } + + /// Converts the current `PlainDate` into a [`PlainMonthDay`]. + #[inline] + pub fn to_plain_month_day(&self) -> TemporalResult { + let overflow = Overflow::Constrain; + self.calendar().month_day_from_fields( + CalendarFields::default().with_fallback_date(self, self.calendar.kind())?, + overflow, + ) + } + + #[inline] + pub fn to_ixdtf_string(&self, display_calendar: DisplayCalendar) -> String { + self.to_ixdtf_writeable(display_calendar) + .write_to_string() + .into() + } + + #[inline] + pub fn to_ixdtf_writeable(&self, display_calendar: DisplayCalendar) -> impl Writeable + '_ { + IxdtfStringBuilder::default() + .with_date(self.iso) + .with_calendar(self.calendar.identifier(), display_calendar) + .build() + } + + /// Creates a [`ZonedDateTime`] from the current `PlainDate` with a provided [`TimeZone`] and + /// optional [`PlainTime`]. + #[inline] + pub fn to_zoned_date_time_with_provider( + &self, + time_zone: TimeZone, + plain_time: Option, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + // NOTE (nekevss): Steps 1-4 are engine specific + let epoch_ns = if let Some(time) = plain_time { + // 6. Else, + // a. Set temporalTime to ? ToTemporalTime(temporalTime). + // b. Let isoDateTime be CombineISODateAndTimeRecord(temporalDate.[[ISODate]], temporalTime.[[Time]]). + // c. If ISODateTimeWithinLimits(isoDateTime) is false, throw a RangeError exception. + let result_iso = IsoDateTime::new(self.iso, time.iso)?; + // d. Let epochNs be ? GetEpochNanosecondsFor(timeZone, isoDateTime, compatible). + time_zone.get_epoch_nanoseconds_for(result_iso, Disambiguation::Compatible, provider)? + // 5. If temporalTime is undefined, then + } else { + // a. Let epochNs be ? GetStartOfDay(timeZone, temporalDate.[[ISODate]]). + time_zone.get_start_of_day(&self.iso, provider)? + }; + // 7. Return ! CreateTemporalZonedDateTime(epochNs, timeZone, temporalDate.[[Calendar]]). + ZonedDateTime::try_new_with_cached_offset( + epoch_ns.ns.0, + time_zone, + self.calendar.clone(), + epoch_ns.offset, + ) + } + + /// Gets the EpochNanoseconds represented by this PlainDate + /// (using noon time, and UTC timezone) + /// + // Useful for implementing HandleDateTimeTemporalYearMonth + pub fn epoch_ns_for_utc(&self) -> EpochNanoseconds { + // 2. Let isoDateTime be CombineISODateAndTimeRecord(temporalYearMonth.[[ISODate]], NoonTimeRecord()). + let iso = IsoDateTime::new(self.iso, IsoTime::noon()); + debug_assert!(iso.is_ok()); + // 3. Let epochNs be ? GetUTCEpochNanoseconds(isoDateTime). + iso.unwrap_or_default().as_nanoseconds() + } +} + +// ==== Trait impls ==== + +impl From for PlainDate { + fn from(pdt: PlainDateTime) -> Self { + pdt.to_plain_date() + } +} + +impl FromStr for PlainDate { + type Err = TemporalError; + + fn from_str(s: &str) -> Result { + Self::from_utf8(s.as_bytes()) + } +} + +#[cfg(test)] +mod tests { + use tinystr::tinystr; + + use crate::options::{RoundingIncrement, RoundingMode}; + + use super::*; + + #[test] + fn new_date_limits() { + let err = PlainDate::try_new(-271_821, 4, 18, Calendar::default()); + assert!(err.is_err()); + let err = PlainDate::try_new(275_760, 9, 14, Calendar::default()); + assert!(err.is_err()); + let ok = PlainDate::try_new(-271_821, 4, 19, Calendar::default()); + assert_eq!( + ok, + Ok(PlainDate { + iso: IsoDate { + year: -271_821, + month: 4, + day: 19, + }, + calendar: Calendar::default(), + }) + ); + + let ok = PlainDate::try_new(275_760, 9, 13, Calendar::default()); + assert_eq!( + ok, + Ok(PlainDate { + iso: IsoDate { + year: 275760, + month: 9, + day: 13, + }, + calendar: Calendar::default(), + }) + ); + } + + #[test] + fn simple_date_add() { + let base = PlainDate::from_str("1976-11-18").unwrap(); + + // Test 1 + let result = base + .add(&Duration::from_str("P43Y").unwrap(), None) + .unwrap(); + assert_eq!( + result.iso, + IsoDate { + year: 2019, + month: 11, + day: 18, + } + ); + + // Test 2 + let result = base.add(&Duration::from_str("P3M").unwrap(), None).unwrap(); + assert_eq!( + result.iso, + IsoDate { + year: 1977, + month: 2, + day: 18, + } + ); + + // Test 3 + let result = base + .add(&Duration::from_str("P20D").unwrap(), None) + .unwrap(); + assert_eq!( + result.iso, + IsoDate { + year: 1976, + month: 12, + day: 8, + } + ) + } + + #[test] + fn date_add_limits() { + let max = PlainDate::try_new(275_760, 9, 13, Calendar::default()).unwrap(); + let result = max.add(&Duration::from_str("P1D").unwrap(), None); + assert!(result.is_err()); + + let max = PlainDate::try_new(275_760, 9, 12, Calendar::default()).unwrap(); + let result = max.add(&Duration::from_str("P1D").unwrap(), None); + assert_eq!( + result, + Ok(PlainDate { + iso: IsoDate { + year: 275760, + month: 9, + day: 13 + }, + calendar: Calendar::default(), + }) + ); + + let min = PlainDate::try_new(-271_821, 4, 19, Calendar::default()).unwrap(); + let result = min.add(&Duration::from_str("-P1D").unwrap(), None); + assert!(result.is_err()); + + let min = PlainDate::try_new(-271_821, 4, 20, Calendar::default()).unwrap(); + let result = min.add(&Duration::from_str("-P1D").unwrap(), None); + assert_eq!( + result, + Ok(PlainDate { + iso: IsoDate { + year: -271_821, + month: 4, + day: 19 + }, + calendar: Calendar::default(), + }) + ); + } + + #[test] + fn simple_date_subtract() { + let base = PlainDate::from_str("2019-11-18").unwrap(); + + // Test 1 + let result = base + .subtract(&Duration::from_str("P43Y").unwrap(), None) + .unwrap(); + assert_eq!( + result.iso, + IsoDate { + year: 1976, + month: 11, + day: 18, + } + ); + + // Test 2 + let result = base + .subtract(&Duration::from_str("P11M").unwrap(), None) + .unwrap(); + assert_eq!( + result.iso, + IsoDate { + year: 2018, + month: 12, + day: 18, + } + ); + + // Test 3 + let result = base + .subtract(&Duration::from_str("P20D").unwrap(), None) + .unwrap(); + assert_eq!( + result.iso, + IsoDate { + year: 2019, + month: 10, + day: 29, + } + ) + } + + #[test] + fn simple_date_until() { + let earlier = PlainDate::from_str("1969-07-24").unwrap(); + let later = PlainDate::from_str("1969-10-05").unwrap(); + let result = earlier + .until(&later, DifferenceSettings::default()) + .unwrap(); + assert_eq!(result.days(), 73,); + + let later = PlainDate::from_str("1996-03-03").unwrap(); + let result = earlier + .until(&later, DifferenceSettings::default()) + .unwrap(); + assert_eq!(result.days(), 9719,); + } + + #[test] + fn simple_date_since() { + let earlier = PlainDate::from_str("1969-07-24").unwrap(); + let later = PlainDate::from_str("1969-10-05").unwrap(); + let result = later + .since(&earlier, DifferenceSettings::default()) + .unwrap(); + assert_eq!(result.days(), 73,); + + let later = PlainDate::from_str("1996-03-03").unwrap(); + let result = later + .since(&earlier, DifferenceSettings::default()) + .unwrap(); + assert_eq!(result.days(), 9719,); + } + + #[test] + fn date_with_empty_error() { + let base = PlainDate::new(1976, 11, 18, Calendar::default()).unwrap(); + + let err = base.with(CalendarFields::default(), None); + assert!(err.is_err()); + } + + #[test] + fn basic_date_with() { + let base = PlainDate::new(1976, 11, 18, Calendar::default()).unwrap(); + + // Year + let fields = CalendarFields::new().with_year(2019); + let with_year = base.with(fields, None).unwrap(); + assert_eq!(with_year.year(), 2019); + assert_eq!(with_year.month(), 11); + assert_eq!(with_year.month_code(), MonthCode::from_str("M11").unwrap()); + assert_eq!(with_year.day(), 18); + + // Month + let fields = CalendarFields::new().with_month(5); + let with_month = base.with(fields, None).unwrap(); + assert_eq!(with_month.year(), 1976); + assert_eq!(with_month.month(), 5); + assert_eq!(with_month.month_code(), MonthCode::from_str("M05").unwrap()); + assert_eq!(with_month.day(), 18); + + // Month Code + let fields = CalendarFields::new().with_month_code(MonthCode(tinystr!(4, "M05"))); + let with_mc = base.with(fields, None).unwrap(); + assert_eq!(with_mc.year(), 1976); + assert_eq!(with_mc.month(), 5); + assert_eq!(with_mc.month_code(), MonthCode::from_str("M05").unwrap()); + assert_eq!(with_mc.day(), 18); + + // Day + let fields = CalendarFields::new().with_day(17); + let with_day = base.with(fields, None).unwrap(); + assert_eq!(with_day.year(), 1976); + assert_eq!(with_day.month(), 11); + assert_eq!(with_day.month_code(), MonthCode::from_str("M11").unwrap()); + assert_eq!(with_day.day(), 17); + } + + // test toZonedDateTime + #[cfg(feature = "tzdb")] + #[test] + fn to_zoned_date_time() { + use timezone_provider::tzif::FsTzdbProvider; + let provider = &FsTzdbProvider::default(); + let date = PlainDate::from_str("2020-01-01").unwrap(); + let time_zone = TimeZone::try_from_str_with_provider("UTC", provider).unwrap(); + let zdt = date + .to_zoned_date_time_with_provider(time_zone, None, provider) + .unwrap(); + assert_eq!(zdt.year(), 2020); + assert_eq!(zdt.month(), 1); + assert_eq!(zdt.day(), 1); + assert_eq!(zdt.hour(), 0); + assert_eq!(zdt.minute(), 0); + assert_eq!(zdt.second(), 0); + assert_eq!(zdt.millisecond(), 0); + assert_eq!(zdt.microsecond(), 0); + assert_eq!(zdt.nanosecond(), 0); + } + + #[cfg(feature = "tzdb")] + #[test] + fn to_zoned_date_time_error() { + use timezone_provider::tzif::FsTzdbProvider; + let provider = &FsTzdbProvider::default(); + let date = PlainDate::try_new_iso(-271_821, 4, 19).unwrap(); + let time_zone = TimeZone::try_from_str_with_provider("+00", provider).unwrap(); + let zdt = date.to_zoned_date_time_with_provider(time_zone, None, provider); + assert!(zdt.is_err()) + } + + // test262/test/built-ins/Temporal/Calendar/prototype/month/argument-string-invalid.js + #[test] + fn invalid_strings() { + const INVALID_STRINGS: &[&str] = &[ + // invalid ISO strings: + "", + "invalid iso8601", + "2020-01-00", + "2020-01-32", + "2020-02-30", + "2021-02-29", + "2020-00-01", + "2020-13-01", + "2020-01-01T", + "2020-01-01T25:00:00", + "2020-01-01T01:60:00", + "2020-01-01T01:60:61", + "2020-01-01junk", + "2020-01-01T00:00:00junk", + "2020-01-01T00:00:00+00:00junk", + "2020-01-01T00:00:00+00:00[UTC]junk", + "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", + "02020-01-01", + "2020-001-01", + "2020-01-001", + "2020-01-01T001", + "2020-01-01T01:001", + "2020-01-01T01:01:001", + // valid, but forms not supported in Temporal: + "2020-W01-1", + "2020-001", + "+0002020-01-01", + // valid, but this calendar must not exist: + "2020-01-01[u-ca=notexist]", + // may be valid in other contexts, but insufficient information for PlainDate: + "2020-01", + "+002020-01", + "01-01", + "2020-W01", + "P1Y", + "-P12Y", + // valid, but outside the supported range: + "-999999-01-01", + "+999999-01-01", + // built-ins/Temporal/PlainDate/from/argument-string-too-many-decimals + "1970-01-01T00:00:00.1234567891", + "1970-01-01T00:00:00.1234567890", + "1970-01-01T00+00:00:00.1234567891", + "1970-01-01T00+00:00:00.1234567890", + ]; + for s in INVALID_STRINGS { + assert!(PlainDate::from_str(s).is_err(), "{} should not parse", s) + } + } + + // test262/test/built-ins/Temporal/Calendar/prototype/day/argument-string-critical-unknown-annotation.js + #[test] + fn argument_string_critical_unknown_annotation() { + const INVALID_STRINGS: [&str; 6] = [ + "1970-01-01[!foo=bar]", + "1970-01-01T00:00[!foo=bar]", + "1970-01-01T00:00[UTC][!foo=bar]", + "1970-01-01T00:00[u-ca=iso8601][!foo=bar]", + "1970-01-01T00:00[UTC][!foo=bar][u-ca=iso8601]", + "1970-01-01T00:00[foo=bar][!_foo-bar0=Dont-Ignore-This-99999999999]", + ]; + for s in INVALID_STRINGS { + assert!(PlainDate::from_str(s).is_err()) + } + } + + #[test] + fn rounding_increment_observed() { + let earlier = PlainDate::try_new_iso(2019, 1, 8).unwrap(); + let later = PlainDate::try_new_iso(2021, 9, 7).unwrap(); + + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Year), + rounding_mode: Some(RoundingMode::HalfExpand), + increment: Some(RoundingIncrement::try_new(4).unwrap()), + ..Default::default() + }; + let result = later.since(&earlier, settings).unwrap(); + assert_eq!(result.years(), 4); + + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Month), + rounding_mode: Some(RoundingMode::HalfExpand), + increment: Some(RoundingIncrement::try_new(10).unwrap()), + ..Default::default() + }; + let result = later.since(&earlier, settings).unwrap(); + assert_eq!(result.months(), 30); + + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Week), + rounding_mode: Some(RoundingMode::HalfExpand), + increment: Some(RoundingIncrement::try_new(12).unwrap()), + ..Default::default() + }; + let result = later.since(&earlier, settings).unwrap(); + assert_eq!(result.weeks(), 144); + + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Day), + rounding_mode: Some(RoundingMode::HalfExpand), + increment: Some(RoundingIncrement::try_new(100).unwrap()), + ..Default::default() + }; + let result = later.since(&earlier, settings).unwrap(); + assert_eq!(result.days(), 1000); + } +} diff --git a/crates/temporal/src/builtins/core/plain_date_time.rs b/crates/temporal/src/builtins/core/plain_date_time.rs new file mode 100644 index 000000000..548e46c74 --- /dev/null +++ b/crates/temporal/src/builtins/core/plain_date_time.rs @@ -0,0 +1,1582 @@ +//! This module implements `PlainDateTime` any directly related algorithms. + +use super::{ + duration::normalized::InternalDurationRecord, Duration, PartialTime, PlainDate, PlainTime, + ZonedDateTime, +}; +use crate::error::ErrorMessage; +use crate::parsed_intermediates::ParsedDateTime; +use crate::{ + builtins::{ + calendar::CalendarFields, + core::{calendar::Calendar, Instant}, + }, + iso::{IsoDate, IsoDateTime, IsoTime}, + options::{ + DifferenceOperation, DifferenceSettings, Disambiguation, DisplayCalendar, Overflow, + ResolvedRoundingOptions, RoundingOptions, ToStringRoundingOptions, Unit, UnitGroup, + }, + parsers::IxdtfStringBuilder, + primitive::FiniteF64, + provider::{NeverProvider, TimeZoneProvider}, + unix_time::EpochNanoseconds, + MonthCode, TemporalError, TemporalResult, TimeZone, +}; +use alloc::string::String; +use core::{cmp::Ordering, str::FromStr}; +use tinystr::TinyAsciiStr; +use writeable::Writeable; + +/// A partial PlainDateTime record +#[derive(Debug, Default, Clone)] +pub struct PartialDateTime { + /// The `PartialDate` portion of a `PartialDateTime` + pub fields: DateTimeFields, + /// The calendar of the `PartialDateTime`. + pub calendar: Calendar, +} + +#[derive(Debug, Default, Clone)] +pub struct DateTimeFields { + pub calendar_fields: CalendarFields, + pub time: PartialTime, +} + +impl DateTimeFields { + pub fn is_empty(&self) -> bool { + self.calendar_fields.is_empty() && self.time.is_empty() + } +} + +impl DateTimeFields { + pub const fn new() -> Self { + Self { + calendar_fields: CalendarFields::new(), + time: PartialTime::new(), + } + } + + pub const fn with_partial_date(mut self, fields: CalendarFields) -> Self { + self.calendar_fields = fields; + self + } + + pub const fn with_partial_time(mut self, partial_time: PartialTime) -> Self { + self.time = partial_time; + self + } +} + +/// The native Rust implementation of a Temporal `PlainDateTime`. +/// +/// Combines a date and time into a single value representing a specific moment +/// in calendar time, such as "2024-03-15T14:30:45". Unlike `Instant`, +/// a `PlainDateTime` does not include timezone information. +/// +/// Use `PlainDateTime` when you need to represent a specific date and time but +/// timezone handling is not required, or when working with local times that +/// don't need to be converted across timezones. +/// +/// ## Examples +/// +/// ### Creating date and time values +/// +/// ```rust +/// use temporal::PlainDateTime; +/// use core::str::FromStr; +/// +/// // Create a specific date and time from IXDTF string +/// let meeting = PlainDateTime::from_str("2024-03-15T14:30:45.123456789").unwrap(); +/// assert_eq!(meeting.year(), 2024); +/// assert_eq!(meeting.hour(), 14); +/// assert_eq!(meeting.minute(), 30); +/// ``` +/// +/// ### Parsing ISO 8601 datetime strings +/// +/// ```rust +/// use temporal::PlainDateTime; +/// use core::str::FromStr; +/// +/// let dt = PlainDateTime::from_str("2024-03-15T14:30:45.123456789").unwrap(); +/// assert_eq!(dt.year(), 2024); +/// assert_eq!(dt.month(), 3); +/// assert_eq!(dt.day(), 15); +/// assert_eq!(dt.hour(), 14); +/// assert_eq!(dt.minute(), 30); +/// assert_eq!(dt.second(), 45); +/// assert_eq!(dt.millisecond(), 123); +/// assert_eq!(dt.microsecond(), 456); +/// assert_eq!(dt.nanosecond(), 789); +/// ``` +/// +/// ### DateTime arithmetic +/// +/// ```rust +/// use temporal::{PlainDateTime, Duration}; +/// use core::str::FromStr; +/// +/// let dt = PlainDateTime::from_str("2024-01-15T12:00:00").unwrap(); +/// +/// // Add duration +/// let later = dt.add(&Duration::from_str("P1M2DT3H4M").unwrap(), None).unwrap(); +/// assert_eq!(later.month(), 2); +/// assert_eq!(later.day(), 17); +/// assert_eq!(later.hour(), 15); +/// assert_eq!(later.minute(), 4); +/// +/// // Calculate difference +/// let earlier = PlainDateTime::from_str("2024-01-10T10:30:00").unwrap(); +/// let duration = earlier.until(&dt, Default::default()).unwrap(); +/// assert_eq!(duration.days(), 5); +/// assert_eq!(duration.hours(), 1); +/// assert_eq!(duration.minutes(), 30); +/// ``` +/// +/// ### Working with partial fields +/// +/// ```rust +/// use temporal::{PlainDateTime, fields::DateTimeFields, partial::PartialTime}; +/// use core::str::FromStr; +/// +/// let dt = PlainDateTime::from_str("2024-01-15T12:30:45").unwrap(); +/// +/// // Change only the hour +/// let fields = DateTimeFields::new().with_partial_time(PartialTime::new().with_hour(Some(18))); +/// let modified = dt.with(fields, None).unwrap(); +/// assert_eq!(modified.hour(), 18); +/// assert_eq!(modified.minute(), 30); // unchanged +/// assert_eq!(modified.second(), 45); // unchanged +/// ``` +/// +/// ### Converting to other types +/// +/// ```rust +/// use temporal::{PlainDateTime, PlainTime}; +/// use core::str::FromStr; +/// +/// let dt = PlainDateTime::from_str("2024-03-15T14:30:45").unwrap(); +/// +/// // Extract date component +/// let date = dt.to_plain_date(); +/// assert_eq!(date.year(), 2024); +/// assert_eq!(date.month(), 3); +/// assert_eq!(date.day(), 15); +/// +/// // Extract time component +/// let time = dt.to_plain_time(); +/// assert_eq!(time.hour(), 14); +/// assert_eq!(time.minute(), 30); +/// assert_eq!(time.second(), 45); +/// ``` +/// +/// ## Reference +/// +/// For more information, see the [MDN documentation][mdn-datetime]. +/// +/// [mdn-datetime]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime +#[non_exhaustive] +#[derive(Debug, Default, Clone, PartialEq, Eq)] +pub struct PlainDateTime { + pub(crate) iso: IsoDateTime, + calendar: Calendar, +} + +impl core::fmt::Display for PlainDateTime { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + let string = + self.to_ixdtf_string(ToStringRoundingOptions::default(), DisplayCalendar::Auto); + + debug_assert!( + string.is_ok(), + "Duration must return a valid string with default options." + ); + + f.write_str(&string.map_err(|_| Default::default())?) + } +} + +// ==== Private PlainDateTime API ==== + +impl PlainDateTime { + /// Creates a new unchecked `PlainDateTime`. + #[inline] + #[must_use] + pub(crate) fn new_unchecked(iso: IsoDateTime, calendar: Calendar) -> Self { + Self { iso, calendar } + } + + // TODO: Potentially deprecate and remove. + /// Create a new `PlainDateTime` from an `Instant`. + #[allow(unused)] + #[inline] + pub(crate) fn from_instant(instant: &Instant, offset: i64, calendar: Calendar) -> Self { + let iso = IsoDateTime::from_epoch_nanos(instant.epoch_nanoseconds(), offset); + Self { iso, calendar } + } + + // 5.5.14 AddDurationToOrSubtractDurationFromPlainDateTime ( operation, dateTime, temporalDurationLike, options ) + fn add_or_subtract_duration( + &self, + duration: &Duration, + overflow: Option, + ) -> TemporalResult { + // SKIP: 1, 2, 3, 4 + // 5. Let internalDuration be ToInternalDurationRecordWith24HourDays(duration). + let internal_duration = InternalDurationRecord::from_duration_with_24_hour_days(duration)?; + // 6. Let timeResult be AddTime(dateTime.[[ISODateTime]].[[Time]], internalDuration.[[Time]]). + let (days, time_result) = self + .iso + .time + .add(internal_duration.normalized_time_duration()); + // 7. Let dateDuration be ? AdjustDateDurationRecord(internalDuration.[[Date]], timeResult.[[Days]]). + let date_duration = internal_duration.date().adjust(days, None, None)?; + // 8. Let addedDate be ? CalendarDateAdd(dateTime.[[Calendar]], dateTime.[[ISODateTime]].[[ISODate]], dateDuration, overflow). + let added_date = self.calendar().date_add( + &self.iso.date, + &date_duration, + overflow.unwrap_or(Overflow::Constrain), + )?; + // 9. Let result be CombineISODateAndTimeRecord(addedDate, timeResult). + let result = IsoDateTime::new(added_date.iso, time_result)?; + // 10. Return ? CreateTemporalDateTime(result, dateTime.[[Calendar]]). + Ok(Self::new_unchecked(result, self.calendar().clone())) + } + + /// Difference two `PlainDateTime`s together. + pub(crate) fn diff( + &self, + op: DifferenceOperation, + other: &Self, + settings: DifferenceSettings, + ) -> TemporalResult { + // 3. If ? CalendarEquals(dateTime.[[Calendar]], other.[[Calendar]]) is false, throw a RangeError exception. + if self.calendar != other.calendar { + return Err(TemporalError::range() + .with_message("Calendar must be the same when diffing two PlainDateTimes")); + } + + // 5. Let settings be ? GetDifferenceSettings(operation, resolvedOptions, datetime, « », "nanosecond", "day"). + let options = ResolvedRoundingOptions::from_diff_settings( + settings, + op, + UnitGroup::DateTime, + Unit::Day, + Unit::Nanosecond, + )?; + + // Step 7-8 combined. + if self.iso == other.iso { + return Ok(Duration::default()); + } + + // Step 10-11. + let norm_record = self.diff_dt_with_rounding(other, options)?; + + let result = Duration::from_internal(norm_record, options.largest_unit)?; + + // Step 12 + match op { + DifferenceOperation::Until => Ok(result), + DifferenceOperation::Since => Ok(result.negated()), + } + } + + // TODO: Figure out whether to handle resolvedOptions + // 5.5.12 DifferencePlainDateTimeWithRounding ( y1, mon1, d1, h1, min1, s1, ms1, mus1, ns1, y2, mon2, d2, h2, min2, s2, ms2, + // mus2, ns2, calendarRec, largestUnit, roundingIncrement, smallestUnit, roundingMode, resolvedOptions ) + pub(crate) fn diff_dt_with_rounding( + &self, + other: &Self, + options: ResolvedRoundingOptions, + ) -> TemporalResult { + // 1. If CompareISODateTime(y1, mon1, d1, h1, min1, s1, ms1, mus1, ns1, y2, mon2, d2, h2, min2, s2, ms2, mus2, ns2) = 0, then + if matches!(self.iso.cmp(&other.iso), Ordering::Equal) { + // a. Let durationRecord be CreateDurationRecord(0, 0, 0, 0, 0, 0, 0, 0, 0, 0). + // b. Return the Record { [[DurationRecord]]: durationRecord, [[Total]]: 0 }. + return Ok(InternalDurationRecord::default()); + } + // 2. If ISODateTimeWithinLimits(isoDateTime1) is false or ISODateTimeWithinLimits(isoDateTime2) is false, throw a RangeError exception. + self.iso.check_within_limits()?; + other.iso.check_within_limits()?; + + // 3. Let diff be DifferenceISODateTime(isoDateTime1, isoDateTime2, calendar, largestUnit). + let diff = self + .iso + .diff(&other.iso, &self.calendar, options.largest_unit)?; + // 4. If smallestUnit is nanosecond and roundingIncrement = 1, return diff. + if options.smallest_unit == Unit::Nanosecond && options.increment.get() == 1 { + return Ok(diff); + } + + // 5. Let destEpochNs be GetUTCEpochNanoseconds(isoDateTime2). + let dest_epoch_ns = other.iso.as_nanoseconds(); + // 6. Return ? RoundRelativeDuration(diff, destEpochNs, isoDateTime1, unset, calendar, largestUnit, roundingIncrement, smallestUnit, roundingMode). + diff.round_relative_duration( + self.iso.as_nanoseconds(), + dest_epoch_ns.0, + self, + Option::<(&TimeZone, &NeverProvider)>::None, + options, + ) + } + + // 5.5.14 DifferencePlainDateTimeWithTotal ( isoDateTime1, isoDateTime2, calendar, unit ) + pub(crate) fn diff_dt_with_total(&self, other: &Self, unit: Unit) -> TemporalResult { + // 1. If CompareISODateTime(isoDateTime1, isoDateTime2) = 0, then + // a. Return 0. + if matches!(self.iso.cmp(&other.iso), Ordering::Equal) { + return FiniteF64::try_from(0.0); + } + // 2. If ISODateTimeWithinLimits(isoDateTime1) is false or ISODateTimeWithinLimits(isoDateTime2) is false, throw a RangeError exception. + if !self.iso.is_within_limits() || !other.iso.is_within_limits() { + return Err(TemporalError::range().with_message("DateTime is not within valid limits.")); + } + // 3. Let diff be DifferenceISODateTime(isoDateTime1, isoDateTime2, calendar, unit). + let diff = self.iso.diff(&other.iso, &self.calendar, unit)?; + // 4. If unit is nanosecond, return diff.[[Time]]. + if unit == Unit::Nanosecond { + return FiniteF64::try_from(diff.normalized_time_duration().0); + } + let origin_epoch_ns = self.iso.as_nanoseconds(); + // 5. Let destEpochNs be GetUTCEpochNanoseconds(isoDateTime2). + let dest_epoch_ns = other.iso.as_nanoseconds(); + // 6. Return ? TotalRelativeDuration(diff, destEpochNs, isoDateTime1, unset, calendar, unit). + diff.total_relative_duration( + origin_epoch_ns, + dest_epoch_ns.0, + self, + Option::<(&TimeZone, &NeverProvider)>::None, + unit, + ) + } + + /// Returns this `PlainDateTime`'s ISO year value. + #[inline] + #[must_use] + pub const fn iso_year(&self) -> i32 { + self.iso.date.year + } + + /// Returns this `PlainDateTime`'s ISO month value. + #[inline] + #[must_use] + pub const fn iso_month(&self) -> u8 { + self.iso.date.month + } + + /// Returns this `PlainDateTime`'s ISO day value. + #[inline] + #[must_use] + pub const fn iso_day(&self) -> u8 { + self.iso.date.day + } +} + +// ==== Public PlainDateTime API ==== + +impl PlainDateTime { + /// Creates a new `PlainDateTime`, constraining any arguments that are invalid + /// into a valid range. + #[inline] + #[allow(clippy::too_many_arguments)] + pub fn new( + year: i32, + month: u8, + day: u8, + hour: u8, + minute: u8, + second: u8, + millisecond: u16, + microsecond: u16, + nanosecond: u16, + calendar: Calendar, + ) -> TemporalResult { + Self::new_with_overflow( + year, + month, + day, + hour, + minute, + second, + millisecond, + microsecond, + nanosecond, + calendar, + Overflow::Constrain, + ) + } + + /// Creates a new `PlainDateTime` with an ISO 8601 calendar, constraining any + /// arguments that are invalid into a valid range. + #[inline] + #[allow(clippy::too_many_arguments)] + pub fn new_iso( + year: i32, + month: u8, + day: u8, + hour: u8, + minute: u8, + second: u8, + millisecond: u16, + microsecond: u16, + nanosecond: u16, + ) -> TemporalResult { + Self::new( + year, + month, + day, + hour, + minute, + second, + millisecond, + microsecond, + nanosecond, + Calendar::default(), + ) + } + + /// Creates a new `PlainDateTime`, rejecting any arguments that are not in a valid range. + #[inline] + #[allow(clippy::too_many_arguments)] + pub fn try_new( + year: i32, + month: u8, + day: u8, + hour: u8, + minute: u8, + second: u8, + millisecond: u16, + microsecond: u16, + nanosecond: u16, + calendar: Calendar, + ) -> TemporalResult { + Self::new_with_overflow( + year, + month, + day, + hour, + minute, + second, + millisecond, + microsecond, + nanosecond, + calendar, + Overflow::Reject, + ) + } + + /// Creates a new `PlainDateTime` with an ISO 8601 calendar, rejecting any arguments that are not in a valid range. + #[inline] + #[allow(clippy::too_many_arguments)] + pub fn try_new_iso( + year: i32, + month: u8, + day: u8, + hour: u8, + minute: u8, + second: u8, + millisecond: u16, + microsecond: u16, + nanosecond: u16, + ) -> TemporalResult { + Self::try_new( + year, + month, + day, + hour, + minute, + second, + millisecond, + microsecond, + nanosecond, + Calendar::default(), + ) + } + + /// Creates a new `PlainDateTime` with the provided [`Overflow`] option. + #[inline] + #[allow(clippy::too_many_arguments)] + pub fn new_with_overflow( + year: i32, + month: u8, + day: u8, + hour: u8, + minute: u8, + second: u8, + millisecond: u16, + microsecond: u16, + nanosecond: u16, + calendar: Calendar, + overflow: Overflow, + ) -> TemporalResult { + let iso_date = IsoDate::new_with_overflow(year, month, day, overflow)?; + let iso_time = IsoTime::new( + hour, + minute, + second, + millisecond, + microsecond, + nanosecond, + overflow, + )?; + Ok(Self::new_unchecked( + IsoDateTime::new(iso_date, iso_time)?, + calendar, + )) + } + + /// Create a `PlainDateTime` from a `Date` and a `Time`. + pub fn from_date_and_time(date: PlainDate, time: PlainTime) -> TemporalResult { + Ok(Self::new_unchecked( + IsoDateTime::new(date.iso, time.iso)?, + date.calendar().clone(), + )) + } + + /// Creates a `PlainDateTime` from a `PartialDateTime`. + /// + /// ```rust + /// use temporal::{Calendar, PlainDateTime, fields::{CalendarFields, DateTimeFields}, partial::{PartialDateTime, PartialTime, PartialDate}}; + /// + /// let calendar_fields = CalendarFields::new() + /// .with_year(2000) + /// .with_month(13) + /// .with_day(2); + /// + /// let time = PartialTime { + /// hour: Some(4), + /// minute: Some(25), + /// ..Default::default() + /// }; + /// + /// let fields = PartialDateTime { + /// fields: DateTimeFields { + /// calendar_fields, + /// time, + /// }, + /// calendar: Calendar::ISO, + /// }; + /// + /// let date = PlainDateTime::from_partial(fields, None).unwrap(); + /// + /// assert_eq!(date.year(), 2000); + /// assert_eq!(date.month(), 12); + /// assert_eq!(date.day(), 2); + /// assert_eq!(date.calendar().identifier(), "iso8601"); + /// assert_eq!(date.hour(), 4); + /// assert_eq!(date.minute(), 25); + /// assert_eq!(date.second(), 0); + /// assert_eq!(date.millisecond(), 0); + /// + /// ``` + pub fn from_partial( + partial: PartialDateTime, + overflow: Option, + ) -> TemporalResult { + if partial.fields.is_empty() { + return Err(TemporalError::r#type().with_message("PartialDateTime cannot be empty.")); + } + // The steps here largely follow `InterpretTemporalDateTimeFields` + // 1. Let isoDate be ? CalendarDateFromFields(calendar, fields, overflow). + let date = partial.calendar.date_from_fields( + partial.fields.calendar_fields, + overflow.unwrap_or(Overflow::Constrain), + )?; + // 2. Let time be ? RegulateTime(fields.[[Hour]], fields.[[Minute]], fields.[[Second]], fields.[[Millisecond]], fields.[[Microsecond]], fields.[[Nanosecond]], overflow). + let iso_time = + IsoTime::default().with(partial.fields.time, overflow.unwrap_or_default())?; + // 3. Return CombineISODateAndTimeRecord(isoDate, time). + let iso = IsoDateTime::new(date.iso, iso_time)?; + Ok(Self::new_unchecked(iso, partial.calendar)) + } + + // Converts a UTF-8 encoded string into a `PlainDateTime`. + pub fn from_utf8(s: &[u8]) -> TemporalResult { + let parsed = ParsedDateTime::from_utf8(s)?; + Self::from_parsed(parsed) + } + + pub fn from_parsed(parsed: ParsedDateTime) -> TemporalResult { + let date = IsoDate::new_with_overflow( + parsed.date.record.year, + parsed.date.record.month, + parsed.date.record.day, + Overflow::Reject, + )?; + let iso = IsoDateTime::new(date, parsed.time)?; + + Ok(Self::new_unchecked( + iso, + Calendar::new(parsed.date.calendar), + )) + } + + /// Creates a new `PlainDateTime` with the fields of a `PartialDateTime`. + /// + /// ```rust + /// use temporal::{Calendar, PlainDateTime, fields::{CalendarFields, DateTimeFields}, partial::{PartialDateTime, PartialTime, PartialDate}}; + /// + /// let initial = PlainDateTime::try_new(2000, 12, 2, 0,0,0,0,0,0, Calendar::default()).unwrap(); + /// + /// let calendar_fields = CalendarFields::new() + /// .with_month(5); + /// + /// let time = PartialTime { + /// hour: Some(4), + /// second: Some(30), + /// ..Default::default() + /// }; + /// + /// let fields = DateTimeFields { calendar_fields, time }; + /// + /// let date = initial.with(fields, None).unwrap(); + /// + /// assert_eq!(date.year(), 2000); + /// assert_eq!(date.month(), 5); + /// assert_eq!(date.day(), 2); + /// assert_eq!(date.calendar().identifier(), "iso8601"); + /// assert_eq!(date.hour(), 4); + /// assert_eq!(date.minute(), 0); + /// assert_eq!(date.second(), 30); + /// assert_eq!(date.millisecond(), 0); + /// + /// ``` + #[inline] + pub fn with(&self, fields: DateTimeFields, overflow: Option) -> TemporalResult { + if fields.is_empty() { + return Err(TemporalError::r#type().with_enum(ErrorMessage::EmptyFieldsIsInvalid)); + } + let overflow = overflow.unwrap_or(Overflow::Constrain); + + let result_date = self.calendar.date_from_fields( + fields + .calendar_fields + .with_fallback_datetime(self, self.calendar.kind())?, + overflow, + )?; + + // Determine the `Time` based off the partial values. + let time = self.iso.time.with(fields.time, overflow)?; + + let iso_datetime = IsoDateTime::new(result_date.iso, time)?; + + Ok(Self::new_unchecked(iso_datetime, self.calendar().clone())) + } + + /// Creates a new `PlainDateTime` from the current `PlainDateTime` and the provided `Time`. + #[inline] + pub fn with_time(&self, time: Option) -> TemporalResult { + let time = time.unwrap_or_default(); + Self::try_new( + self.iso_year(), + self.iso_month(), + self.iso_day(), + time.hour(), + time.minute(), + time.second(), + time.millisecond(), + time.microsecond(), + time.nanosecond(), + self.calendar.clone(), + ) + } + + /// Creates a new `PlainDateTime` from the current `PlainDateTime` and a provided [`Calendar`]. + #[inline] + pub fn with_calendar(&self, calendar: Calendar) -> Self { + Self::new_unchecked(self.iso, calendar) + } + + /// Returns the hour value + #[inline] + #[must_use] + pub fn hour(&self) -> u8 { + self.iso.time.hour + } + + /// Returns the minute value + #[inline] + #[must_use] + pub fn minute(&self) -> u8 { + self.iso.time.minute + } + + /// Returns the second value + #[inline] + #[must_use] + pub fn second(&self) -> u8 { + self.iso.time.second + } + + /// Returns the `millisecond` value + #[inline] + #[must_use] + pub fn millisecond(&self) -> u16 { + self.iso.time.millisecond + } + + /// Returns the `microsecond` value + #[inline] + #[must_use] + pub fn microsecond(&self) -> u16 { + self.iso.time.microsecond + } + + /// Returns the `nanosecond` value + #[inline] + #[must_use] + pub fn nanosecond(&self) -> u16 { + self.iso.time.nanosecond + } + + /// Returns the Calendar value. + #[inline] + #[must_use] + pub fn calendar(&self) -> &Calendar { + &self.calendar + } +} + +// ==== Calendar-derived public API ==== + +impl PlainDateTime { + /// Returns the calendar year value. + #[inline] + pub fn year(&self) -> i32 { + self.calendar.year(&self.iso.date) + } + + /// Returns the calendar month value. + #[inline] + pub fn month(&self) -> u8 { + self.calendar.month(&self.iso.date) + } + + /// Returns the calendar month code value. + #[inline] + pub fn month_code(&self) -> MonthCode { + self.calendar.month_code(&self.iso.date) + } + + /// Returns the calendar day value. + #[inline] + pub fn day(&self) -> u8 { + self.calendar.day(&self.iso.date) + } + + /// Returns the calendar day of week value. + #[inline] + pub fn day_of_week(&self) -> u16 { + self.calendar.day_of_week(&self.iso.date) + } + + /// Returns the calendar day of year value. + #[inline] + pub fn day_of_year(&self) -> u16 { + self.calendar.day_of_year(&self.iso.date) + } + + /// Returns the calendar week of year value. + #[inline] + pub fn week_of_year(&self) -> Option { + self.calendar.week_of_year(&self.iso.date) + } + + /// Returns the calendar year of week value. + #[inline] + pub fn year_of_week(&self) -> Option { + self.calendar.year_of_week(&self.iso.date) + } + + /// Returns the calendar days in week value. + #[inline] + pub fn days_in_week(&self) -> u16 { + self.calendar.days_in_week(&self.iso.date) + } + + /// Returns the calendar days in month value. + #[inline] + pub fn days_in_month(&self) -> u16 { + self.calendar.days_in_month(&self.iso.date) + } + + /// Returns the calendar days in year value. + #[inline] + pub fn days_in_year(&self) -> u16 { + self.calendar.days_in_year(&self.iso.date) + } + + /// Returns the calendar months in year value. + #[inline] + pub fn months_in_year(&self) -> u16 { + self.calendar.months_in_year(&self.iso.date) + } + + /// Returns whether the date in a leap year for the given calendar. + #[inline] + pub fn in_leap_year(&self) -> bool { + self.calendar.in_leap_year(&self.iso.date) + } + + /// Returns the era for the current `PlainDateTime`. + #[inline] + pub fn era(&self) -> Option> { + self.calendar.era(&self.iso.date) + } + + /// Returns the era year for the current `PlainDateTime`. + #[inline] + pub fn era_year(&self) -> Option { + self.calendar.era_year(&self.iso.date) + } +} + +impl PlainDateTime { + /// Compares one `PlainDateTime` to another `PlainDateTime` using their + /// `IsoDate` representation. + /// + /// # Note on Ordering + /// + /// `temporal` does not implement `PartialOrd`/`Ord` as `PlainDateTime` does + /// not fulfill all the conditions required to implement the traits. However, + /// it is possible to compare `PlainDate`'s as their `IsoDate` representation. + #[inline] + #[must_use] + pub fn compare_iso(&self, other: &Self) -> Ordering { + self.iso.cmp(&other.iso) + } + + /// Adds a [`Duration`] to the current `PlainDateTime`. + #[inline] + pub fn add(&self, duration: &Duration, overflow: Option) -> TemporalResult { + self.add_or_subtract_duration(duration, overflow) + } + + /// Subtracts a [`Duration`] to the current `PlainDateTime`. + #[inline] + pub fn subtract( + &self, + duration: &Duration, + overflow: Option, + ) -> TemporalResult { + self.add_or_subtract_duration(&duration.negated(), overflow) + } + + /// Returns a [`Duration`] representing the period of time from this `PlainDateTime` until the other `PlainDateTime`. + #[inline] + pub fn until(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { + self.diff(DifferenceOperation::Until, other, settings) + } + + /// Returns a [`Duration`] representing the period of time from this `PlainDateTime` since the other `PlainDateTime`. + #[inline] + pub fn since(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { + self.diff(DifferenceOperation::Since, other, settings) + } + + /// Rounds the current `PlainDateTime` based on provided options. + #[inline] + pub fn round(&self, options: RoundingOptions) -> TemporalResult { + let resolved = ResolvedRoundingOptions::from_datetime_options(options)?; + + if resolved.is_noop() { + return Ok(self.clone()); + } + + let result = self.iso.round(resolved)?; + + Ok(Self::new_unchecked(result, self.calendar.clone())) + } + + /// Create a [`ZonedDateTime`] from the current `PlainDateTime` with the provided options. + #[inline] + pub fn to_zoned_date_time_with_provider( + &self, + time_zone: TimeZone, + disambiguation: Disambiguation, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + // 6. Let epochNs be ? GetEpochNanosecondsFor(timeZone, dateTime.[[ISODateTime]], disambiguation). + let epoch_ns = time_zone.get_epoch_nanoseconds_for(self.iso, disambiguation, provider)?; + // 7. Return ! CreateTemporalZonedDateTime(epochNs, timeZone, dateTime.[[Calendar]]). + Ok(ZonedDateTime::new_unchecked( + Instant::from(epoch_ns.ns), + time_zone, + self.calendar.clone(), + epoch_ns.offset, + )) + } + + /// Gets the EpochNanoseconds represented by this PlainDateTime + /// (using and UTC timezone) + /// + // Useful for implementing HandleDateTimeTemporalDateTime + pub fn epoch_ns_for_utc(&self) -> EpochNanoseconds { + // 3. Let epochNs be ? GetUTCEpochNanoseconds(isoDateTime). + self.iso.as_nanoseconds() + } + + /// Create a [`PlainDate`] from the current `PlainDateTime`. + #[inline] + pub fn to_plain_date(&self) -> PlainDate { + // 3. Return ! CreateTemporalDate(dateTime.[[ISODateTime]].[[ISODate]], dateTime.[[Calendar]]). + PlainDate::new_unchecked(self.iso.date, self.calendar.clone()) + } + + /// Create a [`PlainTime`] from the current `PlainDateTime`. + #[inline] + pub fn to_plain_time(&self) -> PlainTime { + // 3. Return ! CreateTemporalTime(dateTime.[[ISODateTime]].[[Time]]). + PlainTime::new_unchecked(self.iso.time) + } + + /// Creates an efficient [`Writeable`] implementation for the RFC 9557 IXDTF format + /// using the current `PlainDateTime` and options. + #[inline] + pub fn to_ixdtf_writeable( + &self, + options: ToStringRoundingOptions, + display_calendar: DisplayCalendar, + ) -> TemporalResult { + let resolved_options = options.resolve()?; + let result = self + .iso + .round(ResolvedRoundingOptions::from_to_string_options( + &resolved_options, + ))?; + if !result.is_within_limits() { + return Err(TemporalError::range().with_message("DateTime is not within valid limits.")); + } + let builder = IxdtfStringBuilder::default() + .with_date(result.date) + .with_time(result.time, resolved_options.precision) + .with_calendar(self.calendar.identifier(), display_calendar); + Ok(builder) + } + + /// Returns the RFC 9557 IXDTF string for the current `PlainDateTime` with the provided + /// options. + #[inline] + pub fn to_ixdtf_string( + &self, + options: ToStringRoundingOptions, + display_calendar: DisplayCalendar, + ) -> TemporalResult { + self.to_ixdtf_writeable(options, display_calendar) + .map(|x| x.write_to_string().into()) + } +} + +// ==== Trait impls ==== + +impl FromStr for PlainDateTime { + type Err = TemporalError; + + fn from_str(s: &str) -> Result { + Self::from_utf8(s.as_bytes()) + } +} + +#[cfg(test)] +mod tests { + use tinystr::{tinystr, TinyAsciiStr}; + + use crate::{ + builtins::{ + calendar::CalendarFields, + core::{ + calendar::Calendar, duration::DateDuration, plain_date_time::DateTimeFields, + Duration, PartialTime, PlainDateTime, + }, + }, + iso::{IsoDate, IsoDateTime, IsoTime}, + options::{ + DifferenceSettings, DisplayCalendar, RoundingIncrement, RoundingMode, RoundingOptions, + ToStringRoundingOptions, Unit, + }, + parsers::Precision, + MonthCode, TemporalResult, + }; + + fn assert_datetime( + dt: PlainDateTime, + fields: (i32, u8, TinyAsciiStr<4>, u8, u8, u8, u8, u16, u16, u16), + ) { + assert_eq!(dt.year(), fields.0); + assert_eq!(dt.month(), fields.1); + assert_eq!(dt.month_code(), MonthCode(fields.2)); + assert_eq!(dt.day(), fields.3); + assert_eq!(dt.hour(), fields.4); + assert_eq!(dt.minute(), fields.5); + assert_eq!(dt.second(), fields.6); + assert_eq!(dt.millisecond(), fields.7); + assert_eq!(dt.microsecond(), fields.8); + assert_eq!(dt.nanosecond(), fields.9); + } + + fn pdt_from_date(year: i32, month: u8, day: u8) -> TemporalResult { + PlainDateTime::try_new(year, month, day, 0, 0, 0, 0, 0, 0, Calendar::default()) + } + + #[test] + #[allow(clippy::float_cmp)] + fn plain_date_time_limits() { + // This test is primarily to assert that the `expect` in the epoch methods is + // valid, i.e., a valid instant is within the range of an f64. + let negative_limit = pdt_from_date(-271_821, 4, 19); + assert!(negative_limit.is_err()); + let positive_limit = pdt_from_date(275_760, 9, 14); + assert!(positive_limit.is_err()); + let within_negative_limit = pdt_from_date(-271_821, 4, 20); + assert_eq!( + within_negative_limit, + Ok(PlainDateTime { + iso: IsoDateTime { + date: IsoDate { + year: -271_821, + month: 4, + day: 20, + }, + time: IsoTime::default(), + }, + calendar: Calendar::default(), + }) + ); + + let within_positive_limit = pdt_from_date(275_760, 9, 13); + assert_eq!( + within_positive_limit, + Ok(PlainDateTime { + iso: IsoDateTime { + date: IsoDate { + year: 275_760, + month: 9, + day: 13, + }, + time: IsoTime::default(), + }, + calendar: Calendar::default(), + }) + ); + } + + #[test] + fn basic_with_test() { + let pdt = + PlainDateTime::try_new(1976, 11, 18, 15, 23, 30, 123, 456, 789, Calendar::default()) + .unwrap(); + + // Test year + let fields = DateTimeFields { + calendar_fields: CalendarFields::new().with_year(2019), + time: PartialTime::default(), + }; + let result = pdt.with(fields, None).unwrap(); + assert_datetime( + result, + (2019, 11, tinystr!(4, "M11"), 18, 15, 23, 30, 123, 456, 789), + ); + + // Test month + let fields = DateTimeFields { + calendar_fields: CalendarFields::new().with_month(5), + time: PartialTime::default(), + }; + let result = pdt.with(fields, None).unwrap(); + assert_datetime( + result, + (1976, 5, tinystr!(4, "M05"), 18, 15, 23, 30, 123, 456, 789), + ); + + // Test monthCode + let fields = DateTimeFields { + calendar_fields: CalendarFields::new().with_month_code(MonthCode(tinystr!(4, "M05"))), + time: PartialTime::default(), + }; + let result = pdt.with(fields, None).unwrap(); + assert_datetime( + result, + (1976, 5, tinystr!(4, "M05"), 18, 15, 23, 30, 123, 456, 789), + ); + + // Test day + let fields = DateTimeFields { + calendar_fields: CalendarFields::new().with_day(5), + time: PartialTime::default(), + }; + let result = pdt.with(fields, None).unwrap(); + assert_datetime( + result, + (1976, 11, tinystr!(4, "M11"), 5, 15, 23, 30, 123, 456, 789), + ); + + // Test hour + let fields = DateTimeFields { + calendar_fields: CalendarFields::default(), + time: PartialTime { + hour: Some(5), + ..Default::default() + }, + }; + let result = pdt.with(fields, None).unwrap(); + assert_datetime( + result, + (1976, 11, tinystr!(4, "M11"), 18, 5, 23, 30, 123, 456, 789), + ); + + // Test minute + let fields = DateTimeFields { + calendar_fields: CalendarFields::default(), + time: PartialTime { + minute: Some(5), + ..Default::default() + }, + }; + let result = pdt.with(fields, None).unwrap(); + assert_datetime( + result, + (1976, 11, tinystr!(4, "M11"), 18, 15, 5, 30, 123, 456, 789), + ); + + // Test second + let fields = DateTimeFields { + calendar_fields: CalendarFields::default(), + time: PartialTime { + second: Some(5), + ..Default::default() + }, + }; + let result = pdt.with(fields, None).unwrap(); + assert_datetime( + result, + (1976, 11, tinystr!(4, "M11"), 18, 15, 23, 5, 123, 456, 789), + ); + + // Test second + let fields = DateTimeFields { + calendar_fields: CalendarFields::default(), + time: PartialTime { + millisecond: Some(5), + ..Default::default() + }, + }; + let result = pdt.with(fields, None).unwrap(); + assert_datetime( + result, + (1976, 11, tinystr!(4, "M11"), 18, 15, 23, 30, 5, 456, 789), + ); + + // Test second + let fields = DateTimeFields { + calendar_fields: CalendarFields::default(), + time: PartialTime { + microsecond: Some(5), + ..Default::default() + }, + }; + let result = pdt.with(fields, None).unwrap(); + assert_datetime( + result, + (1976, 11, tinystr!(4, "M11"), 18, 15, 23, 30, 123, 5, 789), + ); + + // Test second + let fields = DateTimeFields { + calendar_fields: CalendarFields::default(), + time: PartialTime { + nanosecond: Some(5), + ..Default::default() + }, + }; + let result = pdt.with(fields, None).unwrap(); + assert_datetime( + result, + (1976, 11, tinystr!(4, "M11"), 18, 15, 23, 30, 123, 456, 5), + ); + } + + #[test] + fn datetime_with_empty_partial() { + let pdt = + PlainDateTime::try_new(2020, 1, 31, 12, 34, 56, 987, 654, 321, Calendar::default()) + .unwrap(); + + let err = pdt.with(DateTimeFields::default(), None); + assert!(err.is_err()); + } + + // options-undefined.js + #[test] + fn datetime_add_test() { + let pdt = + PlainDateTime::try_new(2020, 1, 31, 12, 34, 56, 987, 654, 321, Calendar::default()) + .unwrap(); + + let result = pdt + .add( + &Duration::from(DateDuration::new(0, 1, 0, 0).unwrap()), + None, + ) + .unwrap(); + + assert_eq!(result.month(), 2); + assert_eq!(result.day(), 29); + } + + // options-undefined.js + #[test] + fn datetime_subtract_test() { + let pdt = + PlainDateTime::try_new(2000, 3, 31, 12, 34, 56, 987, 654, 321, Calendar::default()) + .unwrap(); + + let result = pdt + .subtract( + &Duration::from(DateDuration::new(0, 1, 0, 0).unwrap()), + None, + ) + .unwrap(); + + assert_eq!(result.month(), 2); + assert_eq!(result.day(), 29); + } + + // subtract/hour-overflow.js + #[test] + fn datetime_subtract_hour_overflows() { + let dt = + PlainDateTime::try_new(2019, 10, 29, 10, 46, 38, 271, 986, 102, Calendar::default()) + .unwrap(); + + let result = dt.subtract(&Duration::from_hours(12), None).unwrap(); + assert_datetime( + result, + (2019, 10, tinystr!(4, "M10"), 28, 22, 46, 38, 271, 986, 102), + ); + + let result = dt.add(&Duration::from_hours(-12), None).unwrap(); + assert_datetime( + result, + (2019, 10, tinystr!(4, "M10"), 28, 22, 46, 38, 271, 986, 102), + ); + } + + fn create_diff_setting( + smallest: Unit, + increment: u32, + rounding_mode: RoundingMode, + ) -> DifferenceSettings { + DifferenceSettings { + largest_unit: None, + smallest_unit: Some(smallest), + increment: Some(RoundingIncrement::try_new(increment).unwrap()), + rounding_mode: Some(rounding_mode), + } + } + + #[test] + fn dt_until_basic() { + let earlier = + PlainDateTime::try_new(2019, 1, 8, 8, 22, 36, 123, 456, 789, Calendar::default()) + .unwrap(); + let later = + PlainDateTime::try_new(2021, 9, 7, 12, 39, 40, 987, 654, 321, Calendar::default()) + .unwrap(); + + let settings = create_diff_setting(Unit::Hour, 3, RoundingMode::HalfExpand); + let result = earlier.until(&later, settings).unwrap(); + + assert_eq!(result.days(), 973); + assert_eq!(result.hours(), 3); + + let settings = create_diff_setting(Unit::Minute, 30, RoundingMode::HalfExpand); + let result = earlier.until(&later, settings).unwrap(); + + assert_eq!(result.days(), 973); + assert_eq!(result.hours(), 4); + assert_eq!(result.minutes(), 30); + } + + #[test] + fn dt_since_basic() { + let earlier = + PlainDateTime::try_new(2019, 1, 8, 8, 22, 36, 123, 456, 789, Calendar::default()) + .unwrap(); + let later = + PlainDateTime::try_new(2021, 9, 7, 12, 39, 40, 987, 654, 321, Calendar::default()) + .unwrap(); + + let settings = create_diff_setting(Unit::Hour, 3, RoundingMode::HalfExpand); + let result = later.since(&earlier, settings).unwrap(); + + assert_eq!(result.days(), 973); + assert_eq!(result.hours(), 3); + + let settings = create_diff_setting(Unit::Minute, 30, RoundingMode::HalfExpand); + let result = later.since(&earlier, settings).unwrap(); + + assert_eq!(result.days(), 973); + assert_eq!(result.hours(), 4); + assert_eq!(result.minutes(), 30); + } + + #[test] + fn dt_since_conflicting_signs() { + // From intl402/Temporal/PlainDateTime/prototype/since/wrapping-at-end-of-month-gregorian + // Tests that date arithmetic with conflicting signs works + let a = PlainDateTime::try_new(2023, 3, 1, 2, 0, 0, 0, 0, 0, Calendar::GREGORIAN).unwrap(); + let b = PlainDateTime::try_new(2023, 1, 1, 3, 0, 0, 0, 0, 0, Calendar::GREGORIAN).unwrap(); + + let settings = DifferenceSettings { + largest_unit: Some(Unit::Year), + ..Default::default() + }; + let result = a.since(&b, settings).unwrap(); + + assert_eq!(result.months(), 1); + assert_eq!(result.days(), 30); + assert_eq!(result.hours(), 23); + } + + #[test] + fn dt_round_basic() { + let assert_datetime = + |dt: PlainDateTime, expected: (i32, u8, u8, u8, u8, u8, u16, u16, u16)| { + assert_eq!(dt.iso_year(), expected.0); + assert_eq!(dt.iso_month(), expected.1); + assert_eq!(dt.iso_day(), expected.2); + assert_eq!(dt.hour(), expected.3); + assert_eq!(dt.minute(), expected.4); + assert_eq!(dt.second(), expected.5); + assert_eq!(dt.millisecond(), expected.6); + assert_eq!(dt.microsecond(), expected.7); + assert_eq!(dt.nanosecond(), expected.8); + }; + + let gen_rounding_options = |smallest: Unit, increment: u32| -> RoundingOptions { + RoundingOptions { + largest_unit: None, + smallest_unit: Some(smallest), + increment: Some(RoundingIncrement::try_new(increment).unwrap()), + rounding_mode: None, + } + }; + let dt = + PlainDateTime::try_new(1976, 11, 18, 14, 23, 30, 123, 456, 789, Calendar::default()) + .unwrap(); + + let result = dt.round(gen_rounding_options(Unit::Hour, 4)).unwrap(); + assert_datetime(result, (1976, 11, 18, 16, 0, 0, 0, 0, 0)); + + let result = dt.round(gen_rounding_options(Unit::Minute, 15)).unwrap(); + assert_datetime(result, (1976, 11, 18, 14, 30, 0, 0, 0, 0)); + + let result = dt.round(gen_rounding_options(Unit::Second, 30)).unwrap(); + assert_datetime(result, (1976, 11, 18, 14, 23, 30, 0, 0, 0)); + + let result = dt + .round(gen_rounding_options(Unit::Millisecond, 10)) + .unwrap(); + assert_datetime(result, (1976, 11, 18, 14, 23, 30, 120, 0, 0)); + + let result = dt + .round(gen_rounding_options(Unit::Microsecond, 10)) + .unwrap(); + assert_datetime(result, (1976, 11, 18, 14, 23, 30, 123, 460, 0)); + + let result = dt + .round(gen_rounding_options(Unit::Nanosecond, 10)) + .unwrap(); + assert_datetime(result, (1976, 11, 18, 14, 23, 30, 123, 456, 790)); + } + + #[test] + fn datetime_round_options() { + let dt = + PlainDateTime::try_new(1976, 11, 18, 14, 23, 30, 123, 456, 789, Calendar::default()) + .unwrap(); + + let bad_options = RoundingOptions { + largest_unit: None, + smallest_unit: None, + rounding_mode: Some(RoundingMode::Ceil), + increment: Some(RoundingIncrement::ONE), + }; + + let err = dt.round(bad_options); + assert!(err.is_err()); + + let err = dt.round(RoundingOptions::default()); + assert!(err.is_err()); + } + + // Mapped from fractionaldigits-number.js + #[test] + fn to_string_precision_digits() { + let few_seconds = + PlainDateTime::try_new(1976, 2, 4, 5, 3, 1, 0, 0, 0, Calendar::default()).unwrap(); + let zero_seconds = + PlainDateTime::try_new(1976, 11, 18, 15, 23, 0, 0, 0, 0, Calendar::default()).unwrap(); + let whole_seconds = + PlainDateTime::try_new(1976, 11, 18, 15, 23, 30, 0, 0, 0, Calendar::default()).unwrap(); + let subseconds = + PlainDateTime::try_new(1976, 11, 18, 15, 23, 30, 123, 400, 0, Calendar::default()) + .unwrap(); + + let options = ToStringRoundingOptions { + precision: Precision::Digit(0), + smallest_unit: None, + rounding_mode: None, + }; + assert_eq!( + &few_seconds + .to_ixdtf_string(options, DisplayCalendar::Auto) + .unwrap(), + "1976-02-04T05:03:01", + "pads parts with 0" + ); + + let options = ToStringRoundingOptions { + precision: Precision::Digit(0), + smallest_unit: None, + rounding_mode: None, + }; + assert_eq!( + &subseconds + .to_ixdtf_string(options, DisplayCalendar::Auto) + .unwrap(), + "1976-11-18T15:23:30", + "truncates 4 decimal places to 0" + ); + + let options = ToStringRoundingOptions { + precision: Precision::Digit(2), + smallest_unit: None, + rounding_mode: None, + }; + assert_eq!( + &zero_seconds + .to_ixdtf_string(options, DisplayCalendar::Auto) + .unwrap(), + "1976-11-18T15:23:00.00", + "pads zero seconds to 2 decimal places" + ); + let options = ToStringRoundingOptions { + precision: Precision::Digit(2), + smallest_unit: None, + rounding_mode: None, + }; + + assert_eq!( + &whole_seconds + .to_ixdtf_string(options, DisplayCalendar::Auto) + .unwrap(), + "1976-11-18T15:23:30.00", + "pads whole seconds to 2 decimal places" + ); + let options = ToStringRoundingOptions { + precision: Precision::Digit(2), + smallest_unit: None, + rounding_mode: None, + }; + assert_eq!( + &subseconds + .to_ixdtf_string(options, DisplayCalendar::Auto) + .unwrap(), + "1976-11-18T15:23:30.12", + "truncates 4 decimal places to 2" + ); + + let options = ToStringRoundingOptions { + precision: Precision::Digit(3), + smallest_unit: None, + rounding_mode: None, + }; + assert_eq!( + &subseconds + .to_ixdtf_string(options, DisplayCalendar::Auto) + .unwrap(), + "1976-11-18T15:23:30.123", + "truncates 4 decimal places to 3" + ); + + let options = ToStringRoundingOptions { + precision: Precision::Digit(6), + smallest_unit: None, + rounding_mode: None, + }; + assert_eq!( + &subseconds + .to_ixdtf_string(options, DisplayCalendar::Auto) + .unwrap(), + "1976-11-18T15:23:30.123400", + "pads 4 decimal places to 6" + ); + let options = ToStringRoundingOptions { + precision: Precision::Digit(7), + smallest_unit: None, + rounding_mode: None, + }; + assert_eq!( + &zero_seconds + .to_ixdtf_string(options, DisplayCalendar::Auto) + .unwrap(), + "1976-11-18T15:23:00.0000000", + "pads zero seconds to 7 decimal places" + ); + let options = ToStringRoundingOptions { + precision: Precision::Digit(7), + smallest_unit: None, + rounding_mode: None, + }; + assert_eq!( + &whole_seconds + .to_ixdtf_string(options, DisplayCalendar::Auto) + .unwrap(), + "1976-11-18T15:23:30.0000000", + "pads whole seconds to 7 decimal places" + ); + let options = ToStringRoundingOptions { + precision: Precision::Digit(7), + smallest_unit: None, + rounding_mode: None, + }; + assert_eq!( + &subseconds + .to_ixdtf_string(options, DisplayCalendar::Auto) + .unwrap(), + "1976-11-18T15:23:30.1234000", + "pads 4 decimal places to 7" + ); + let options = ToStringRoundingOptions { + precision: Precision::Digit(9), + smallest_unit: None, + rounding_mode: None, + }; + assert_eq!( + &subseconds + .to_ixdtf_string(options, DisplayCalendar::Auto) + .unwrap(), + "1976-11-18T15:23:30.123400000", + "pads 4 decimal places to 9" + ); + } + + #[test] + fn datetime_add() { + use crate::{Duration, PlainDateTime}; + use core::str::FromStr; + + let dt = PlainDateTime::from_str("2024-01-15T12:00:00").unwrap(); + + let duration = Duration::from_str("P1M2DT3H4M").unwrap(); + + // Add duration + let later = dt.add(&duration, None).unwrap(); + assert_eq!(later.month(), 2); + assert_eq!(later.day(), 17); + assert_eq!(later.hour(), 15); + assert_eq!(later.minute(), 4); + } +} diff --git a/crates/temporal/src/builtins/core/plain_month_day.rs b/crates/temporal/src/builtins/core/plain_month_day.rs new file mode 100644 index 000000000..198dd96e2 --- /dev/null +++ b/crates/temporal/src/builtins/core/plain_month_day.rs @@ -0,0 +1,756 @@ +//! This module implements `MonthDay` and any directly related algorithms. + +use alloc::string::String; +use core::str::FromStr; + +use crate::{ + builtins::calendar::CalendarFields, + error::ErrorMessage, + iso::{IsoDate, IsoDateTime, IsoTime}, + options::{Disambiguation, DisplayCalendar, Overflow}, + parsed_intermediates::ParsedDate, + parsers::{FormattableCalendar, FormattableDate, FormattableMonthDay}, + provider::TimeZoneProvider, + unix_time::EpochNanoseconds, + Calendar, MonthCode, TemporalError, TemporalResult, TimeZone, +}; + +use super::{PartialDate, PlainDate}; +use icu_calendar::AnyCalendarKind; +use writeable::Writeable; + +/// The native Rust implementation of `Temporal.PlainMonthDay`. +/// +/// Represents a calendar month and day without a specific year, such as +/// "December 25th" or "March 15th". Useful for representing recurring annual +/// events where the year is not specified or relevant. +/// +/// Commonly used for holidays, birthdays, anniversaries, and other events +/// that occur on the same date each year. Special handling is required for +/// February 29th when working with non-leap years. +/// +/// ## Examples +/// +/// ### Creating a PlainMonthDay +/// +/// ```rust +/// use temporal::{PlainMonthDay, Calendar, MonthCode, options::Overflow}; +/// +/// // Create March 15th +/// let md = PlainMonthDay::new_with_overflow( +/// 3, 15, // month, day +/// Calendar::default(), // ISO 8601 calendar +/// Overflow::Reject, // reject invalid dates +/// None // no reference year +/// ).unwrap(); +/// +/// assert_eq!(md.month_code(), MonthCode::try_from_utf8("M03".as_bytes()).unwrap()); +/// assert_eq!(md.day(), 15); +/// assert_eq!(md.calendar().identifier(), "iso8601"); +/// ``` +/// +/// ### Parsing ISO 8601 month-day strings +/// +/// ```rust +/// use temporal::{PlainMonthDay, MonthCode}; +/// use core::str::FromStr; +/// +/// // Parse month-day strings +/// let md = PlainMonthDay::from_str("03-15").unwrap(); +/// assert_eq!(md.month_code(), MonthCode::try_from_utf8("M03".as_bytes()).unwrap()); +/// assert_eq!(md.day(), 15); +/// +/// // Also supports various formats +/// let md2 = PlainMonthDay::from_str("--03-15").unwrap(); // RFC 3339 format +/// assert_eq!(md2.month_code(), MonthCode::try_from_utf8("M03".as_bytes()).unwrap()); +/// assert_eq!(md2.day(), 15); +/// assert_eq!(md, md2); // equivalent +/// ``` +/// +/// ### Working with partial fields +/// +/// ```rust +/// use temporal::{PlainMonthDay, MonthCode, fields::CalendarFields}; +/// use core::str::FromStr; +/// +/// let md = PlainMonthDay::from_str("03-15").unwrap(); // March 15th +/// +/// // Change the month +/// let fields = CalendarFields::new().with_month(12); +/// let modified = md.with(fields, None).unwrap(); +/// assert_eq!(modified.month_code(), MonthCode::try_from_utf8("M12".as_bytes()).unwrap()); +/// assert_eq!(modified.day(), 15); // unchanged +/// +/// // Change the day +/// let fields = CalendarFields::new().with_day(25); +/// let modified = md.with(fields, None).unwrap(); +/// assert_eq!(modified.month_code(), MonthCode::try_from_utf8("M03".as_bytes()).unwrap()); // unchanged +/// assert_eq!(modified.day(), 25); +/// ``` +/// +/// ### Converting to PlainDate +/// +/// ```rust +/// use temporal::{PlainMonthDay, fields::CalendarFields}; +/// use core::str::FromStr; +/// +/// let md = PlainMonthDay::from_str("12-25").unwrap(); // December 25th +/// +/// // Convert to a specific date by providing a year +/// let year_fields = CalendarFields::new().with_year(2024); +/// let date = md.to_plain_date(Some(year_fields)).unwrap(); +/// assert_eq!(date.year(), 2024); +/// assert_eq!(date.month(), 12); +/// assert_eq!(date.day(), 25); +/// // This represents December 25th, 2024 +/// ``` +/// +/// ### Handling leap year dates +/// +/// ```rust +/// use temporal::{PlainMonthDay, MonthCode, fields::CalendarFields, Calendar, options::Overflow}; +/// +/// // February 29th (leap day) +/// let leap_day = PlainMonthDay::new_with_overflow( +/// 2, 29, +/// Calendar::default(), +/// Overflow::Reject, +/// Some(2024) // reference year 2024 (a leap year) +/// ).unwrap(); +/// +/// assert_eq!(leap_day.month_code(), MonthCode::try_from_utf8("M02".as_bytes()).unwrap()); +/// assert_eq!(leap_day.day(), 29); +/// +/// // Convert to non-leap year - this would need special handling +/// let year_fields = CalendarFields::new().with_year(2023); // non-leap year +/// let result = leap_day.to_plain_date(Some(year_fields)); +/// // This might fail or be adjusted depending on the calendar's rules +/// ``` +/// +/// ### Practical use cases +/// +/// ```rust +/// use temporal::{PlainMonthDay, fields::CalendarFields}; +/// use core::str::FromStr; +/// +/// // Birthday (recurring annually) +/// let birthday = PlainMonthDay::from_str("07-15").unwrap(); // July 15th +/// +/// // Calculate this year's birthday +/// let this_year = 2024; +/// let year_fields = CalendarFields::new().with_year(this_year); +/// let birthday_2024 = birthday.to_plain_date(Some(year_fields)).unwrap(); +/// assert_eq!(birthday_2024.year(), 2024); +/// assert_eq!(birthday_2024.month(), 7); +/// assert_eq!(birthday_2024.day(), 15); +/// +/// // Holiday (Christmas) +/// let christmas = PlainMonthDay::from_str("12-25").unwrap(); +/// let year_fields = CalendarFields::new().with_year(this_year); +/// let christmas_2024 = christmas.to_plain_date(Some(year_fields)).unwrap(); +/// assert_eq!(christmas_2024.month(), 12); +/// assert_eq!(christmas_2024.day(), 25); +/// ``` +/// +/// ## Reference +/// +/// For more information, see the [MDN documentation][mdn-plainmonthday]. +/// +/// [mdn-plainmonthday]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay +#[non_exhaustive] +#[derive(Debug, Default, Clone, PartialEq, Eq)] +pub struct PlainMonthDay { + pub iso: IsoDate, + calendar: Calendar, +} + +impl core::fmt::Display for PlainMonthDay { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + f.write_str(&self.to_ixdtf_string(DisplayCalendar::Auto)) + } +} + +impl PlainMonthDay { + /// Creates a new unchecked `PlainMonthDay` + #[inline] + #[must_use] + pub(crate) fn new_unchecked(iso: IsoDate, calendar: Calendar) -> Self { + Self { iso, calendar } + } + + /// Returns the ISO month value of `PlainMonthDay`. + #[inline] + #[must_use] + pub(crate) fn iso_month(&self) -> u8 { + self.iso.month + } + + /// Returns the ISO year value of `PlainMonthDay`. + #[inline] + #[must_use] + pub(crate) fn iso_year(&self) -> i32 { + self.iso.year + } +} + +impl PlainMonthDay { + /// Creates a new valid `PlainMonthDay`. + #[inline] + pub fn new_with_overflow( + month: u8, + day: u8, + calendar: Calendar, + overflow: Overflow, + ref_year: Option, + ) -> TemporalResult { + let ry = ref_year.unwrap_or(1972); + // 1972 is the first leap year in the Unix epoch (needed to cover all dates) + let iso = IsoDate::new_with_overflow(ry, month, day, overflow)?; + Ok(Self::new_unchecked(iso, calendar)) + } + + // Converts a UTF-8 encoded string into a `PlainMonthDay`. + pub fn from_utf8(s: &[u8]) -> TemporalResult { + let parsed = ParsedDate::month_day_from_utf8(s)?; + Self::from_parsed(parsed) + } + + // Converts a ParsedDate into a `PlainMonthDay`. + // + // Be sure to parse this using [`ParsedDate::month_day_from_utf8()`]~ + pub fn from_parsed(parsed: ParsedDate) -> TemporalResult { + let calendar = Calendar::new(parsed.calendar); + // 10. If calendar is "iso8601", then + if parsed.calendar == AnyCalendarKind::Iso { + // a. Let referenceISOYear be 1972 (the first ISO 8601 leap year after the epoch). + // b. Let isoDate be CreateISODateRecord(referenceISOYear, result.[[Month]], result.[[Day]]). + // c. Return !CreateTemporalMonthDay(isoDate, calendar). + let iso = IsoDate::new_unchecked(1972, parsed.record.month, parsed.record.day); + debug_assert!(iso.check_validity().is_ok(), "Found invalid ParsedDate"); + return Ok(Self::new_unchecked(iso, calendar)); + } + // 11. Let isoDate be CreateISODateRecord(result.[[Year]], result.[[Month]], result.[[Day]]). + // 12. If ISODateWithinLimits(isoDate) is false, throw a RangeError exception. + // Note: parse_month_day will refuse to parse MM-DD format month-days for non-ISO, but + // it will happily parse YYYY-MM-DD[u-ca=CAL]. These will be valid ISO dates; but they + // could potentially be out of Temporal range. + let iso = + IsoDate::new_unchecked(parsed.record.year, parsed.record.month, parsed.record.day); + iso.check_within_limits()?; + debug_assert!(iso.check_validity().is_ok(), "Found invalid ParsedDate"); + + // 13. Set result to ISODateToFields(calendar, isoDate, month-day). + + let intermediate = Self::new_unchecked(iso, Calendar::new(parsed.calendar)); + let fields = CalendarFields::from_month_day(&intermediate); + // 14. NOTE: The following operation is called with constrain regardless of the value of overflow, in + // order for the calendar to store a canonical value in the [[Year]] field of the [[ISODate]] internal slot of the result. + // 15. Set isoDate to ? CalendarMonthDayFromFields(calendar, result, constrain). + intermediate + .calendar() + .month_day_from_fields(fields, Overflow::Constrain) + } + + /// Create a `PlainMonthDay` from a `PartialDate` + pub fn from_partial(partial: PartialDate, overflow: Option) -> TemporalResult { + partial + .calendar + .month_day_from_fields(partial.calendar_fields, overflow.unwrap_or_default()) + } + + /// Create a `PlainMonthDay` with the provided fields from a [`PartialDate`]. + pub fn with(&self, fields: CalendarFields, overflow: Option) -> TemporalResult { + // Steps 1-6 are engine specific. + // 5. Let fields be ISODateToFields(calendar, monthDay.[[ISODate]], month-day). + // 6. Let partialMonthDay be ? PrepareCalendarFields(calendar, temporalMonthDayLike, « year, month, month-code, day », « », partial). + // + // NOTE: We assert that partial is not empty per step 6 + if fields.is_empty() { + return Err(TemporalError::r#type().with_enum(ErrorMessage::EmptyFieldsIsInvalid)); + } + + // NOTE: We only need to set month / month_code and day, per spec. + // 7. Set fields to CalendarMergeFields(calendar, fields, partialMonthDay). + let merged_day = fields.day.unwrap_or(self.day()); + let mut merged = fields.with_day(merged_day); + if merged.month.is_none() && merged.month_code.is_none() { + // MonthDay resolution prefers month codes + // (ordinal months work, but require year information, which + // we may not have) + // We should NOT merge over year information even though we have it. + merged = merged.with_month_code(self.month_code()); + } + // Step 8-9 already handled by engine. + // 8. Let resolvedOptions be ? GetOptionsObject(options). + // 9. Let overflow be ? GetTemporalOverflowOption(resolvedOptions). + // 10. Let isoDate be ? CalendarMonthDayFromFields(calendar, fields, overflow). + // 11. Return ! CreateTemporalMonthDay(isoDate, calendar). + self.calendar + .month_day_from_fields(merged, overflow.unwrap_or(Overflow::Constrain)) + } + + /// Returns the string identifier for the current `Calendar`. + #[inline] + #[must_use] + pub fn calendar_id(&self) -> &'static str { + self.calendar.identifier() + } + + /// Returns a reference to `PlainMonthDay`'s inner `Calendar`. + #[inline] + #[must_use] + pub fn calendar(&self) -> &Calendar { + &self.calendar + } + + /// Returns the calendar `monthCode` value of `PlainMonthDay`. + #[inline] + pub fn month_code(&self) -> MonthCode { + self.calendar.month_code(&self.iso) + } + + /// Returns the calendar day value of `PlainMonthDay`. + #[inline] + pub fn day(&self) -> u8 { + self.calendar.day(&self.iso) + } + + /// Returns the internal reference year used by this MonthDay. + #[inline] + pub fn reference_year(&self) -> i32 { + self.calendar.year(&self.iso) + } + + /// Create a [`PlainDate`] from the current `PlainMonthDay`. + pub fn to_plain_date(&self, year: Option) -> TemporalResult { + let year_partial = match &year { + Some(partial) => partial, + None => return Err(TemporalError::r#type().with_message("Year must be provided")), + }; + + // Fallback logic: prefer year, else era/era_year + let mut fields = CalendarFields::new() + .with_month_code(self.month_code()) + .with_day(self.day()); + + if let Some(year) = year_partial.year { + fields.year = Some(year); + } else if let (Some(era), Some(era_year)) = (year_partial.era, year_partial.era_year) { + fields.era = Some(era); + fields.era_year = Some(era_year); + } else { + return Err(TemporalError::r#type() + .with_message("PartialDate must contain a year or era/era_year fields")); + } + + // 8. Let isoDate be ? CalendarDateFromFields(calendar, mergedFields, constrain). + self.calendar.date_from_fields(fields, Overflow::Constrain) + } + + /// Gets the epochMilliseconds represented by this YearMonth in the given timezone + /// (using the reference year, and noon time) + /// + // Useful for implementing HandleDateTimeTemporalYearMonth + pub fn epoch_ns_for_with_provider( + &self, + time_zone: TimeZone, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + // 2. Let isoDateTime be CombineISODateAndTimeRecord(temporalYearMonth.[[ISODate]], NoonTimeRecord()). + let iso = IsoDateTime::new(self.iso, IsoTime::noon())?; + // 3. Let epochNs be ? GetEpochNanosecondsFor(dateTimeFormat.[[TimeZone]], isoDateTime, compatible). + Ok(time_zone + .get_epoch_nanoseconds_for(iso, Disambiguation::Compatible, provider)? + .ns) + } + + /// Gets the EpochNanoseconds represented by this MonthDay + /// (using the reference year, noon time, and UTC timezone) + /// + // Useful for implementing HandleDateTimeTemporalYearMonth + pub fn epoch_ns_for_utc(&self) -> EpochNanoseconds { + // 2. Let isoDateTime be CombineISODateAndTimeRecord(temporalMonthDay.[[ISODate]], NoonTimeRecord()). + let iso = IsoDateTime::new(self.iso, IsoTime::noon()); + debug_assert!(iso.is_ok()); + // 3. Let epochNs be ? GetUTCEpochNanoseconds(isoDateTime). + iso.unwrap_or_default().as_nanoseconds() + } + + /// Creates a RFC9557 IXDTF string from the current `PlainMonthDay`. + pub fn to_ixdtf_string(&self, display_calendar: DisplayCalendar) -> String { + self.to_ixdtf_writeable(display_calendar) + .write_to_string() + .into() + } + + /// Creates a RFC9557 IXDTF [`Writeable`]. + pub fn to_ixdtf_writeable(&self, display_calendar: DisplayCalendar) -> impl Writeable + '_ { + let ixdtf = FormattableMonthDay { + date: FormattableDate(self.iso_year(), self.iso_month(), self.iso.day), + calendar: FormattableCalendar { + show: display_calendar, + calendar: self.calendar().identifier(), + }, + }; + ixdtf + } +} + +impl FromStr for PlainMonthDay { + type Err = TemporalError; + + fn from_str(s: &str) -> Result { + Self::from_utf8(s.as_bytes()) + } +} + +#[cfg(test)] +mod tests { + use super::*; + use crate::Calendar; + use tinystr::tinystr; + + #[test] + fn test_plain_month_day_with() { + let month_day = PlainMonthDay::from_utf8("01-15".as_bytes()).unwrap(); + + let new = month_day + .with(CalendarFields::new().with_day(22), None) + .unwrap(); + assert_eq!( + new.month_code(), + MonthCode::try_from_utf8("M01".as_bytes()).unwrap() + ); + assert_eq!(new.day(), 22,); + + let new = month_day + .with(CalendarFields::new().with_month(12), None) + .unwrap(); + assert_eq!( + new.month_code(), + MonthCode::try_from_utf8("M12".as_bytes()).unwrap() + ); + assert_eq!(new.day(), 15,); + } + + #[test] + fn test_to_plain_date_with_year() { + let month_day = + PlainMonthDay::new_with_overflow(5, 15, Calendar::default(), Overflow::Reject, None) + .unwrap(); + + let fields = CalendarFields::new().with_year(2025); + let plain_date = month_day.to_plain_date(Some(fields)).unwrap(); + assert_eq!(plain_date.iso_year(), 2025); + assert_eq!(plain_date.iso_month(), 5); + assert_eq!(plain_date.iso_day(), 15); + } + + #[test] + fn test_to_plain_date_with_era_and_era_year() { + // Use a calendar that supports era/era_year, e.g., "gregory" + let calendar = Calendar::from_str("gregory").unwrap(); + let month_day = + PlainMonthDay::new_with_overflow(3, 10, calendar.clone(), Overflow::Reject, None) + .unwrap(); + + // Era "ce" and era_year 2020 should resolve to year 2020 in Gregorian + let fields = CalendarFields::new() + .with_era(Some(tinystr!(19, "ce"))) + .with_era_year(Some(2020)); + let plain_date = month_day.to_plain_date(Some(fields)); + // Gregorian calendar in ICU4X may not resolve era/era_year unless year is also provided. + // Accept both Ok and Err, but if Ok, check the values. + match plain_date { + Ok(plain_date) => { + assert_eq!(plain_date.iso_year(), 2020); + assert_eq!(plain_date.iso_month(), 3); + assert_eq!(plain_date.iso_day(), 10); + } + Err(_) => { + // Acceptable if era/era_year fallback is not supported by the calendar impl + } + } + } + + #[test] + fn test_to_plain_date_missing_year_and_era() { + let month_day = + PlainMonthDay::new_with_overflow(7, 4, Calendar::default(), Overflow::Reject, None) + .unwrap(); + + // No year, no era/era_year + let fields = CalendarFields::new(); + let result = month_day.to_plain_date(Some(fields)); + assert!(result.is_err()); + } + + #[test] + fn test_to_plain_date_with_fallback_logic_matches_date() { + // This test ensures that the fallback logic in month_day matches the fallback logic in date.rs + let calendar = Calendar::from_str("gregory").unwrap(); + let month_day = + PlainMonthDay::new_with_overflow(12, 25, calendar.clone(), Overflow::Reject, None) + .unwrap(); + + // Provide only era/era_year, not year + let fields = CalendarFields::new() + .with_era(Some(tinystr!(19, "ce"))) + .with_era_year(Some(1999)); + let plain_date = month_day.to_plain_date(Some(fields)); + match plain_date { + Ok(plain_date) => { + assert_eq!(plain_date.iso_year(), 1999); + assert_eq!(plain_date.iso_month(), 12); + assert_eq!(plain_date.iso_day(), 25); + } + Err(_) => { + // Acceptable if era/era_year fallback is not supported by the calendar impl + } + } + } + #[test] + fn test_valid_strings() { + const TESTS: &[&str] = &[ + "02-29", + "02-28", + "2025-08-05", + "2025-08-05[u-ca=gregory]", + "2024-02-29[u-ca=gregory]", + ]; + for test in TESTS { + assert!(PlainMonthDay::from_utf8(test.as_bytes()).is_ok()); + } + } + #[test] + fn test_invalid_strings() { + const TESTS: &[&str] = &[ + // Out of range + "-99999-01-01", + "-99999-01-01[u-ca=gregory]", + // Not a leap year + "2025-02-29", + "2025-02-29[u-ca=gregory]", + // Format not allowed for non-Gregorian + "02-28[u-ca=gregory]", + ]; + for test in TESTS { + assert!(PlainMonthDay::from_utf8(test.as_bytes()).is_err()); + } + } + + #[test] + /// This test is for calendars where we don't wish to hardcode dates; but we do wish to know + /// that monthcodes can be constructed without issue (currently only UAQ) + fn automated_uaq_reference_year() { + let reference_iso = IsoDate::new_unchecked(1972, 12, 31); + + let calendar = Calendar::new(AnyCalendarKind::HijriUmmAlQura); + for month in 1..=12 { + for day in [29, 30] { + let month_code = crate::builtins::calendar::month_to_month_code(month).unwrap(); + + let calendar_fields = CalendarFields { + month_code: Some(month_code), + day: Some(day), + ..Default::default() + }; + + let md = calendar + .month_day_from_fields(calendar_fields, Overflow::Reject) + .unwrap(); + + assert!( + md.iso <= reference_iso, + "Reference ISO for {month}-{day} must be before 1972-12-31, found, {:?}", + md.iso, + ); + } + } + } + + #[test] + fn manual_test_reference_year() { + // monthCode, day, ISO string, expectedReferenceYear + // Some of these parsed strings are deliberately not using the reference year + // so that we can test all code paths. By default, when adding new strings, it is easier + // to just add the reference year + const TESTS: &[(&str, u8, &str, i32)] = &[ + ("M10", 30, "1868-10-30[u-ca=gregory]", 1972), + ("M08", 8, "1868-10-30[u-ca=indian]", 1894), + ("M09", 21, "2000-12-12[u-ca=indian]", 1894), + // Dates in the earlier half of the year get pushed back a year + ("M10", 22, "2000-01-12[u-ca=indian]", 1893), + ("M01", 11, "2000-03-30[u-ca=persian]", 1351), + ("M09", 22, "2000-12-12[u-ca=persian]", 1351), + ("M12", 29, "2025-03-19[u-ca=persian]", 1350), + // Leap day + ("M12", 30, "2025-03-20[u-ca=persian]", 1350), + ("M01", 1, "2025-03-21[u-ca=persian]", 1351), + ("M01", 1, "2025-03-21[u-ca=persian]", 1351), + ("M01", 1, "1972-01-01[u-ca=roc]", 61), + ("M02", 29, "2024-02-29[u-ca=roc]", 61), + ("M12", 1, "1972-12-01[u-ca=roc]", 61), + ("M01", 1, "1972-09-11[u-ca=coptic]", 1689), + ("M12", 1, "1972-08-07[u-ca=coptic]", 1688), + ("M13", 5, "1972-09-10[u-ca=coptic]", 1688), + ("M13", 6, "1971-09-11[u-ca=coptic]", 1687), + ("M01", 1, "1972-09-11[u-ca=ethiopic]", 1965), + ("M12", 1, "1972-08-07[u-ca=ethiopic]", 1964), + ("M13", 5, "1972-09-10[u-ca=ethiopic]", 1964), + ("M13", 6, "1971-09-11[u-ca=ethiopic]", 1963), + ("M01", 1, "1972-09-11[u-ca=ethioaa]", 7465), + ("M12", 1, "1972-08-07[u-ca=ethioaa]", 7464), + ("M13", 5, "1972-09-10[u-ca=ethioaa]", 7464), + ("M13", 6, "1971-09-11[u-ca=ethioaa]", 7463), + ("M01", 1, "1972-09-09[u-ca=hebrew]", 5733), + ("M02", 29, "1972-11-06[u-ca=hebrew]", 5733), + ("M03", 29, "1972-12-05[u-ca=hebrew]", 5733), + ("M03", 30, "1971-12-18[u-ca=hebrew]", 5732), + ("M05L", 29, "1970-03-07[u-ca=hebrew]", 5730), + ("M07", 1, "1972-03-16[u-ca=hebrew]", 5732), + ("M01", 1, "1972-02-16[u-ca=islamic-civil]", 1392), + ("M12", 29, "1972-02-15[u-ca=islamic-civil]", 1391), + ("M12", 30, "1971-02-26[u-ca=islamic-civil]", 1390), + ("M01", 1, "1972-02-15[u-ca=islamic-tbla]", 1392), + ("M12", 29, "1972-02-14[u-ca=islamic-tbla]", 1391), + ("M12", 30, "1971-02-25[u-ca=islamic-tbla]", 1390), + ]; + let reference_iso = IsoDate::new_unchecked(1972, 12, 31); + for (month_code, day, string, year) in TESTS { + let md = PlainMonthDay::from_str(string).expect(string); + + let calendar_fields = CalendarFields { + month_code: Some(month_code.parse().unwrap()), + day: Some(*day), + ..Default::default() + }; + + let md_from_partial = md + .calendar() + .month_day_from_fields(calendar_fields, Overflow::Reject) + .expect(string); + + assert_eq!( + md, + md_from_partial, + "Parsed {string}, compared with {}: Expected {}-{}, Found {}-{}", + md_from_partial.to_ixdtf_string(Default::default()), + md_from_partial.month_code().0, + md_from_partial.day(), + md.month_code().0, + md.day() + ); + + assert_eq!( + md_from_partial.reference_year(), + *year, + "Reference year for {string} ({month_code}-{day}) must be {year}", + ); + + assert!( + md.iso <= reference_iso && md_from_partial.iso <= reference_iso, + "Reference ISO for {string} ({}-{}) must be before 1972-12-31, found, {:?} / {:?}", + md.month_code().0, + md.day(), + md.iso, + md_from_partial.iso + ); + } + } + + #[test] + fn month_day_range_check_with_year_iso() { + // https://github.com/boa-dev/temporal/issues/688 + let iso = IsoDate::new_unchecked(1972, 1, 1); + let md = PlainMonthDay::new_unchecked(iso, Calendar::ISO); + let mut partial = CalendarFields { + year: Some(-271821), + ..Default::default() + }; + let _ = md.with(partial.clone(), None).expect("should not throw"); + + partial.year = Some(i32::MIN); + + let _ = md.with(partial, None).expect("should not throw"); + let fields = CalendarFields { + year: Some(-27182100), + month: Some(2), + day: Some(29), + ..Default::default() + }; + let mut partial = PartialDate { + calendar_fields: fields, + calendar: Calendar::ISO, + }; + let resolved = PlainMonthDay::from_partial(partial.clone(), Some(Overflow::Constrain)) + .expect("should not throw"); + + assert_eq!( + resolved.day(), + 28, + "Should use provided year for constraining" + ); + + partial.calendar_fields.year = Some(-27182400); + let resolved = PlainMonthDay::from_partial(partial.clone(), Some(Overflow::Constrain)) + .expect("should not throw"); + assert_eq!( + resolved.day(), + 29, + "Should use provided year for constraining" + ); + } + + #[test] + fn month_day_range_check_with_year_non_iso() { + use crate::builtins::calendar::month_to_month_code; + + // https://github.com/boa-dev/temporal/issues/688 + // Here we need to actually make sure that years get range checked for the calendar, + // since the spec wants us to allow YMD inputs that are out of ISO range, *as long as* + // the year can produce in-ISO-range values for *some* MD values. + + let fields = CalendarFields { + year: Some(-27182100), + month_code: Some(month_to_month_code(1).unwrap()), + day: Some(1), + ..Default::default() + }; + let mut partial = PartialDate { + calendar_fields: fields, + calendar: Calendar::CHINESE, + }; + let _ = PlainMonthDay::from_partial(partial.clone(), Some(Overflow::Constrain)) + .expect_err("Should not allow far past dates"); + PlainDate::from_partial(partial.clone(), Some(Overflow::Constrain)) + .expect_err("PlainDate should not be as lenient"); + partial.calendar_fields.year = Some(-271821); + + let _ = PlainMonthDay::from_partial(partial.clone(), Some(Overflow::Constrain)) + .expect("should not throw"); + PlainDate::from_partial(partial.clone(), Some(Overflow::Constrain)) + .expect_err("PlainDate should not be as lenient"); + + let fields = CalendarFields { + year: Some(27576000), + month_code: Some(month_to_month_code(12).unwrap()), + day: Some(30), + ..Default::default() + }; + let mut partial = PartialDate { + calendar_fields: fields, + calendar: Calendar::CHINESE, + }; + let _ = PlainMonthDay::from_partial(partial.clone(), Some(Overflow::Constrain)) + .expect_err("Should not allow far future dates"); + PlainDate::from_partial(partial.clone(), Some(Overflow::Constrain)) + .expect_err("PlainDate should not be as lenient"); + partial.calendar_fields.year = Some(275760); + + let _ = PlainMonthDay::from_partial(partial.clone(), Some(Overflow::Constrain)) + .expect("should not throw"); + PlainDate::from_partial(partial.clone(), Some(Overflow::Constrain)) + .expect_err("PlainDate should not be as lenient"); + } +} diff --git a/crates/temporal/src/builtins/core/plain_time.rs b/crates/temporal/src/builtins/core/plain_time.rs new file mode 100644 index 000000000..d7e78a3aa --- /dev/null +++ b/crates/temporal/src/builtins/core/plain_time.rs @@ -0,0 +1,885 @@ +//! This module implements `Time` and any directly related algorithms. + +use crate::{ + builtins::{ + core::{DateDuration, Duration}, + duration::normalized::InternalDurationRecord, + }, + error::ErrorMessage, + iso::IsoTime, + iso::{IsoDate, IsoDateTime}, + options::{ + DifferenceOperation, DifferenceSettings, Overflow, ResolvedRoundingOptions, + RoundingOptions, ToStringRoundingOptions, Unit, UnitGroup, + }, + parsers::{parse_time, IxdtfStringBuilder}, + unix_time::EpochNanoseconds, + TemporalError, TemporalResult, +}; +use alloc::string::String; +use core::str::FromStr; +use writeable::Writeable; + +use super::{duration::normalized::TimeDuration, PlainDateTime}; + +// TODO: add a PartialSignedTime + +/// A `PartialTime` represents partially filled `Time` fields. +#[derive(Debug, Default, Clone, Copy, PartialEq)] +pub struct PartialTime { + // A potentially set `hour` field. + pub hour: Option, + // A potentially set `minute` field. + pub minute: Option, + // A potentially set `second` field. + pub second: Option, + // A potentially set `millisecond` field. + pub millisecond: Option, + // A potentially set `microsecond` field. + pub microsecond: Option, + // A potentially set `nanosecond` field. + pub nanosecond: Option, +} + +impl PartialTime { + pub fn is_empty(&self) -> bool { + *self == Self::default() + } +} + +/// Convenience methods for building a `PartialTime` +impl PartialTime { + pub const fn new() -> Self { + Self { + hour: None, + minute: None, + second: None, + millisecond: None, + microsecond: None, + nanosecond: None, + } + } + + pub const fn with_hour(mut self, hour: Option) -> Self { + self.hour = hour; + self + } + + pub const fn with_minute(mut self, minute: Option) -> Self { + self.minute = minute; + self + } + + pub const fn with_second(mut self, second: Option) -> Self { + self.second = second; + self + } + + pub const fn with_millisecond(mut self, millisecond: Option) -> Self { + self.millisecond = millisecond; + self + } + + pub const fn with_microsecond(mut self, microsecond: Option) -> Self { + self.microsecond = microsecond; + self + } + + pub const fn with_nanosecond(mut self, nanosecond: Option) -> Self { + self.nanosecond = nanosecond; + self + } +} + +/// The native Rust implementation of `Temporal.PlainTime`. +/// +/// Represents a time of day such as "14:30:45.123" without any date or timezone +/// information. Contains hour, minute, second, and subsecond components with +/// nanosecond precision. +/// +/// Ideal for representing recurring daily events, schedules, or any time value +/// where the specific date is not relevant. +/// +/// ## Examples +/// +/// ### Creating time values +/// +/// ```rust +/// use temporal::PlainTime; +/// +/// // High-precision time +/// let precise_time = PlainTime::try_new( +/// 14, 30, 45, // 2:30:45 PM +/// 123, 456, 789 // subsecond components +/// ).unwrap(); +/// assert_eq!(precise_time.hour(), 14); +/// assert_eq!(precise_time.millisecond(), 123); +/// +/// // Simple time without subseconds +/// let simple = PlainTime::try_new(9, 0, 0, 0, 0, 0).unwrap(); +/// assert_eq!(simple.hour(), 9); +/// ``` +/// +/// ### Parsing ISO 8601 time strings +/// +/// ```rust +/// use temporal::PlainTime; +/// use core::str::FromStr; +/// +/// let time = PlainTime::from_str("14:30:45.123456789").unwrap(); +/// assert_eq!(time.hour(), 14); +/// assert_eq!(time.minute(), 30); +/// assert_eq!(time.second(), 45); +/// assert_eq!(time.millisecond(), 123); +/// assert_eq!(time.microsecond(), 456); +/// assert_eq!(time.nanosecond(), 789); +/// +/// // Also supports time-only portions of ISO 8601 strings +/// let time = PlainTime::from_str("T09:15:30").unwrap(); +/// assert_eq!(time.hour(), 9); +/// assert_eq!(time.minute(), 15); +/// assert_eq!(time.second(), 30); +/// ``` +/// +/// ### Time arithmetic +/// +/// ```rust +/// use temporal::{PlainTime, Duration}; +/// use core::str::FromStr; +/// +/// let time = PlainTime::from_str("12:30:00").unwrap(); +/// +/// // Add 2 hours and 30 minutes +/// let later = time.add(&Duration::from_str("PT2H30M").unwrap()).unwrap(); +/// assert_eq!(later.hour(), 15); +/// assert_eq!(later.minute(), 0); +/// assert_eq!(later.second(), 0); +/// +/// // Calculate difference between times +/// let earlier = PlainTime::from_str("10:00:00").unwrap(); +/// let duration = earlier.until(&time, Default::default()).unwrap(); +/// assert_eq!(duration.hours(), 2); +/// assert_eq!(duration.minutes(), 30); +/// ``` +/// +/// ### Working with partial time fields +/// +/// ```rust +/// use temporal::{PlainTime, partial::PartialTime}; +/// use core::str::FromStr; +/// +/// let time = PlainTime::from_str("12:30:45").unwrap(); +/// +/// // Change only the minute +/// let partial = PartialTime::new().with_minute(Some(15)); +/// let modified = time.with(partial, None).unwrap(); +/// assert_eq!(modified.hour(), 12); // unchanged +/// assert_eq!(modified.minute(), 15); // changed +/// assert_eq!(modified.second(), 45); // unchanged +/// ``` +/// +/// ### Rounding times +/// +/// ```rust +/// use temporal::{PlainTime, options::{Unit, RoundingOptions}}; +/// use core::str::FromStr; +/// +/// let time = PlainTime::from_str("14:23:47.789").unwrap(); +/// +/// let mut options = RoundingOptions::default(); +/// options.smallest_unit = Some(Unit::Minute); +/// // Round to nearest minute +/// let rounded = time.round(options).unwrap(); +/// assert_eq!(rounded.hour(), 14); +/// assert_eq!(rounded.minute(), 24); +/// assert_eq!(rounded.second(), 0); +/// assert_eq!(rounded.millisecond(), 0); +/// ``` +/// +/// ## Reference +/// +/// For more information, see the [MDN documentation][mdn-plaintime]. +/// +/// [mdn-plaintime]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime +#[non_exhaustive] +#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] +pub struct PlainTime { + pub(crate) iso: IsoTime, +} + +// ==== Private API ==== + +impl PlainTime { + #[inline] + #[must_use] + /// Creates a new unvalidated `Time`. + pub(crate) fn new_unchecked(iso: IsoTime) -> Self { + Self { iso } + } + + /// Specification equivalent to `4.5.15 AddTime ( time, timeDuration )` + /// + /// Spec: + pub(crate) fn add_normalized_time_duration(&self, norm: TimeDuration) -> (i64, Self) { + // 1. Set second to second + TimeDurationSeconds(norm). + let second = i64::from(self.second()) + norm.seconds(); + // 2. Set nanosecond to nanosecond + TimeDurationSubseconds(norm). + let nanosecond = i32::from(self.nanosecond()) + norm.subseconds(); + // 3. Return BalanceTime(hour, minute, second, millisecond, microsecond, nanosecond). + let (day, balance_result) = IsoTime::balance( + self.hour().into(), + self.minute().into(), + second, + self.millisecond().into(), + self.microsecond().into(), + nanosecond.into(), + ); + + (day, Self::new_unchecked(balance_result)) + } + + /// Adds a `Duration` to the current `Time`. + /// + /// Spec Equivalent: `AddDurationToOrSubtractDurationFromPlainTime`. + pub(crate) fn add_to_time(&self, duration: &Duration) -> TemporalResult { + let (_, result) = IsoTime::balance( + i64::from(self.hour()).saturating_add(duration.hours()), + i64::from(self.minute()).saturating_add(duration.minutes()), + i64::from(self.second()).saturating_add(duration.seconds()), + i64::from(self.millisecond()).saturating_add(duration.milliseconds()), + i128::from(self.microsecond()).saturating_add(duration.microseconds()), + i128::from(self.nanosecond()).saturating_add(duration.nanoseconds()), + ); + + // NOTE (nekevss): IsoTime::balance should never return an invalid `IsoTime` + + Ok(Self::new_unchecked(result)) + } + + // TODO: Migrate to + /// Performs a desired difference op between two `Time`'s, returning the resulting `Duration`. + pub(crate) fn diff_time( + &self, + op: DifferenceOperation, + other: &PlainTime, + settings: DifferenceSettings, + ) -> TemporalResult { + // 1. If operation is SINCE, let sign be -1. Otherwise, let sign be 1. + // 2. Set other to ? ToTemporalTime(other). + // 3. Let resolvedOptions be ? SnapshotOwnProperties(? GetOptionsObject(options), null). + // 4. Let settings be ? GetDifferenceSettings(operation, resolvedOptions, TIME, « », "nanosecond", "hour"). + let resolved = ResolvedRoundingOptions::from_diff_settings( + settings, + op, + UnitGroup::Time, + Unit::Hour, + Unit::Nanosecond, + )?; + // 4. Let timeDuration be DifferenceTime(temporalTime.[[Time]], other.[[Time]]). + let mut normalized_time = self.iso.diff(&other.iso); + // 5. Set timeDuration to ! RoundTimeDuration(timeDuration, settings.[[RoundingIncrement]], settings.[[SmallestUnit]], settings.[[RoundingMode]]). + normalized_time = normalized_time.round(resolved)?; + // 6. Let duration be CombineDateAndTimeDuration(ZeroDateDuration(), timeDuration). + let duration = InternalDurationRecord::combine(DateDuration::default(), normalized_time); + // 7. Let result be ! TemporalDurationFromInternal(duration, settings.[[LargestUnit]]). + let result = Duration::from_internal(duration, resolved.largest_unit)?; + // 8. If operation is since, set result to CreateNegatedTemporalDuration(result). + // 9. Return result. + // 8. Return ! CreateTemporalDuration(0, 0, 0, 0, sign × result.[[Hours]], sign × result.[[Minutes]], sign × result.[[Seconds]], sign × result.[[Milliseconds]], sign × result.[[Microseconds]], sign × result.[[Nanoseconds]]). + match op { + DifferenceOperation::Until => Ok(result), + DifferenceOperation::Since => Ok(result.negated()), + } + } +} + +// ==== Public API ==== + +impl PlainTime { + /// Creates a new `PlainTime`, constraining any field into a valid range. + /// + /// ```rust + /// use temporal::PlainTime; + /// + /// let time = PlainTime::new(23, 59, 59, 999, 999, 999).unwrap(); + /// + /// let constrained_time = PlainTime::new(24, 59, 59, 999, 999, 999).unwrap(); + /// assert_eq!(time, constrained_time); + /// ``` + pub fn new( + hour: u8, + minute: u8, + second: u8, + millisecond: u16, + microsecond: u16, + nanosecond: u16, + ) -> TemporalResult { + Self::new_with_overflow( + hour, + minute, + second, + millisecond, + microsecond, + nanosecond, + Overflow::Constrain, + ) + } + + /// Creates a new `PlainTime`, rejecting any field that is not in a valid range. + /// + /// ```rust + /// use temporal::PlainTime; + /// + /// let time = PlainTime::try_new(23, 59, 59, 999, 999, 999).unwrap(); + /// + /// let invalid_time = PlainTime::try_new(24, 59, 59, 999, 999, 999); + /// assert!(invalid_time.is_err()); + /// ``` + pub fn try_new( + hour: u8, + minute: u8, + second: u8, + millisecond: u16, + microsecond: u16, + nanosecond: u16, + ) -> TemporalResult { + Self::new_with_overflow( + hour, + minute, + second, + millisecond, + microsecond, + nanosecond, + Overflow::Reject, + ) + } + + /// Creates a new `PlainTime` with the provided [`Overflow`] option. + #[inline] + pub fn new_with_overflow( + hour: u8, + minute: u8, + second: u8, + millisecond: u16, + microsecond: u16, + nanosecond: u16, + overflow: Overflow, + ) -> TemporalResult { + let time = IsoTime::new( + hour, + minute, + second, + millisecond, + microsecond, + nanosecond, + overflow, + )?; + Ok(Self::new_unchecked(time)) + } + + /// Creates a new `PlainTime` from a `PartialTime`. + /// + /// ```rust + /// use temporal::{partial::PartialTime, PlainTime}; + /// + /// let partial_time = PartialTime { + /// hour: Some(22), + /// ..Default::default() + /// }; + /// + /// let time = PlainTime::from_partial(partial_time, None).unwrap(); + /// + /// assert_eq!(time.hour(), 22); + /// assert_eq!(time.minute(), 0); + /// assert_eq!(time.second(), 0); + /// assert_eq!(time.millisecond(), 0); + /// assert_eq!(time.microsecond(), 0); + /// assert_eq!(time.nanosecond(), 0); + /// + /// ``` + pub fn from_partial(partial: PartialTime, overflow: Option) -> TemporalResult { + // NOTE: 4.5.12 ToTemporalTimeRecord requires one field to be set. + if partial.is_empty() { + return Err(TemporalError::r#type().with_message("PartialTime cannot be empty.")); + } + + let overflow = overflow.unwrap_or_default(); + let iso = IsoTime::default().with(partial, overflow)?; + Ok(Self::new_unchecked(iso)) + } + + // Converts a UTF-8 encoded string into a `PlainTime`. + pub fn from_utf8(s: &[u8]) -> TemporalResult { + let result = parse_time(s)?; + let iso = IsoTime::from_time_record(result)?; + Ok(Self::new_unchecked(iso)) + } + + /// Creates a new `PlainTime` using the current `PlainTime` fields as a fallback. + /// + /// ```rust + /// use temporal::{partial::PartialTime, PlainTime}; + /// + /// let partial_time = PartialTime { + /// hour: Some(22), + /// ..Default::default() + /// }; + /// + /// let initial = PlainTime::try_new(15, 30, 12, 123, 456, 789).unwrap(); + /// + /// let time = initial.with(partial_time, None).unwrap(); + /// + /// assert_eq!(time.hour(), 22); + /// assert_eq!(time.minute(), 30); + /// assert_eq!(time.second(), 12); + /// assert_eq!(time.millisecond(), 123); + /// assert_eq!(time.microsecond(), 456); + /// assert_eq!(time.nanosecond(), 789); + /// + /// ``` + pub fn with(&self, partial: PartialTime, overflow: Option) -> TemporalResult { + // NOTE: 4.5.12 ToTemporalTimeRecord requires one field to be set. + if partial.is_empty() { + return Err(TemporalError::r#type().with_enum(ErrorMessage::EmptyFieldsIsInvalid)); + } + + let iso = self + .iso + .with(partial, overflow.unwrap_or(Overflow::Constrain))?; + Ok(Self::new_unchecked(iso)) + } + + /// Returns the internal `hour` field. + #[inline] + #[must_use] + pub const fn hour(&self) -> u8 { + self.iso.hour + } + + /// Returns the internal `minute` field. + #[inline] + #[must_use] + pub const fn minute(&self) -> u8 { + self.iso.minute + } + + /// Returns the internal `second` field. + #[inline] + #[must_use] + pub const fn second(&self) -> u8 { + self.iso.second + } + + /// Returns the internal `millisecond` field. + #[inline] + #[must_use] + pub const fn millisecond(&self) -> u16 { + self.iso.millisecond + } + + /// Returns the internal `microsecond` field. + #[inline] + #[must_use] + pub const fn microsecond(&self) -> u16 { + self.iso.microsecond + } + + /// Returns the internal `nanosecond` field. + #[inline] + #[must_use] + pub const fn nanosecond(&self) -> u16 { + self.iso.nanosecond + } + + /// Add a `Duration` to the current `Time`. + pub fn add(&self, duration: &Duration) -> TemporalResult { + self.add_to_time(duration) + } + + /// Subtract a `Duration` to the current `Time`. + pub fn subtract(&self, duration: &Duration) -> TemporalResult { + self.add_to_time(&duration.negated()) + } + + /// Returns the `Duration` until the provided `Time` from the current `Time`. + /// + /// NOTE: `until` assumes the provided other time will occur in the future relative to the current. + #[inline] + pub fn until(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { + self.diff_time(DifferenceOperation::Until, other, settings) + } + + /// Returns the `Duration` since the provided `Time` from the current `Time`. + /// + /// NOTE: `since` assumes the provided other time is in the past relative to the current. + #[inline] + pub fn since(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { + self.diff_time(DifferenceOperation::Since, other, settings) + } + + // TODO (nekevss): optimize and test rounding_increment type (f64 vs. u64). + /// Rounds the current `Time` according to provided options. + pub fn round(&self, options: RoundingOptions) -> TemporalResult { + let resolved = ResolvedRoundingOptions::from_time_options(options)?; + let (_, result) = self.iso.round(resolved)?; + + Ok(Self::new_unchecked(result)) + } + + pub fn to_ixdtf_string(&self, options: ToStringRoundingOptions) -> TemporalResult { + self.to_ixdtf_writeable(options) + .map(|x| x.write_to_string().into()) + } + + #[inline] + pub fn to_ixdtf_writeable( + &self, + options: ToStringRoundingOptions, + ) -> TemporalResult { + let resolved = options.resolve()?; + let (_, result) = self + .iso + .round(ResolvedRoundingOptions::from_to_string_options(&resolved))?; + let builder = IxdtfStringBuilder::default().with_time(result, resolved.precision); + Ok(builder) + } + + /// Gets the EpochNanoseconds represented by this PlainTime + /// (using the Unix epoch, and UTC timezone) + /// + // Useful for implementing HandleDateTimeTemporalTime + pub fn epoch_ns_for_utc(&self) -> EpochNanoseconds { + // 1. Let isoDate be CreateISODateRecord(1970, 1, 1). + // 2. Let isoDateTime be CombineISODateAndTimeRecord(isoDate, temporalTime.[[Time]]). + let iso = IsoDateTime::new(IsoDate::UNIX_EPOCH, self.iso); + debug_assert!(iso.is_ok()); + // 3. Let epochNs be ? GetUTCEpochNanoseconds(isoDateTime). + iso.unwrap_or_default().as_nanoseconds() + } +} + +impl From for PlainTime { + fn from(pdt: PlainDateTime) -> Self { + pdt.to_plain_time() + } +} + +impl FromStr for PlainTime { + type Err = TemporalError; + + fn from_str(s: &str) -> Result { + Self::from_utf8(s.as_bytes()) + } +} + +// ==== Test land ==== + +#[cfg(test)] +mod tests { + use core::str::FromStr; + + use crate::{ + builtins::core::Duration, + iso::IsoTime, + options::{DifferenceSettings, Overflow, RoundingIncrement, RoundingOptions, Unit}, + }; + use num_traits::FromPrimitive; + + use super::PlainTime; + + fn assert_time(result: PlainTime, values: (u8, u8, u8, u16, u16, u16)) { + assert_eq!( + result, + PlainTime { + iso: IsoTime { + hour: values.0, + minute: values.1, + second: values.2, + millisecond: values.3, + microsecond: values.4, + nanosecond: values.5, + } + } + ); + } + + fn assert_duration( + result: Duration, + values: (i64, i64, i64, i64, i64, i64, i64, i64, i128, i128), + ) { + assert_eq!( + ( + result.years(), + result.months(), + result.weeks(), + result.days(), + result.hours(), + result.minutes(), + result.seconds(), + result.milliseconds(), + result.microseconds(), + result.nanoseconds() + ), + values + ) + } + + fn options(unit: Unit, increment: f64) -> RoundingOptions { + RoundingOptions { + smallest_unit: Some(unit), + increment: RoundingIncrement::try_from(increment).ok(), + ..Default::default() + } + } + + #[test] + fn from_str_cast_sanity_test() { + let max = u32::MAX; + let (millisecond, rem) = (max / 1_000_000, max % 1_000_000); + let (microsecond, nanosecond) = (rem / 1_000, rem % 1_000); + + assert!(i32::from_u32(millisecond).is_some()); + assert!(i32::from_u32(microsecond).is_some()); + assert!(i32::from_u32(nanosecond).is_some()); + } + + #[test] + fn basic_parse_time() { + let result = "T12:05:24-05:00[u-ca=iso8601]".parse::(); + assert_time(result.unwrap(), (12, 5, 24, 0, 0, 0)); + + let result = "T12:05:24.123456789-05:00[u-ca=iso8601]".parse::(); + assert_time(result.unwrap(), (12, 5, 24, 123, 456, 789)); + + let result = "2024-05-04 12:05:24.123456789-05:00[u-ca=iso8601]".parse::(); + assert_time(result.unwrap(), (12, 5, 24, 123, 456, 789)); + + let result = "2024-05-04 12:05:24.123456789-05:00[u-ca=iso8601]".parse::(); + assert_time(result.unwrap(), (12, 5, 24, 123, 456, 789)); + } + + #[test] + fn time_round_millisecond() { + let base = PlainTime::new_unchecked(IsoTime::new_unchecked(3, 34, 56, 987, 654, 321)); + + let result_1 = base.round(options(Unit::Millisecond, 1.0)).unwrap(); + assert_time(result_1, (3, 34, 56, 988, 0, 0)); + + let result_2 = base.round(options(Unit::Millisecond, 2.0)).unwrap(); + assert_time(result_2, (3, 34, 56, 988, 0, 0)); + + let result_3 = base.round(options(Unit::Millisecond, 4.0)).unwrap(); + assert_time(result_3, (3, 34, 56, 988, 0, 0)); + + let result_4 = base.round(options(Unit::Millisecond, 5.0)).unwrap(); + assert_time(result_4, (3, 34, 56, 990, 0, 0)); + } + + #[test] + fn time_round_microsecond() { + let base = PlainTime::new_unchecked(IsoTime::new_unchecked(3, 34, 56, 987, 654, 321)); + + let result_1 = base.round(options(Unit::Microsecond, 1.0)).unwrap(); + assert_time(result_1, (3, 34, 56, 987, 654, 0)); + + let result_2 = base.round(options(Unit::Microsecond, 2.0)).unwrap(); + assert_time(result_2, (3, 34, 56, 987, 654, 0)); + + let result_3 = base.round(options(Unit::Microsecond, 4.0)).unwrap(); + assert_time(result_3, (3, 34, 56, 987, 656, 0)); + + let result_4 = base.round(options(Unit::Microsecond, 5.0)).unwrap(); + assert_time(result_4, (3, 34, 56, 987, 655, 0)); + } + + #[test] + fn time_round_nanoseconds() { + let base = PlainTime::new_unchecked(IsoTime::new_unchecked(3, 34, 56, 987, 654, 321)); + + let result_1 = base.round(options(Unit::Nanosecond, 1.0)).unwrap(); + assert_time(result_1, (3, 34, 56, 987, 654, 321)); + + let result_2 = base.round(options(Unit::Nanosecond, 2.0)).unwrap(); + assert_time(result_2, (3, 34, 56, 987, 654, 322)); + + let result_3 = base.round(options(Unit::Nanosecond, 4.0)).unwrap(); + assert_time(result_3, (3, 34, 56, 987, 654, 320)); + + let result_4 = base.round(options(Unit::Nanosecond, 5.0)).unwrap(); + assert_time(result_4, (3, 34, 56, 987, 654, 320)); + } + + #[test] + fn add_duration_basic() { + let base = PlainTime::new_unchecked(IsoTime::new_unchecked(15, 23, 30, 123, 456, 789)); + let result = base.add(&"PT16H".parse::().unwrap()).unwrap(); + + assert_time(result, (7, 23, 30, 123, 456, 789)); + } + + #[test] + fn since_basic() { + let one = + PlainTime::new_with_overflow(15, 23, 30, 123, 456, 789, Overflow::Constrain).unwrap(); + let two = + PlainTime::new_with_overflow(14, 23, 30, 123, 456, 789, Overflow::Constrain).unwrap(); + let three = + PlainTime::new_with_overflow(13, 30, 30, 123, 456, 789, Overflow::Constrain).unwrap(); + + let result = one.since(&two, DifferenceSettings::default()).unwrap(); + assert_eq!(result.hours(), 1); + + let result = two.since(&one, DifferenceSettings::default()).unwrap(); + assert_eq!(result.hours(), -1); + + let result = one.since(&three, DifferenceSettings::default()).unwrap(); + assert_eq!(result.hours(), 1); + assert_eq!(result.minutes(), 53); + + let result = three.since(&one, DifferenceSettings::default()).unwrap(); + assert_eq!(result.hours(), -1); + assert_eq!(result.minutes(), -53); + } + + #[test] + fn until_basic() { + let one = + PlainTime::new_with_overflow(15, 23, 30, 123, 456, 789, Overflow::Constrain).unwrap(); + let two = + PlainTime::new_with_overflow(16, 23, 30, 123, 456, 789, Overflow::Constrain).unwrap(); + let three = + PlainTime::new_with_overflow(17, 0, 30, 123, 456, 789, Overflow::Constrain).unwrap(); + + let result = one.until(&two, DifferenceSettings::default()).unwrap(); + assert_eq!(result.hours(), 1); + + let result = two.until(&one, DifferenceSettings::default()).unwrap(); + assert_eq!(result.hours(), -1); + + let result = one.until(&three, DifferenceSettings::default()).unwrap(); + assert_eq!(result.hours(), 1); + assert_eq!(result.minutes(), 37); + + let result = three.until(&one, DifferenceSettings::default()).unwrap(); + assert_eq!(result.hours(), -1); + assert_eq!(result.minutes(), -37); + } + + #[test] + fn since_rounding() { + let earlier = PlainTime::new(3, 12, 34, 123, 456, 789).unwrap(); + let later = PlainTime::new(13, 47, 57, 988, 655, 322).unwrap(); + + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Second), + increment: Some(RoundingIncrement::try_new(1).unwrap()), + ..Default::default() + }; + assert_duration( + later.since(&earlier, settings).unwrap(), + (0, 0, 0, 0, 10, 35, 23, 0, 0, 0), + ); + + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Second), + increment: Some(RoundingIncrement::try_new(4).unwrap()), + ..Default::default() + }; + assert_duration( + later.since(&earlier, settings).unwrap(), + (0, 0, 0, 0, 10, 35, 20, 0, 0, 0), + ); + } + + #[test] + // test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-nanoseconds.js + fn rounding_increment_nanos() { + let time = + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 321, Overflow::Constrain).unwrap(); + + assert_eq!( + time.round(options(Unit::Nanosecond, 1.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 321, Overflow::Constrain).unwrap() + ); + assert_eq!( + time.round(options(Unit::Nanosecond, 2.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 322, Overflow::Constrain).unwrap() + ); + assert_eq!( + time.round(options(Unit::Nanosecond, 4.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 320, Overflow::Constrain).unwrap() + ); + assert_eq!( + time.round(options(Unit::Nanosecond, 5.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 320, Overflow::Constrain).unwrap() + ); + assert_eq!( + time.round(options(Unit::Nanosecond, 8.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 320, Overflow::Constrain).unwrap() + ); + assert_eq!( + time.round(options(Unit::Nanosecond, 10.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 320, Overflow::Constrain).unwrap() + ); + assert_eq!( + time.round(options(Unit::Nanosecond, 20.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 320, Overflow::Constrain).unwrap() + ); + assert_eq!( + time.round(options(Unit::Nanosecond, 25.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 325, Overflow::Constrain).unwrap() + ); + assert_eq!( + time.round(options(Unit::Nanosecond, 40.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 320, Overflow::Constrain).unwrap() + ); + assert_eq!( + time.round(options(Unit::Nanosecond, 50.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 300, Overflow::Constrain).unwrap() + ); + assert_eq!( + time.round(options(Unit::Nanosecond, 100.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 300, Overflow::Constrain).unwrap() + ); + assert_eq!( + time.round(options(Unit::Nanosecond, 125.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 375, Overflow::Constrain).unwrap() + ); + assert_eq!( + time.round(options(Unit::Nanosecond, 200.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 400, Overflow::Constrain).unwrap() + ); + assert_eq!( + time.round(options(Unit::Nanosecond, 250.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 250, Overflow::Constrain).unwrap() + ); + assert_eq!( + time.round(options(Unit::Nanosecond, 500.0)).unwrap(), + PlainTime::new_with_overflow(3, 34, 56, 987, 654, 500, Overflow::Constrain).unwrap() + ); + } + + #[test] + fn invalid_time_from_strs() { + // UTC designator case + let invalid_cases = [ + "2019-10-01T09:00:00Z", + "2019-10-01T09:00:00Z[UTC]", + "09:00:00Z[UTC]", + "09:00:00Z", + // built-ins/Temporal/PlainTime/from/argument-string-too-many-decimals + "1970-01-01T00:00:00.1234567891", + "1970-01-01T00:00:00.1234567890", + "1970-01-01T00+00:00:00.1234567891", + "1970-01-01T00+00:00:00.1234567890", + "00:00:00.1234567891", + "00:00:00.1234567890", + "00+00:00:00.1234567891", + "00+00:00:00.1234567890", + ]; + for invalid_str in invalid_cases { + let err = PlainTime::from_str(invalid_str); + assert!(err.is_err()); + } + } +} diff --git a/crates/temporal/src/builtins/core/plain_year_month.rs b/crates/temporal/src/builtins/core/plain_year_month.rs new file mode 100644 index 000000000..c2e3ec63b --- /dev/null +++ b/crates/temporal/src/builtins/core/plain_year_month.rs @@ -0,0 +1,1183 @@ +//! This module implements `YearMonth` and any directly related algorithms. + +use alloc::string::String; +use core::{cmp::Ordering, str::FromStr}; + +use tinystr::TinyAsciiStr; + +use crate::{ + builtins::calendar::{CalendarFields, YearMonthCalendarFields}, + error::ErrorMessage, + iso::{year_month_within_limits, IsoDate, IsoDateTime, IsoTime}, + options::{ + DifferenceOperation, DifferenceSettings, Disambiguation, DisplayCalendar, Overflow, + ResolvedRoundingOptions, RoundingIncrement, Unit, UnitGroup, + }, + parsed_intermediates::ParsedDate, + parsers::{FormattableCalendar, FormattableDate, FormattableYearMonth}, + provider::{NeverProvider, TimeZoneProvider}, + unix_time::EpochNanoseconds, + Calendar, MonthCode, TemporalError, TemporalResult, TimeZone, +}; + +use super::{duration::normalized::InternalDurationRecord, Duration, PlainDate, PlainDateTime}; +use writeable::Writeable; + +/// A partial PlainYearMonth record +#[derive(Debug, Default, Clone, PartialEq)] +pub struct PartialYearMonth { + pub calendar_fields: YearMonthCalendarFields, + /// The calendar field + pub calendar: Calendar, +} + +/// The native Rust implementation of `Temporal.PlainYearMonth`. +/// +/// Represents a specific month within a specific year, such as "January 2024" +/// or "December 2023", without a specific day component. +/// +/// Useful for representing time periods at month granularity, such as billing +/// periods, reporting intervals, or any scenario where you need to work with +/// entire months rather than specific dates. +/// +/// ## Examples +/// +/// ### Creating a PlainYearMonth +/// +/// ```rust +/// use temporal::{PlainYearMonth, Calendar}; +/// +/// // Create with ISO 8601 calendar +/// let ym = PlainYearMonth::try_new_iso(2024, 3, None).unwrap(); +/// assert_eq!(ym.year(), 2024); +/// assert_eq!(ym.month(), 3); +/// assert_eq!(ym.calendar().identifier(), "iso8601"); +/// +/// // Create with explicit calendar and reference day +/// let ym = PlainYearMonth::try_new(2024, 3, Some(15), Calendar::default()).unwrap(); +/// assert_eq!(ym.year(), 2024); +/// assert_eq!(ym.month(), 3); +/// // Reference day helps with calendar calculations but doesn't affect the YearMonth itself +/// ``` +/// +/// ### Parsing ISO 8601 year-month strings +/// +/// ```rust +/// use temporal::PlainYearMonth; +/// use core::str::FromStr; +/// +/// // Parse year-month strings +/// let ym = PlainYearMonth::from_str("2024-03").unwrap(); +/// assert_eq!(ym.year(), 2024); +/// assert_eq!(ym.month(), 3); +/// +/// // Also accepts full date strings (day is ignored for YearMonth semantics) +/// let ym2 = PlainYearMonth::from_str("2024-03-15").unwrap(); +/// assert_eq!(ym2.year(), 2024); +/// assert_eq!(ym2.month(), 3); +/// assert_eq!(ym, ym2); // equivalent +/// ``` +/// +/// ### YearMonth arithmetic +/// +/// ```rust +/// use temporal::{PlainYearMonth, options::DifferenceSettings}; +/// use core::str::FromStr; +/// +/// let ym1 = PlainYearMonth::from_str("2024-01").unwrap(); +/// let ym2 = PlainYearMonth::from_str("2024-04").unwrap(); +/// +/// // Calculate difference between year-months +/// let duration = ym1.until(&ym2, DifferenceSettings::default()).unwrap(); +/// assert_eq!(duration.months(), 3); // January to April = 3 months +/// ``` +/// +/// ### Working with partial fields +/// +/// ```rust +/// use temporal::{PlainYearMonth, fields::YearMonthCalendarFields}; +/// use core::str::FromStr; +/// +/// let ym = PlainYearMonth::from_str("2024-01").unwrap(); +/// +/// // Change only the year +/// let fields = YearMonthCalendarFields::new().with_year(2025); +/// let modified = ym.with(fields, None).unwrap(); +/// assert_eq!(modified.year(), 2025); +/// assert_eq!(modified.month(), 1); // unchanged +/// +/// // Change only the month +/// let fields = YearMonthCalendarFields::new().with_month(6); +/// let modified = ym.with(fields, None).unwrap(); +/// assert_eq!(modified.year(), 2024); // unchanged +/// assert_eq!(modified.month(), 6); +/// ``` +/// +/// ### Converting to PlainDate +/// +/// ```rust +/// use temporal::{PlainYearMonth, fields::CalendarFields}; +/// use core::str::FromStr; +/// +/// let ym = PlainYearMonth::from_str("2024-03").unwrap(); +/// +/// // Convert to a specific date by providing a day +/// let day_fields = CalendarFields::new().with_day(15); +/// let date = ym.to_plain_date(Some(day_fields)).unwrap(); +/// assert_eq!(date.year(), 2024); +/// assert_eq!(date.month(), 3); +/// assert_eq!(date.day(), 15); +/// ``` +/// +/// ### Calendar properties +/// +/// ```rust +/// use temporal::PlainYearMonth; +/// use core::str::FromStr; +/// +/// let ym = PlainYearMonth::from_str("2024-02").unwrap(); // February 2024 +/// +/// // Get calendar-specific properties +/// assert_eq!(ym.days_in_month(), 29); // 2024 is a leap year +/// assert_eq!(ym.days_in_year(), 366); // leap year has 366 days +/// assert_eq!(ym.months_in_year(), 12); // ISO calendar has 12 months +/// assert!(ym.in_leap_year()); // 2024 is indeed a leap year +/// ``` +/// +/// ## Reference +/// +/// For more information, see the [MDN documentation][mdn-plainyearmonth]. +/// +/// [mdn-plainyearmonth]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth +#[non_exhaustive] +#[derive(Debug, Default, Clone, PartialEq, Eq)] +pub struct PlainYearMonth { + pub(crate) iso: IsoDate, + calendar: Calendar, +} + +impl core::fmt::Display for PlainYearMonth { + fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { + f.write_str(&self.to_ixdtf_string(DisplayCalendar::Auto)) + } +} + +impl PlainYearMonth { + /// Creates an unvalidated `YearMonth`. + #[inline] + #[must_use] + pub(crate) fn new_unchecked(iso: IsoDate, calendar: Calendar) -> Self { + Self { iso, calendar } + } + + /// [`9.5.8 AddDurationToYearMonth(operation, yearMonth, temporalDurationLike, options)`][spec] + /// + /// Internal addition method for adding `Duration` to a `PlainYearMonth` + /// + /// [spec]: + /// + // spec(2025-06-23): https://github.com/tc39/proposal-temporal/tree/ed49b0b482981119c9b5e28b0686d877d4a9bae0 + pub(crate) fn add_duration( + &self, + duration: &Duration, + overflow: Overflow, + ) -> TemporalResult { + // NOTE: The following are engine specific: + // SKIP: 1. Let duration be ? ToTemporalDuration(temporalDurationLike). + + // NOTE: The following operation has been moved to the caller. + // MOVE: 2. If operation is subtract, set duration to CreateNegatedTemporalDuration(duration). + + // 3. Let internalDuration be ToInternalDurationRecord(duration). + let internal_duration = duration.to_internal_duration_record(); + + // 4. Let durationToAdd be internalDuration.[[Date]]. + let duration_to_add = internal_duration.date(); + + // NOTE: The following are engine specific: + // SKIP: 5. Let resolvedOptions be ? GetOptionsObject(options). + // SKIP: 6. Let overflow be ? GetTemporalOverflowOption(resolvedOptions). + + // 7. If durationToAdd.[[Weeks]] ≠ 0, or durationToAdd.[[Days]] ≠ 0, or internalDuration.[[Time]] ≠ 0, + // throw a RangeError exception. + + if duration_to_add.weeks != 0 + || duration_to_add.days != 0 + || internal_duration.normalized_time_duration().0 != 0 + { + return Err(TemporalError::range() + .with_message("Can only add years or months to PlainYearMonth.")); + } + + // 8. Let calendar be yearMonth.[[Calendar]]. + let calendar = self.calendar(); + + // 9. Let fields be ISODateToFields(calendar, yearMonth.[[ISODate]], year-month). + let fields = CalendarFields::from(YearMonthCalendarFields::try_from_year_month(self)?); + + // 10. Set fields.[[Day]] to 1. + let fields = fields.with_day(1); + + // 11. Let date be ? CalendarDateFromFields(calendar, fields, constrain). + let date = calendar.date_from_fields(fields, Overflow::Constrain)?; + + // 12. Let addedDate be ? CalendarDateAdd(calendar, date, durationToAdd, overflow). + let added_date = calendar.date_add(&date.iso, &duration_to_add, overflow)?; + + // 13. Let addedDateFields be ISODateToFields(calendar, addedDate, year-month). + let added_date_fields = YearMonthCalendarFields::new() + .with_month_code(added_date.month_code()) + .with_year(added_date.year()); + + // 14. Let isoDate be ? CalendarYearMonthFromFields(calendar, addedDateFields, overflow). + let iso_date = calendar.year_month_from_fields(added_date_fields, overflow)?; + + // 15. Return ! CreateTemporalYearMonth(isoDate, calendar). + Ok(iso_date) + } + + /// The internal difference operation of `PlainYearMonth`. + pub(crate) fn diff( + &self, + op: DifferenceOperation, + other: &Self, + settings: DifferenceSettings, + ) -> TemporalResult { + // 1. Set other to ? ToTemporalYearMonth(other). + // 2. Let calendar be yearMonth.[[Calendar]]. + // 3. If CalendarEquals(calendar, other.[[Calendar]]) is false, throw a RangeError exception. + if self.calendar().identifier() != other.calendar().identifier() { + return Err(TemporalError::range() + .with_message("Calendars for difference operation are not the same.")); + } + + // Check if weeks or days are disallowed in this operation + if matches!(settings.largest_unit, Some(Unit::Week) | Some(Unit::Day)) + || matches!(settings.smallest_unit, Some(Unit::Week) | Some(Unit::Day)) + { + return Err(TemporalError::range() + .with_message("Weeks and days are not allowed in this operation.")); + } + + // 4. Let resolvedOptions be ? GetOptionsObject(options). + // 5. Let settings be ? GetDifferenceSettings(operation, resolvedOptions, date, « week, day », month, year). + let resolved = ResolvedRoundingOptions::from_diff_settings( + settings, + op, + UnitGroup::Date, + Unit::Year, + Unit::Month, + )?; + + // 6. If CompareISODate(yearMonth.[[ISODate]], other.[[ISODate]]) = 0, then + if self.iso == other.iso { + // a. Return ! CreateTemporalDuration(0, 0, 0, 0, 0, 0, 0, 0, 0, 0). + return Ok(Duration::default()); + } + + // 7. Let thisFields be ISODateToFields(calendar, yearMonth.[[ISODate]], year-month). + // 8. Set thisFields.[[Day]] to 1. + // 9. Let thisDate be ? CalendarDateFromFields(calendar, thisFields, constrain). + let this_fields = CalendarFields::from(YearMonthCalendarFields::try_from_year_month(self)?); + let this_fields = this_fields.with_day(1); + let this_date = self + .calendar() + .date_from_fields(this_fields, Overflow::Constrain)?; + // 10. Let otherFields be ISODateToFields(calendar, other.[[ISODate]], year-month). + // 11. Set otherFields.[[Day]] to 1. + // 12. Let otherDate be ? CalendarDateFromFields(calendar, otherFields, constrain). + let other_fields = + CalendarFields::from(YearMonthCalendarFields::try_from_year_month(other)?); + let other_fields = other_fields.with_day(1); + let other_date = self + .calendar() + .date_from_fields(other_fields, Overflow::Constrain)?; + + // 13. Let dateDifference be CalendarDateUntil(calendar, thisDate, otherDate, settings.[[LargestUnit]]). + let result = + self.calendar() + .date_until(&this_date.iso, &other_date.iso, resolved.largest_unit)?; + // 14. Let yearsMonthsDifference be ! AdjustDateDurationRecord(dateDifference, 0, 0). + let result = result.date().adjust(0, Some(0), None)?; + + // 15. Let duration be CombineDateAndTimeDuration(yearsMonthsDifference, 0). + let mut duration = InternalDurationRecord::from_date_duration(result)?; + + // 16. If settings.[[SmallestUnit]] is not month or settings.[[RoundingIncrement]] ≠ 1, then + if resolved.smallest_unit != Unit::Month || resolved.increment != RoundingIncrement::ONE { + // a. Let isoDateTime be CombineISODateAndTimeRecord(thisDate, MidnightTimeRecord()). + let iso_date_time = IsoDateTime::new_unchecked(this_date.iso, IsoTime::default()); + // b. Let isoDateTimeOther be CombineISODateAndTimeRecord(otherDate, MidnightTimeRecord()). + let target_iso_date_time = + IsoDateTime::new_unchecked(other_date.iso, IsoTime::default()); + // c. Let destEpochNs be GetUTCEpochNanoseconds(isoDateTimeOther). + let dest_epoch_ns = target_iso_date_time.as_nanoseconds(); + // d. Set duration to ? RoundRelativeDuration(duration, destEpochNs, isoDateTime, unset, calendar, resolved.[[LargestUnit]], resolved.[[RoundingIncrement]], resolved.[[SmallestUnit]], resolved.[[RoundingMode]]). + duration = duration.round_relative_duration( + iso_date_time.as_nanoseconds(), + dest_epoch_ns.as_i128(), + &PlainDateTime::new_unchecked(iso_date_time, self.calendar.clone()), + Option::<(&TimeZone, &NeverProvider)>::None, + resolved, + )?; + } + + // 17. Let result be ! TemporalDurationFromInternal(duration, day). + let result = Duration::from_internal(duration, Unit::Day)?; + + // 18. If operation is since, set result to CreateNegatedTemporalDuration(result). + // 19. Return result. + match op { + DifferenceOperation::Since => Ok(result.negated()), + DifferenceOperation::Until => Ok(result), + } + } + + /// Returns the iso month value for this `YearMonth`. + #[inline] + #[must_use] + pub(crate) fn iso_month(&self) -> u8 { + self.iso.month + } + + /// Returns the iso year value for this `YearMonth`. + #[inline] + #[must_use] + pub(crate) fn iso_year(&self) -> i32 { + self.iso.year + } +} + +// ==== Public method implementations ==== + +impl PlainYearMonth { + /// Creates a new `PlainYearMonth`, constraining any arguments that are invalid into a valid range. + #[inline] + pub fn new( + year: i32, + month: u8, + reference_day: Option, + calendar: Calendar, + ) -> TemporalResult { + Self::new_with_overflow(year, month, reference_day, calendar, Overflow::Constrain) + } + + /// Creates a new `PlainYearMonth`, rejecting any date that may be invalid. + #[inline] + pub fn try_new( + year: i32, + month: u8, + reference_day: Option, + calendar: Calendar, + ) -> TemporalResult { + Self::new_with_overflow(year, month, reference_day, calendar, Overflow::Reject) + } + + /// Creates a new `PlainYearMonth` with an ISO 8601 calendar, rejecting any date that may be invalid. + #[inline] + pub fn try_new_iso(year: i32, month: u8, reference_day: Option) -> TemporalResult { + Self::try_new(year, month, reference_day, Calendar::ISO) + } + + /// Creates a new `PlainYearMonth` with an ISO 8601 calendar, constraining any arguments + /// that are invalid into a valid range. + #[inline] + pub fn new_iso(year: i32, month: u8, reference_day: Option) -> TemporalResult { + Self::new(year, month, reference_day, Calendar::ISO) + } + + /// Creates a new valid `YearMonth` with provided [`Overflow`] option. + #[inline] + pub fn new_with_overflow( + year: i32, + month: u8, + reference_day: Option, + calendar: Calendar, + overflow: Overflow, + ) -> TemporalResult { + let day = reference_day.unwrap_or(1); + let iso = IsoDate::regulate(year, month, day, overflow)?; + if !year_month_within_limits(iso.year, iso.month) { + return Err(TemporalError::range().with_message("Exceeded valid range.")); + } + Ok(Self::new_unchecked(iso, calendar)) + } + + /// Create a `PlainYearMonth` from a `PartialYearMonth` + pub fn from_partial( + partial: PartialYearMonth, + overflow: Option, + ) -> TemporalResult { + partial + .calendar + .year_month_from_fields(partial.calendar_fields, overflow.unwrap_or_default()) + } + + // Converts a UTF-8 encoded string into a `PlainYearMonth`. + pub fn from_utf8(s: &[u8]) -> TemporalResult { + let parsed = ParsedDate::year_month_from_utf8(s)?; + Self::from_parsed(parsed) + } + + /// Converts a ParsedDate into a `PlainYearMonth`. + /// + /// Be sure to parse this using [`ParsedDate::year_month_from_utf8()`]~ + pub fn from_parsed(parsed: ParsedDate) -> TemporalResult { + let date = parsed.record; + // The below steps are from `ToTemporalYearMonth` + // 10. Let isoDate be CreateISODateRecord(result.[[Year]], result.[[Month]], result.[[Day]]). + let iso = IsoDate::new_unchecked(date.year, date.month, date.day); + + // 11. If ISOYearMonthWithinLimits(isoDate) is false, throw a RangeError exception. + if !year_month_within_limits(iso.year, iso.month) { + return Err(TemporalError::range().with_message("Exceeded valid range.")); + } + debug_assert!(iso.check_validity().is_ok(), "Found invalid ParsedDate"); + + let intermediate = Self::new_unchecked(iso, Calendar::new(parsed.calendar)); + // 12. Set result to ISODateToFields(calendar, isoDate, year-month). + let fields = YearMonthCalendarFields::try_from_year_month(&intermediate)?; + // 13. NOTE: The following operation is called with constrain regardless of the + // value of overflow, in order for the calendar to store a canonical value in the + // [[Day]] field of the [[ISODate]] internal slot of the result. + // 14. Set isoDate to ? CalendarYearMonthFromFields(calendar, result, constrain). + // 15. Return ! CreateTemporalYearMonth(isoDate, calendar). + intermediate + .calendar() + .year_month_from_fields(fields, Overflow::Constrain) + } + + /// Returns the calendar era of the current `PlainYearMonth` + pub fn era(&self) -> Option> { + self.calendar().era(&self.iso) + } + + /// Returns the calendar era year of the current `PlainYearMonth` + pub fn era_year(&self) -> Option { + self.calendar().era_year(&self.iso) + } + + /// Returns the calendar year of the current `PlainYearMonth` + pub fn year(&self) -> i32 { + self.calendar().year(&self.iso) + } + + /// Returns the calendar month of the current `PlainYearMonth` + pub fn month(&self) -> u8 { + self.calendar().month(&self.iso) + } + + /// Returns the calendar reference day of the current `PlainYearMonth` + pub fn reference_day(&self) -> u8 { + self.calendar().day(&self.iso) + } + + /// Returns the calendar month code of the current `PlainYearMonth` + pub fn month_code(&self) -> MonthCode { + self.calendar().month_code(&self.iso) + } + + /// Returns the days in the calendar year of the current `PlainYearMonth`. + pub fn days_in_year(&self) -> u16 { + self.calendar().days_in_year(&self.iso) + } + + /// Returns the days in the calendar month of the current `PlainYearMonth`. + pub fn days_in_month(&self) -> u16 { + self.calendar().days_in_month(&self.iso) + } + + /// Returns the months in the calendar year of the current `PlainYearMonth`. + pub fn months_in_year(&self) -> u16 { + self.calendar().months_in_year(&self.iso) + } + + #[inline] + #[must_use] + /// Returns a boolean representing whether the current `PlainYearMonth` is in a leap year. + pub fn in_leap_year(&self) -> bool { + self.calendar().in_leap_year(&self.iso) + } +} + +impl PlainYearMonth { + /// Returns the Calendar value. + #[inline] + #[must_use] + pub fn calendar(&self) -> &Calendar { + &self.calendar + } + + /// Returns the string identifier for the current calendar used. + #[inline] + #[must_use] + pub fn calendar_id(&self) -> &'static str { + self.calendar.identifier() + } + + /// Creates a `PlainYearMonth` using the fields provided from a [`PartialYearMonth`] + pub fn with( + &self, + fields: YearMonthCalendarFields, + overflow: Option, + ) -> TemporalResult { + // 1. Let yearMonth be the this value. + // 2. Perform ? RequireInternalSlot(yearMonth, [[InitializedTemporalYearMonth]]). + // 3. If ? IsPartialTemporalObject(temporalYearMonthLike) is false, throw a TypeError exception. + // 4. Let calendar be yearMonth.[[Calendar]]. + // 5. Let fields be ISODateToFields(calendar, yearMonth.[[ISODate]], year-month). + // 6. Let partialYearMonth be ? PrepareCalendarFields(calendar, temporalYearMonthLike, « year, month, month-code », « », partial). + if fields.is_empty() { + return Err(TemporalError::r#type().with_enum(ErrorMessage::EmptyFieldsIsInvalid)); + } + // 7. Set fields to CalendarMergeFields(calendar, fields, partialYearMonth). + // 8. Let resolvedOptions be ? GetOptionsObject(options). + // 9. Let overflow be ? GetTemporalOverflowOption(resolvedOptions). + // 10. Let isoDate be ? CalendarYearMonthFromFields(calendar, fields, overflow). + // 11. Return ! CreateTemporalYearMonth(isoDate, calendar). + let overflow = overflow.unwrap_or(Overflow::Constrain); + self.calendar.year_month_from_fields( + fields.with_fallback_year_month(self, self.calendar.kind())?, + overflow, + ) + } + + /// Compares one `PlainYearMonth` to another `PlainYearMonth` using their + /// `IsoDate` representation. + /// + /// # Note on Ordering. + /// + /// `temporal` does not implement `PartialOrd`/`Ord` as `PlainYearMonth` does + /// not fulfill all the conditions required to implement the traits. However, + /// it is possible to compare `PlainDate`'s as their `IsoDate` representation. + #[inline] + #[must_use] + pub fn compare_iso(&self, other: &Self) -> Ordering { + self.iso.cmp(&other.iso) + } + + /// Adds a [`Duration`] from the current `PlainYearMonth`. + #[inline] + pub fn add(&self, duration: &Duration, overflow: Overflow) -> TemporalResult { + self.add_duration(duration, overflow) + } + + /// Subtracts a [`Duration`] from the current `PlainYearMonth`. + #[inline] + pub fn subtract(&self, duration: &Duration, overflow: Overflow) -> TemporalResult { + self.add_duration(&duration.negated(), overflow) + } + + /// Returns a `Duration` representing the period of time from this `PlainYearMonth` until the other `PlainYearMonth`. + #[inline] + pub fn until(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { + self.diff(DifferenceOperation::Until, other, settings) + } + + /// Returns a `Duration` representing the period of time from this `PlainYearMonth` since the other `PlainYearMonth`. + #[inline] + pub fn since(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { + self.diff(DifferenceOperation::Since, other, settings) + } + + pub fn to_plain_date(&self, day: Option) -> TemporalResult { + let day_value = match &day { + Some(fields) => fields.day.ok_or_else(|| { + TemporalError::r#type().with_message("CalendarFields must contain a day field") + })?, + None => return Err(TemporalError::r#type().with_message("Day must be provided")), + }; + + let fields = CalendarFields::new() + .with_year(self.year()) + .with_month_code(self.month_code()) + .with_day(day_value); + + // 8. Let isoDate be ? CalendarDateFromFields(calendar, mergedFields, constrain). + self.calendar.date_from_fields(fields, Overflow::Constrain) + } + + /// Gets the epochMilliseconds represented by this YearMonth in the given timezone + /// (using the reference day, and noon time) + pub fn epoch_ns_for_with_provider( + &self, + time_zone: TimeZone, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + // 2. Let isoDateTime be CombineISODateAndTimeRecord(temporalYearMonth.[[ISODate]], NoonTimeRecord()). + let iso = IsoDateTime::new(self.iso, IsoTime::noon())?; + // 3. Let epochNs be ? GetEpochNanosecondsFor(dateTimeFormat.[[TimeZone]], isoDateTime, compatible). + Ok(time_zone + .get_epoch_nanoseconds_for(iso, Disambiguation::Compatible, provider)? + .ns) + } + + /// Gets the EpochNanoseconds represented by this YearMonth + /// (using the reference day, noon time, and UTC timezone) + /// + // Useful for implementing HandleDateTimeTemporalYearMonth + pub fn epoch_ns_for_utc(&self) -> EpochNanoseconds { + // 2. Let isoDateTime be CombineISODateAndTimeRecord(temporalYearMonth.[[ISODate]], NoonTimeRecord()). + // new_unchecked: PYM is supposed to support year-months outside of the ISO range as well as long + // as the year is in range + let iso = IsoDateTime::new_unchecked(self.iso, IsoTime::noon()); + // 3. Let epochNs be ? GetUTCEpochNanoseconds(isoDateTime). + iso.as_nanoseconds() + } + + /// Returns a RFC9557 IXDTF string for the current `PlainYearMonth` + #[inline] + pub fn to_ixdtf_string(&self, display_calendar: DisplayCalendar) -> String { + self.to_ixdtf_writeable(display_calendar) + .write_to_string() + .into() + } + + /// Returns a RFC9557 IXDTF string for the current `PlainYearMonth` as a Writeable + #[inline] + pub fn to_ixdtf_writeable(&self, display_calendar: DisplayCalendar) -> impl Writeable + '_ { + let ixdtf = FormattableYearMonth { + date: FormattableDate(self.iso_year(), self.iso_month(), self.iso.day), + calendar: FormattableCalendar { + show: display_calendar, + calendar: self.calendar().identifier(), + }, + }; + ixdtf + } +} + +impl FromStr for PlainYearMonth { + type Err = TemporalError; + + fn from_str(s: &str) -> Result { + Self::from_utf8(s.as_bytes()) + } +} + +#[cfg(test)] +mod tests { + use core::str::FromStr; + + use super::PlainYearMonth; + + use tinystr::tinystr; + + use super::*; + + #[test] + fn plain_year_month_since_until_diff_tests() { + // Equal year-months + { + let earlier = PlainYearMonth::from_str("2024-03").unwrap(); + let later = PlainYearMonth::from_str("2024-03").unwrap(); + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Month), + ..Default::default() + }; + + let until = earlier.until(&later, settings).unwrap(); + let since = earlier.since(&later, settings).unwrap(); + + assert_eq!(until.days(), 0); + assert_eq!(until.months(), 0); + assert_eq!(until.years(), 0); + + assert_eq!(since.days(), 0); + assert_eq!(since.months(), 0); + assert_eq!(since.years(), 0); + } + + // One month apart + { + let earlier = PlainYearMonth::from_str("2023-01").unwrap(); + let later = PlainYearMonth::from_str("2023-02").unwrap(); + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Month), + ..Default::default() + }; + + let until = earlier.until(&later, settings).unwrap(); + let since = earlier.since(&later, settings).unwrap(); + + assert_eq!(until.months(), 1); + assert_eq!(until.years(), 0); + + assert_eq!(since.months(), -1); + assert_eq!(since.years(), 0); + } + + // Crossing year boundary + { + let earlier = PlainYearMonth::from_str("2022-11").unwrap(); + let later = PlainYearMonth::from_str("2023-02").unwrap(); + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Month), + ..Default::default() + }; + + let until = earlier.until(&later, settings).unwrap(); + let since = earlier.since(&later, settings).unwrap(); + + assert_eq!(until.months(), 3); + assert_eq!(until.years(), 0); + + assert_eq!(since.months(), -3); + assert_eq!(since.years(), 0); + } + + // One year and one month + { + let earlier = PlainYearMonth::from_str("2002-05").unwrap(); + let later = PlainYearMonth::from_str("2003-06").unwrap(); + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Month), + ..Default::default() + }; + + let until = earlier.until(&later, settings).unwrap(); + let since = earlier.since(&later, settings).unwrap(); + + assert_eq!(until.years(), 1); + assert_eq!(until.months(), 1); + assert_eq!(until.days(), 0); + + assert_eq!(since.years(), -1); + assert_eq!(since.months(), -1); + assert_eq!(since.days(), 0); + } + + // One year apart with unit = Year + { + let earlier = PlainYearMonth::from_str("2022-06").unwrap(); + let later = PlainYearMonth::from_str("2023-06").unwrap(); + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Year), + ..Default::default() + }; + + let until = earlier.until(&later, settings).unwrap(); + let since = earlier.since(&later, settings).unwrap(); + + assert_eq!(until.years(), 1); + assert_eq!(until.months(), 0); + + assert_eq!(since.years(), -1); + assert_eq!(since.months(), 0); + } + + // Large year gap + { + let earlier = PlainYearMonth::from_str("1000-01").unwrap(); + let later = PlainYearMonth::from_str("2000-01").unwrap(); + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Year), + ..Default::default() + }; + + let until = earlier.until(&later, settings).unwrap(); + let since = earlier.since(&later, settings).unwrap(); + + assert_eq!(until.years(), 1000); + assert_eq!(since.years(), -1000); + } + + // Lower ISO limit plus one month + // (The lower iso limit iteslf does not work since the day is set to 1) + { + let earlier = PlainYearMonth::from_str("-271821-05").unwrap(); + let later = PlainYearMonth::from_str("-271820-05").unwrap(); + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Year), + ..Default::default() + }; + + let until = earlier.until(&later, settings).unwrap(); + let since = earlier.since(&later, settings).unwrap(); + + assert_eq!(until.years(), 1); + assert_eq!(since.years(), -1); + } + + // Ensure that the day = 1 setting before diff works in non-ISO calendars + { + let earlier = PlainYearMonth::from_str("2000-07-02[u-ca=chinese]").unwrap(); + let later = PlainYearMonth::from_str("2000-12-26[u-ca=chinese]").unwrap(); + assert_eq!(earlier.month(), 6); + assert_eq!(later.month(), 12); + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Month), + ..Default::default() + }; + + let until = earlier.until(&later, settings).unwrap(); + let since = earlier.since(&later, settings).unwrap(); + + assert_eq!(until.months(), 6); + assert_eq!(since.months(), -6); + } + } + #[test] + fn test_diff_with_different_calendars() { + let ym1 = PlainYearMonth::new_with_overflow( + 2021, + 1, + None, + Calendar::from_str("islamic").unwrap(), + Overflow::Reject, + ) + .unwrap(); + + let ym2 = PlainYearMonth::new_with_overflow( + 2021, + 1, + None, + Calendar::from_str("hebrew").unwrap(), + Overflow::Reject, + ) + .unwrap(); + + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Month), + ..Default::default() + }; + + let diff = ym1.until(&ym2, settings); + assert!( + diff.is_err(), + "Expected an error when comparing dates from different calendars" + ); + } + #[test] + fn test_diff_setting() { + let ym1 = PlainYearMonth::from_str("2021-01").unwrap(); + let ym2 = PlainYearMonth::from_str("2023-02").unwrap(); + + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Month), + increment: Some(RoundingIncrement::ONE), + ..Default::default() + }; + + let diff = ym1.until(&ym2, settings).unwrap(); + assert_eq!(diff.months(), 1); + assert_eq!(diff.years(), 2); + } + #[test] + fn test_diff_with_smallest_unit_year() { + let ym1 = PlainYearMonth::from_str("2021-01").unwrap(); + let ym2 = PlainYearMonth::from_str("2023-02").unwrap(); + + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Year), + ..Default::default() + }; + + let diff = ym1.until(&ym2, settings).unwrap(); + assert_eq!(diff.years(), 2); // Rounded to the nearest year + assert_eq!(diff.months(), 0); // Months are ignored + } + + #[test] + fn test_diff_with_smallest_unit_day() { + let ym1 = PlainYearMonth::from_str("2021-01").unwrap(); + let ym2 = PlainYearMonth::from_str("2023-02").unwrap(); + + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Day), + ..Default::default() + }; + + let diff = ym1.until(&ym2, settings); + assert!( + diff.is_err(), + "Expected an error when smallest_unit is set to Day" + ); + } + + #[test] + fn test_diff_with_smallest_unit_week() { + let ym1 = PlainYearMonth::from_str("2021-01").unwrap(); + let ym2 = PlainYearMonth::from_str("2023-02").unwrap(); + + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Week), + ..Default::default() + }; + + let diff = ym1.until(&ym2, settings); + assert!( + diff.is_err(), + "Expected an error when smallest_unit is set to Week" + ); + } + + #[test] + fn test_diff_with_no_rounding_increment() { + let ym1 = PlainYearMonth::from_str("2021-01").unwrap(); + let ym2 = PlainYearMonth::from_str("2023-02").unwrap(); + + let settings = DifferenceSettings { + smallest_unit: Some(Unit::Month), + increment: None, // No rounding increment + ..Default::default() + }; + + let diff = ym1.until(&ym2, settings).unwrap(); + assert_eq!(diff.months(), 1); // Exact difference in months + assert_eq!(diff.years(), 2); // Exact difference in years + } + + #[test] + fn test_plain_year_month_with() { + let base = + PlainYearMonth::new_with_overflow(2025, 3, None, Calendar::default(), Overflow::Reject) + .unwrap(); + + // Year + let fields = YearMonthCalendarFields::new().with_year(2001); + + let with_year = base.with(fields, None).unwrap(); + assert_eq!(with_year.iso_year(), 2001); // year is changed + assert_eq!(with_year.iso_month(), 3); // month is not changed + assert_eq!(with_year.month_code(), MonthCode::from_str("M03").unwrap()); // assert month code has been initialized correctly + + // Month + let fields = YearMonthCalendarFields::new().with_month(2); + let with_month = base.with(fields, None).unwrap(); + assert_eq!(with_month.iso_year(), 2025); // year is not changed + assert_eq!(with_month.iso_month(), 2); // month is changed + assert_eq!(with_month.month_code(), MonthCode::from_str("M02").unwrap()); // assert month code has changed as well as month + + // Month Code + let fields = YearMonthCalendarFields::new().with_month_code(MonthCode(tinystr!(4, "M05"))); // change month to May (5) + let with_month_code = base.with(fields, None).unwrap(); + assert_eq!(with_month_code.iso_year(), 2025); // year is not changed + assert_eq!( + with_month_code.month_code(), + MonthCode::from_str("M05").unwrap() + ); // assert month code has changed + assert_eq!(with_month_code.iso_month(), 5); // month is changed as well + + // All + let fields = YearMonthCalendarFields::new().with_year(2001).with_month(2); + let with_all = base.with(fields, None).unwrap(); + assert_eq!(with_all.iso_year(), 2001); // year is changed + assert_eq!(with_all.iso_month(), 2); // month is changed + assert_eq!(with_all.iso.day, 1); // day is ignored + + // Empty fields -> throws error + let fields = YearMonthCalendarFields::new(); + let empty = base.with(fields, None); + assert!(empty.is_err()); + } + + #[test] + fn basic_from_str() { + let valid_strings = [ + "-271821-04", + "-271821-04-01", + "-271821-04-01T00:00", + "+275760-09", + "+275760-09-30", + "+275760-09-30T23:59:59.999999999", + ]; + + for valid_case in valid_strings { + let ym = PlainYearMonth::from_str(valid_case); + assert!(ym.is_ok()); + } + } + + #[test] + fn invalid_from_str() { + let invalid_strings = [ + "-271821-03-31", + "-271821-03-31T23:59:59.999999999", + "+275760-10", + "+275760-10-01", + "+275760-10-01T00:00", + "1976-11[u-ca=hebrew]", + // built-ins/Temporal/PlainYearMonth/from/argument-string-too-many-decimals + "1970-01-01T00:00:00.1234567891", + "1970-01-01T00:00:00.1234567890", + "1970-01-01T00+00:00:00.1234567891", + "1970-01-01T00+00:00:00.1234567890", + ]; + + for invalid_case in invalid_strings { + let err = PlainYearMonth::from_str(invalid_case); + assert!(err.is_err()); + } + + let invalid_strings = ["2019-10-01T09:00:00Z", "2019-10-01T09:00:00Z[UTC]"]; + + for invalid_case in invalid_strings { + let err = PlainYearMonth::from_str(invalid_case); + assert!(err.is_err()); + } + } + + #[test] + fn test_to_plain_date() { + let year_month = PlainYearMonth::new_with_overflow( + 2023, // year + 5, // month + None, // reference_day + Calendar::default(), + Overflow::Reject, + ) + .unwrap(); + + let fields = CalendarFields::new().with_day(3); + let plain_date = year_month.to_plain_date(Some(fields)).unwrap(); + assert_eq!(plain_date.iso_year(), 2023); + assert_eq!(plain_date.iso_month(), 5); + assert_eq!(plain_date.iso_day(), 3); + } + + #[test] + fn test_partial_year_month_try_from_plain() { + let ym = PlainYearMonth::from_str("2024-05").unwrap(); + let partial = YearMonthCalendarFields::try_from_year_month(&ym).unwrap(); + assert_eq!(partial.year, Some(2024)); + assert_eq!(partial.month, Some(5)); + assert_eq!( + partial.month_code, + Some(MonthCode::from_str("M05").unwrap()) + ); + assert_eq!(partial.era, None); + assert_eq!(partial.era_year, None); + } + + #[test] + fn test_year_month_fields_to_calendar_fields_round_trip() { + let partial = YearMonthCalendarFields::new() + .with_year(1999) + .with_month(12); + let pd: CalendarFields = partial.clone().into(); + let reconstructed: YearMonthCalendarFields = pd.into(); + assert_eq!(partial, reconstructed); + } + + #[test] + fn test_partial_year_month_builder_methods() { + let calendar = Calendar::from_str("gregory").unwrap(); + let calendar_fields = YearMonthCalendarFields::new() + .with_year(2020) + .with_month(7) + .with_month_code(MonthCode::from_str("M07").unwrap()) + .with_era(Some(tinystr!(19, "ce"))) + .with_era_year(Some(2020)); + + let partial = PartialYearMonth { + calendar_fields, + calendar: calendar.clone(), + }; + + assert_eq!(partial.calendar_fields.year, Some(2020)); + assert_eq!(partial.calendar_fields.month, Some(7)); + assert_eq!( + partial.calendar_fields.month_code, + Some(MonthCode::from_str("M07").unwrap()) + ); + assert_eq!(partial.calendar_fields.era, Some(tinystr!(19, "ce"))); + assert_eq!(partial.calendar_fields.era_year, Some(2020)); + assert_eq!(partial.calendar, calendar); + } + + #[test] + fn test_year_month_diff_range() { + // built-ins/Temporal/PlainYearMonth/prototype/since/throws-if-year-outside-valid-iso-range + + let min = PlainYearMonth::new(-271821, 4, None, Default::default()).unwrap(); + let max = PlainYearMonth::new(275760, 9, None, Default::default()).unwrap(); + let epoch = PlainYearMonth::new(1970, 1, None, Default::default()).unwrap(); + let _ = min.since(&min, Default::default()).unwrap(); + assert!(min.since(&max, Default::default()).is_err()); + assert!(min.since(&epoch, Default::default()).is_err()); + } + + #[test] + fn test_reference_day() { + // Note: Japanese reference days are also day 1 even at era boundaries + // https://github.com/tc39/proposal-temporal/issues/3150 + assert_eq!( + PlainYearMonth::from_str("1868-10-30[u-ca=japanese]") + .unwrap() + .reference_day(), + 1 + ); + // Still happens for dates that are in the previous era but same month + assert_eq!( + PlainYearMonth::from_str("1868-10-20[u-ca=japanese]") + .unwrap() + .reference_day(), + 1 + ); + // Won't happen for dates in other months + assert_eq!( + PlainYearMonth::from_str("1868-09-30[u-ca=japanese]") + .unwrap() + .reference_day(), + 1 + ); + + // Always 1 in other calendars + assert_eq!( + PlainYearMonth::from_str("2000-09-30[u-ca=chinese]") + .unwrap() + .reference_day(), + 1 + ); + assert_eq!( + PlainYearMonth::from_str("2000-09-30[u-ca=hebrew]") + .unwrap() + .reference_day(), + 1 + ); + } + + #[test] + /// https://g-issues.chromium.org/issues/443275104 + fn test_max_rounding_increment_auto() { + let ym = PlainYearMonth::try_new_iso(1639, 11, None).unwrap(); + assert!(ym + .until( + &ym, + DifferenceSettings { + smallest_unit: Some(Unit::Auto), + ..Default::default() + } + ) + .is_err()); + } + + #[test] + fn test_subtract_one_month() { + // https://github.com/boa-dev/temporal/issues/643 + let chinese_m12_1 = PlainYearMonth::from_str("2002-01-13[u-ca=chinese]").unwrap(); + let minus_one_month = Duration::from_str("P1M").unwrap(); + let prev = chinese_m12_1 + .subtract(&minus_one_month, Overflow::Constrain) + .unwrap(); + assert_eq!( + prev.to_ixdtf_string(Default::default()), + "2001-12-15[u-ca=chinese]" + ); + } + + #[test] + /// Should be able to subtract years from a leap month + /// + /// Regression test for bugs fixed by + fn test_subtract_years_from_leap_month() { + let dangi_m03l_2012 = PlainYearMonth::from_str("2012-04-21[u-ca=dangi]").unwrap(); + let minus_19y = Duration::from_str("-P19Y").unwrap(); + let prev = dangi_m03l_2012.add(&minus_19y, Overflow::Reject).unwrap(); + assert_eq!( + prev.to_ixdtf_string(Default::default()), + "1993-04-22[u-ca=dangi]" + ); + } +} diff --git a/src/builtins/core/time_zone.rs b/crates/temporal/src/builtins/core/time_zone.rs similarity index 100% rename from src/builtins/core/time_zone.rs rename to crates/temporal/src/builtins/core/time_zone.rs diff --git a/crates/temporal/src/builtins/core/zoned_date_time.rs b/crates/temporal/src/builtins/core/zoned_date_time.rs new file mode 100644 index 000000000..417d83259 --- /dev/null +++ b/crates/temporal/src/builtins/core/zoned_date_time.rs @@ -0,0 +1,1602 @@ +//! This module contains the core implementation of the `ZonedDateTime` +//! builtin type. + +use crate::{provider::EpochNanosecondsAndOffset, NonZeroSign}; +use alloc::string::String; +use core::{cmp::Ordering, num::NonZeroU128}; +use tinystr::TinyAsciiStr; + +use crate::{ + builtins::{ + calendar::CalendarFields, + core::{ + calendar::Calendar, + duration::normalized::{InternalDurationRecord, TimeDuration}, + time_zone::{TimeZone, UtcOffset}, + Duration, Instant, PlainDate, PlainDateTime, PlainTime, + }, + }, + error::ErrorMessage, + iso::{IsoDate, IsoDateTime, IsoTime}, + options::{ + DifferenceOperation, DifferenceSettings, Disambiguation, DisplayCalendar, DisplayOffset, + DisplayTimeZone, OffsetDisambiguation, Overflow, ResolvedRoundingOptions, + RoundingIncrement, RoundingMode, RoundingOptions, ToStringRoundingOptions, Unit, UnitGroup, + }, + parsed_intermediates::ParsedZonedDateTime, + parsers::{FormattableOffset, FormattableTime, IxdtfStringBuilder, Precision}, + partial::PartialTime, + primitive::FiniteF64, + provider::{TimeZoneProvider, TransitionDirection, UtcOffsetSeconds}, + rounding::IncrementRounder, + temporal_assert, + unix_time::EpochNanoseconds, + MonthCode, Sign, TemporalError, TemporalResult, TemporalUnwrap, +}; + +#[cfg(test)] +mod tests; + +/// A struct representing a partial `ZonedDateTime`. +#[derive(Debug, Default, Clone, PartialEq)] +pub struct PartialZonedDateTime { + /// The `ZonedDateTimeFields` portion of a `PartialZonedDateTime` + pub fields: ZonedDateTimeFields, + /// The time zone value of a partial time zone. + pub timezone: Option, + /// The calendar for the `PartialZonedDateTime`. + pub calendar: Calendar, +} + +impl PartialZonedDateTime { + pub fn is_empty(&self) -> bool { + self.fields.is_empty() && self.timezone.is_none() + } + + pub const fn new() -> Self { + Self { + fields: ZonedDateTimeFields::new(), + timezone: None, + calendar: Calendar::ISO, + } + } + + pub const fn with_calendar_fields(mut self, fields: CalendarFields) -> Self { + self.fields.calendar_fields = fields; + self + } + + pub const fn with_time(mut self, time: PartialTime) -> Self { + self.fields.time = time; + self + } + + pub const fn with_offset(mut self, offset: UtcOffset) -> Self { + self.fields.offset = Some(offset); + self + } + + pub fn with_timezone(mut self, timezone: Option) -> Self { + self.timezone = timezone; + self + } +} + +#[derive(Debug, Default, Clone, PartialEq)] +pub struct ZonedDateTimeFields { + pub calendar_fields: CalendarFields, + + pub time: PartialTime, + + /// An optional offset string + pub offset: Option, +} + +impl ZonedDateTimeFields { + pub const fn new() -> Self { + Self { + calendar_fields: CalendarFields::new(), + time: PartialTime::new(), + offset: None, + } + } + + pub fn is_empty(&self) -> bool { + self.calendar_fields.is_empty() && self.time.is_empty() && self.offset.is_none() + } +} + +/// The native Rust implementation of a Temporal `ZonedDateTime`. +/// +/// A `ZonedDateTime` represents a date and time in a specific time zone and calendar. +/// Unlike `PlainDateTime`, it represents an exact moment in time by combining a +/// `PlainDateTime` with time zone information. It is internally represented as +/// an instant (epoch nanoseconds) along with calendar and time zone data. +/// +/// Since `ZonedDateTime` includes timezone information, it can handle daylight saving time +/// transitions and timezone offset changes automatically. The type requires a timezone +/// data provider (implementing `TimeZoneProvider`) for most operations, which supplies +/// the necessary timezone rules and historical data. +/// +/// Unlike `PlainDateTime` which can be ambiguous during DST transitions, `ZonedDateTime` +/// always represents an unambiguous moment in time. +/// +/// ## Time zone provider API +/// +/// The core implementation of `ZonedDateTime` uses time zone provider APIs denoted by +/// a `*_with_provider` suffix. This means a provider that implements the `TimeZoneProvider` +/// trait must be provided for timezone-aware operations. +/// +/// Time zone providers available: +/// - **File system provider**: `FsTzdbProvider` (enabled with `tzdb` feature) +/// - **Compiled data provider**: Default implementation (enabled with `compiled_data` feature) +/// +/// ## Examples +/// +/// ### Creating a ZonedDateTime +/// +/// ```rust +/// # #[cfg(feature = "compiled_data")] { +/// use temporal::{Calendar, Instant, TimeZone, ZonedDateTime}; +/// +/// // Create from epoch nanoseconds +/// let zdt = ZonedDateTime::try_new( +/// 0, // epoch nanoseconds (Unix epoch) +/// TimeZone::utc(), // UTC timezone +/// Calendar::default(), // ISO 8601 calendar +/// ).unwrap(); +/// +/// assert_eq!(zdt.epoch_milliseconds(), 0); +/// assert_eq!(zdt.epoch_nanoseconds().as_i128(), 0); +/// assert_eq!(zdt.time_zone().identifier().unwrap(), "UTC"); +/// assert_eq!(zdt.calendar().identifier(), "iso8601"); +/// # } +/// ``` +/// +/// ### Working with timezones (requires provider, or compiled data) +/// +/// ```rust +/// # #[cfg(feature = "compiled_data")] { +/// use temporal::{ZonedDateTime, TimeZone, Calendar}; +/// +/// let time_zone = TimeZone::try_from_str("America/New_York").unwrap(); +/// let zoned_date_time = ZonedDateTime::try_new( +/// 1609459200000000000, // 2021-01-01T00:00:00Z +/// time_zone, +/// Calendar::default(), +/// ).unwrap(); +/// +/// // Note: This would be December 31, 2020 19:00 in New York (EST) +/// assert_eq!(zoned_date_time.year(), 2020); +/// assert_eq!(zoned_date_time.month(), 12); +/// assert_eq!(zoned_date_time.day(), 31); +/// assert_eq!(zoned_date_time.hour(), 19); +/// # } +/// ``` +/// +/// ### ZonedDateTime arithmetic (requires provider) +/// +/// ```rust +/// # #[cfg(feature = "compiled_data")] { +/// use temporal::{ZonedDateTime, Duration, TimeZone, Calendar}; +/// use std::str::FromStr; +/// +/// let time_zone = TimeZone::try_from_str("Europe/London").unwrap(); +/// let zdt = ZonedDateTime::try_new( +/// 1609459200000000000, // 2021-01-01T00:00:00Z +/// time_zone, +/// Calendar::default(), +/// ).unwrap(); +/// +/// // Add 6 months +/// let later = zdt.add( +/// &Duration::from_str("P6M").unwrap(), +/// None, +/// ).unwrap(); +/// +/// assert_eq!(later.month(), 7); // July +/// # } +/// ``` +/// +/// ### Converting from PlainDateTime +/// +/// ```rust +/// # #[cfg(feature = "compiled_data")] { +/// use temporal::{PlainDateTime, ZonedDateTime, TimeZone, options::Disambiguation}; +/// use std::str::FromStr; +/// +/// let plain_date_time = PlainDateTime::from_str("2024-03-15T14:30:00").unwrap(); +/// let time_zone = TimeZone::try_from_str("America/Los_Angeles").unwrap(); +/// +/// let zdt = plain_date_time.to_zoned_date_time( +/// time_zone, +/// Disambiguation::Compatible, +/// ).unwrap(); +/// +/// // Now we have an exact moment in time in the LA timezone +/// assert_eq!(zdt.time_zone().identifier().unwrap(), "America/Los_Angeles"); +/// # } +/// ``` +/// +/// ### String formatting (requires provider) +/// +/// ```rust +/// # #[cfg(feature = "compiled_data")] { +/// use temporal::{ZonedDateTime, Calendar, TimeZone}; +/// use temporal::options::{DisplayOffset, DisplayTimeZone, DisplayCalendar, ToStringRoundingOptions}; +/// +/// let zdt = ZonedDateTime::try_new( +/// 1609459200000000000, +/// TimeZone::try_from_str("Asia/Tokyo").unwrap(), +/// Calendar::default(), +/// ).unwrap(); +/// +/// let iso_string = zdt.to_ixdtf_string( +/// DisplayOffset::default(), +/// DisplayTimeZone::default(), +/// DisplayCalendar::default(), +/// ToStringRoundingOptions::default() +/// ).unwrap(); +/// +/// // Results in something like "2021-01-01T09:00:00+09:00[Asia/Tokyo]" +/// assert!(iso_string.contains("2021-01-01")); +/// assert!(iso_string.contains("+09:00")); +/// assert!(iso_string.contains("[Asia/Tokyo]")); +/// # } +/// ``` +/// +/// ## Reference +/// +/// For more information, see the [MDN documentation][mdn-zoneddatetime]. +/// +/// [mdn-zoneddatetime]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime +#[non_exhaustive] +#[derive(Debug, Clone)] +pub struct ZonedDateTime { + instant: Instant, + calendar: Calendar, + time_zone: TimeZone, + cached_offset: UtcOffset, +} + +// ==== Private API ==== + +impl ZonedDateTime { + /// Creates a `ZonedDateTime` without validating the input. + #[inline] + #[must_use] + pub(crate) fn new_unchecked( + instant: Instant, + time_zone: TimeZone, + calendar: Calendar, + cached_offset: UtcOffsetSeconds, + ) -> Self { + Self { + instant, + calendar, + time_zone, + cached_offset: cached_offset.into(), + } + } + + pub(crate) fn new_unchecked_with_provider( + instant: Instant, + time_zone: TimeZone, + calendar: Calendar, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + let offset = time_zone + .get_utc_offset_for(instant.epoch_nanoseconds().0, provider) + .temporal_unwrap()?; + Ok(Self { + instant, + calendar, + time_zone, + cached_offset: offset, + }) + } + + /// Equivalent to self.tz.get_iso_datetime_for(&self.instant, provider) + /// + /// (which is GetISODateTimeFor(self.[[TimeZone]], self.[[EpochNanoseconds]]).) + pub(crate) fn get_iso_datetime(&self) -> IsoDateTime { + self.cached_offset.get_iso_datetime_for(&self.instant) + } + + pub(crate) fn add_zoned_date_time( + &self, + duration: InternalDurationRecord, + overflow: Overflow, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + // 1. If DateDurationSign(duration.[[Date]]) = 0, then + if duration.date().sign() == Sign::Zero { + // a. Return ? AddInstant(epochNanoseconds, duration.[[Time]]). + return self + .instant + .add_to_instant(&duration.normalized_time_duration()); + } + // 2. Let isoDateTime be GetISODateTimeFor(timeZone, epochNanoseconds). + let iso_datetime = self.get_iso_datetime(); + // 3. Let addedDate be ? CalendarDateAdd(calendar, isoDateTime.[[ISODate]], duration.[[Date]], overflow). + let added_date = + self.calendar() + .date_add(&iso_datetime.date, &duration.date(), overflow)?; + // 4. Let intermediateDateTime be CombineISODateAndTimeRecord(addedDate, isoDateTime.[[Time]]). + let intermediate = IsoDateTime::new_unchecked(added_date.iso, iso_datetime.time); + // 5. If ISODateTimeWithinLimits(intermediateDateTime) is false, throw a RangeError exception. + if !intermediate.is_within_limits() { + return Err( + TemporalError::range().with_enum(ErrorMessage::IntermediateDateTimeOutOfRange) + ); + } + // 6. Let intermediateNs be ! GetEpochNanosecondsFor(timeZone, intermediateDateTime, compatible). + let intermediate_ns = self.time_zone().get_epoch_nanoseconds_for( + intermediate, + Disambiguation::Compatible, + provider, + )?; + + // 7. Return ? AddInstant(intermediateNs, duration.[[Time]]). + Instant::from(intermediate_ns.ns).add_to_instant(&duration.normalized_time_duration()) + } + + /// Adds a duration to the current `ZonedDateTime`, returning the resulting `ZonedDateTime`. + /// + /// Aligns with Abstract Operation 6.5.10 + #[inline] + pub(crate) fn add_internal( + &self, + duration: &Duration, + overflow: Overflow, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + // 1. Let duration be ? ToTemporalDuration(temporalDurationLike). + // 2. If operation is subtract, set duration to CreateNegatedTemporalDuration(duration). + // 3. Let resolvedOptions be ? GetOptionsObject(options). + // 4. Let overflow be ? GetTemporalOverflowOption(resolvedOptions). + // 5. Let calendar be zonedDateTime.[[Calendar]]. + // 6. Let timeZone be zonedDateTime.[[TimeZone]]. + // 7. Let internalDuration be ToInternalDurationRecord(duration). + let internal_duration = duration.to_internal_duration_record(); + // 8. Let epochNanoseconds be ? AddZonedDateTime(zonedDateTime.[[EpochNanoseconds]], timeZone, calendar, internalDuration, overflow). + let epoch_ns = self.add_zoned_date_time(internal_duration, overflow, provider)?; + // 9. Return ! CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar). + Self::new_unchecked_with_provider( + epoch_ns, + *self.time_zone(), + self.calendar().clone(), + provider, + ) + } + + /// Internal representation of Abstract Op 6.5.7 + pub(crate) fn diff_with_rounding( + &self, + other: &Instant, + resolved_options: ResolvedRoundingOptions, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + // 1. If UnitCategory(largestUnit) is time, then + if resolved_options.largest_unit.is_time_unit() { + // a. Return DifferenceInstant(ns1, ns2, roundingIncrement, smallestUnit, roundingMode). + return self.instant.diff_instant_internal(other, resolved_options); + } + // 2. let difference be ? differencezoneddatetime(ns1, ns2, timezone, calendar, largestunit). + let diff = self.diff_zoned_datetime(other, resolved_options.largest_unit, provider)?; + // 3. if smallestunit is nanosecond and roundingincrement = 1, return difference. + if resolved_options.smallest_unit == Unit::Nanosecond + && resolved_options.increment == RoundingIncrement::ONE + { + return Ok(diff); + } + // 4. let datetime be getisodatetimefor(timezone, ns1). + let iso = self.get_iso_datetime(); + // 5. Return ? RoundRelativeDuration(difference, ns2, dateTime, timeZone, calendar, largestUnit, roundingIncrement, smallestUnit, roundingMode). + diff.round_relative_duration( + *self.epoch_nanoseconds(), + other.epoch_nanoseconds().as_i128(), + &PlainDateTime::new_unchecked(iso, self.calendar().clone()), + Some((self.time_zone(), provider)), + resolved_options, + ) + } + + /// Internal representation of Abstract Op 6.5.8 + pub(crate) fn diff_with_total( + &self, + other: &Instant, + unit: Unit, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + // 1. If UnitCategory(unit) is time, then + if unit.is_time_unit() { + // a. Let difference be TimeDurationFromEpochNanosecondsDifference(ns2, ns1). + let diff = TimeDuration::from_nanosecond_difference( + other.epoch_nanoseconds().as_i128(), + self.epoch_nanoseconds().as_i128(), + )?; + // b. Return TotalTimeDuration(difference, unit). + return diff.total(unit); + } + + // 2. Let difference be ? DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, unit). + let diff = self.diff_zoned_datetime(other, unit, provider)?; + // 3. Let dateTime be GetISODateTimeFor(timeZone, ns1). + let iso = self.get_iso_datetime(); + // 4. Return ? TotalRelativeDuration(difference, ns2, dateTime, timeZone, calendar, unit). + diff.total_relative_duration( + *self.epoch_nanoseconds(), + other.epoch_nanoseconds().as_i128(), + &PlainDateTime::new_unchecked(iso, self.calendar().clone()), + Some((self.time_zone(), provider)), + unit, + ) + } + + pub(crate) fn diff_zoned_datetime( + &self, + other: &Instant, + largest_unit: Unit, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + // 1. If ns1 = ns2, return CombineDateAndTimeDuration(ZeroDateDuration(), 0). + if self.epoch_nanoseconds() == other.epoch_nanoseconds() { + return Ok(InternalDurationRecord::default()); + } + // 2. Let startDateTime be GetISODateTimeFor(timeZone, ns1). + let start = self.get_iso_datetime(); + // 3. Let endDateTime be GetISODateTimeFor(timeZone, ns2). + let end = self.time_zone.get_iso_datetime_for(other, provider)?; + // 4. If CompareISODate(startDateTime.[[ISODate]], endDateTime.[[ISODate]]) = 0, then + if start.date == end.date { + // a. Let timeDuration be TimeDurationFromEpochNanosecondsDifference(ns2, ns1). + let time_duration = TimeDuration::from_nanosecond_difference( + other.epoch_nanoseconds().as_i128(), + self.epoch_nanoseconds().as_i128(), + )?; + // b. Return CombineDateAndTimeDuration(ZeroDateDuration(), timeDuration). + return InternalDurationRecord::new(Default::default(), time_duration); + } + // 5. If ns2 - ns1 < 0, let sign be -1; else let sign be 1. + let diff = other.epoch_nanoseconds().as_i128() - self.epoch_nanoseconds().as_i128(); + let sign = NonZeroSign::from(diff.signum() as i8); + // 6. If sign = 1, let maxDayCorrection be 2; else let maxDayCorrection be 1. + let max_correction = match sign { + NonZeroSign::Positive => 2, + NonZeroSign::Negative => 1, + }; + // 7. Let dayCorrection be 0. + // 8. Let timeDuration be DifferenceTime(startDateTime.[[Time]], endDateTime.[[Time]]). + let time_duration = start.time.diff(&end.time); + // 9. If TimeDurationSign(timeDuration) = -sign, set dayCorrection to dayCorrection + 1. + let mut day_correction = if time_duration.sign() == sign.negate() { + 1 + } else { + 0 + }; + + // 10. Let success be false. + let mut intermediate_dt = IsoDateTime::default(); + let mut time_duration = TimeDuration::default(); + let mut is_success = false; + // 11. Repeat, while dayCorrection ≤ maxDayCorrection and success is false, + while day_correction <= max_correction && !is_success { + // a. Let intermediateDate be BalanceISODate(endDateTime.[[ISODate]].[[Year]], + // endDateTime.[[ISODate]].[[Month]], endDateTime.[[ISODate]].[[Day]] - dayCorrection × sign). + let intermediate = IsoDate::balance( + end.date.year, + end.date.month.into(), + i32::from(end.date.day) - i32::from(day_correction * sign as i8), + ); + // b. Let intermediateDateTime be CombineISODateAndTimeRecord(intermediateDate, startDateTime.[[Time]]). + intermediate_dt = IsoDateTime::new_unchecked(intermediate, start.time); + // c. Let intermediateNs be ? GetEpochNanosecondsFor(timeZone, intermediateDateTime, compatible). + let intermediate_ns = self.time_zone.get_epoch_nanoseconds_for( + intermediate_dt, + Disambiguation::Compatible, + provider, + )?; + // d. Set timeDuration to TimeDurationFromEpochNanosecondsDifference(ns2, intermediateNs). + time_duration = TimeDuration::from_nanosecond_difference( + other.epoch_nanoseconds().as_i128(), + intermediate_ns.ns.0, + )?; + // e. Let timeSign be TimeDurationSign(timeDuration). + let time_sign = time_duration.sign() as i8; + // f. If sign ≠ -timeSign, then + if sign as i8 != -time_sign { + // i. Set success to true. + is_success = true; + } + // g. Set dayCorrection to dayCorrection + 1. + day_correction += 1; + } + // 12. Assert: success is true. + // 13. Let dateLargestUnit be LargerOfTwoUnits(largestUnit, day). + let date_largest = largest_unit.max(Unit::Day); + // 14. Let dateDifference be CalendarDateUntil(calendar, startDateTime.[[ISODate]], intermediateDateTime.[[ISODate]], dateLargestUnit). + // 15. Return CombineDateAndTimeDuration(dateDifference, timeDuration). + let date_diff = + self.calendar() + .date_until(&start.date, &intermediate_dt.date, date_largest)?; + + InternalDurationRecord::new(date_diff.date(), time_duration) + } + + /// `temporal` equivalent to `DifferenceTemporalZonedDateTime`. + pub(crate) fn diff_internal_with_provider( + &self, + op: DifferenceOperation, + other: &Self, + options: DifferenceSettings, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + // NOTE: for order of operations, this should be asserted prior to this point + // by any engine implementors, but asserting out of caution. + if self.calendar != other.calendar { + return Err(TemporalError::range().with_enum(ErrorMessage::CalendarMismatch)); + } + + // 4. Set settings be ? GetDifferenceSettings(operation, resolvedOptions, datetime, « », nanosecond, hour). + let resolved_options = ResolvedRoundingOptions::from_diff_settings( + options, + op, + UnitGroup::DateTime, + Unit::Hour, + Unit::Nanosecond, + )?; + + // 5. If UnitCategory(settings.[[LargestUnit]]) is time, then + if resolved_options.largest_unit.is_time_unit() { + // a. Let internalDuration be DifferenceInstant(zonedDateTime.[[EpochNanoseconds]], other.[[EpochNanoseconds]], settings.[[RoundingIncrement]], settings.[[SmallestUnit]], settings.[[RoundingMode]]). + let internal = self + .instant + .diff_instant_internal(&other.instant, resolved_options)?; + // b. Let result be ! TemporalDurationFromInternal(internalDuration, settings.[[LargestUnit]]). + let result = Duration::from_internal(internal, resolved_options.largest_unit)?; + // c. If operation is since, set result to CreateNegatedTemporalDuration(result). + // d. Return result. + match op { + DifferenceOperation::Since => return Ok(result.negated()), + DifferenceOperation::Until => return Ok(result), + } + } + + // 6. NOTE: To calculate differences in two different time zones, + // settings.[[LargestUnit]] must be a time unit, because day lengths + // can vary between time zones due to DST and other UTC offset shifts. + // 7. If TimeZoneEquals(zonedDateTime.[[TimeZone]], other.[[TimeZone]]) is false, then + if !self + .time_zone + .time_zone_equals_with_provider(&other.time_zone, provider)? + { + // a. Throw a RangeError exception. + return Err(TemporalError::range().with_enum(ErrorMessage::TzMismatch)); + } + + // 8. If zonedDateTime.[[EpochNanoseconds]] = other.[[EpochNanoseconds]], then + if self.instant == other.instant { + // a. Return ! CreateTemporalDuration(0, 0, 0, 0, 0, 0, 0, 0, 0, 0). + return Ok(Duration::default()); + } + + // 9. Let internalDuration be ? DifferenceZonedDateTimeWithRounding(zonedDateTime.[[EpochNanoseconds]], other.[[EpochNanoseconds]], zonedDateTime.[[TimeZone]], zonedDateTime.[[Calendar]], settings.[[LargestUnit]], settings.[[RoundingIncrement]], settings.[[SmallestUnit]], settings.[[RoundingMode]]). + let internal = self.diff_with_rounding(&other.instant, resolved_options, provider)?; + // 10. Let result be ! TemporalDurationFromInternal(internalDuration, hour). + let result = Duration::from_internal(internal, Unit::Hour)?; + // 11. If operation is since, set result to CreateNegatedTemporalDuration(result). + // 12. Return result. + match op { + DifferenceOperation::Since => Ok(result.negated()), + DifferenceOperation::Until => Ok(result), + } + } +} + +// ==== Public API ==== + +impl ZonedDateTime { + /// Creates a new valid `ZonedDateTime`. + #[inline] + pub fn try_new_with_provider( + nanos: i128, + time_zone: TimeZone, + calendar: Calendar, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + let instant = Instant::try_new(nanos)?; + Self::new_unchecked_with_provider(instant, time_zone, calendar, provider) + } + + /// Creates a new valid `ZonedDateTime`. + #[inline] + pub(crate) fn try_new_with_cached_offset( + nanos: i128, + time_zone: TimeZone, + calendar: Calendar, + cached_offset: UtcOffsetSeconds, + ) -> TemporalResult { + let instant = Instant::try_new(nanos)?; + Ok(Self::new_unchecked( + instant, + time_zone, + calendar, + cached_offset, + )) + } + + /// Creates a new valid `ZonedDateTime` with an ISO 8601 calendar. + #[inline] + pub fn try_new_iso_with_provider( + nanos: i128, + time_zone: TimeZone, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + let instant = Instant::try_new(nanos)?; + Self::new_unchecked_with_provider(instant, time_zone, Calendar::ISO, provider) + } + + /// Creates a new valid `ZonedDateTime` from an [`Instant`]. + #[inline] + pub fn try_new_from_instant_with_provider( + instant: Instant, + time_zone: TimeZone, + calendar: Calendar, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + Self::new_unchecked_with_provider(instant, time_zone, calendar, provider) + } + + /// Creates a new valid `ZonedDateTime` from an [`Instant`] with an ISO 8601 calendar. + #[inline] + pub fn try_new_iso_from_instant_with_provider( + instant: Instant, + time_zone: TimeZone, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + Self::new_unchecked_with_provider(instant, time_zone, Calendar::ISO, provider) + } + + /// Returns `ZonedDateTime`'s Calendar. + #[inline] + #[must_use] + pub fn calendar(&self) -> &Calendar { + &self.calendar + } + + /// Returns `ZonedDateTime`'s `TimeZone` slot. + #[inline] + #[must_use] + pub fn time_zone(&self) -> &TimeZone { + &self.time_zone + } + + /// Create a `ZonedDateTime` from a `PartialZonedDateTime`. + #[inline] + pub fn from_partial_with_provider( + partial: PartialZonedDateTime, + overflow: Option, + disambiguation: Option, + offset_option: Option, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + let overflow = overflow.unwrap_or(Overflow::Constrain); + let disambiguation = disambiguation.unwrap_or(Disambiguation::Compatible); + let offset_option = offset_option.unwrap_or(OffsetDisambiguation::Reject); + + let date = partial + .calendar + .date_from_fields(partial.fields.calendar_fields, overflow)? + .iso; + + let time = Some(IsoTime::default().with(partial.fields.time, overflow)?); + + // Handle time zones + let offset_nanos = partial.fields.offset.map(|offset| offset.nanoseconds()); + + let timezone = partial + .timezone + .unwrap_or_else(|| TimeZone::utc_with_provider(provider)); + let epoch_nanos = interpret_isodatetime_offset( + date, + time, + false, + offset_nanos, + &timezone, + disambiguation, + offset_option, + false, + provider, + )?; + + Ok(Self::new_unchecked( + Instant::from(epoch_nanos.ns), + timezone, + partial.calendar, + epoch_nanos.offset, + )) + } + + /// Returns the `epochMilliseconds` value of this `ZonedDateTime`. + #[must_use] + pub fn epoch_milliseconds(&self) -> i64 { + self.instant.epoch_milliseconds() + } + + /// Returns the `epochNanoseconds` value of this `ZonedDateTime`. + #[must_use] + pub fn epoch_nanoseconds(&self) -> &EpochNanoseconds { + self.instant.epoch_nanoseconds() + } + + /// Returns the current `ZonedDateTime` as an [`Instant`]. + #[must_use] + pub fn to_instant(&self) -> Instant { + self.instant + } + + pub fn with_with_provider( + &self, + fields: ZonedDateTimeFields, + disambiguation: Option, + offset_option: Option, + overflow: Option, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + if fields.is_empty() { + return Err(TemporalError::r#type().with_enum(ErrorMessage::EmptyFieldsIsInvalid)); + } + let overflow = overflow.unwrap_or_default(); + let disambiguation = disambiguation.unwrap_or_default(); + let offset_option = offset_option.unwrap_or(OffsetDisambiguation::Reject); + // 8. Let isoDateTime be GetISODateTimeFor(timeZone, epochNs). + let iso_date_time = self.get_iso_datetime(); + let plain_date_time = PlainDateTime::new_unchecked(iso_date_time, self.calendar.clone()); + + // 23. Let dateTimeResult be ? InterpretTemporalDateTimeFields(calendar, fields, overflow). + let result_date = self.calendar.date_from_fields( + fields + .calendar_fields + .with_fallback_datetime(&plain_date_time, self.calendar.kind())?, + overflow, + )?; + + let time = iso_date_time.time.with(fields.time, overflow)?; + + // 7. Let offsetNanoseconds be GetOffsetNanosecondsFor(timeZone, epochNs). + let original_offset = self.offset_nanoseconds(); + // 24. Let newOffsetNanoseconds be ! ParseDateTimeUTCOffset(fields.[[OffsetString]]). + let new_offset_nanos = fields + .offset + .map(|offset| offset.nanoseconds()) + .or(Some(original_offset)); + + // 25. Let epochNanoseconds be ? InterpretISODateTimeOffset(dateTimeResult.[[ISODate]], dateTimeResult.[[Time]], option, newOffsetNanoseconds, timeZone, disambiguation, offset, match-exactly). + let epoch_nanos = interpret_isodatetime_offset( + result_date.iso, + Some(time), + // Set to Option ... we don't use an enum here, so any value will do. + true, + new_offset_nanos, + &self.time_zone, + disambiguation, + offset_option, + // match-exactly + false, + provider, + )?; + + // 26. Return ! CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar). + Ok(Self::new_unchecked( + Instant::from(epoch_nanos.ns), + self.time_zone, + self.calendar.clone(), + epoch_nanos.offset, + )) + } + + /// Creates a new `ZonedDateTime` from the current `ZonedDateTime` + /// combined with the provided `TimeZone`. + pub fn with_time_zone_with_provider( + &self, + time_zone: TimeZone, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + Self::try_new_with_provider( + self.epoch_nanoseconds().as_i128(), + time_zone, + self.calendar.clone(), + provider, + ) + } + + /// Creates a new `ZonedDateTime` from the current `ZonedDateTime` + /// combined with the provided `Calendar`. + #[inline] + #[must_use] + pub fn with_calendar(&self, calendar: Calendar) -> Self { + Self::new_unchecked( + self.instant, + self.time_zone, + calendar, + self.cached_offset.into(), + ) + } + + /// Compares one `ZonedDateTime` to another `ZonedDateTime` using their + /// `Instant` representation. + /// + /// # Note on Ordering. + /// + /// `temporal` does not implement `PartialOrd`/`Ord` as `ZonedDateTime` does + /// not fulfill all the conditions required to implement the traits. However, + /// it is possible to compare `PlainDate`'s as their `IsoDate` representation. + #[inline] + #[must_use] + pub fn compare_instant(&self, other: &Self) -> Ordering { + self.instant.cmp(&other.instant) + } +} + +// ==== HoursInDay accessor method implementation ==== + +impl ZonedDateTime { + /// Get the previous or next time zone transition for the current `ZonedDateTime`. + pub fn get_time_zone_transition_with_provider( + &self, + direction: TransitionDirection, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult> { + // 8. If IsOffsetTimeZoneIdentifier(timeZone) is true, return null. + let TimeZone::IanaIdentifier(identifier) = self.time_zone else { + return Ok(None); + }; + // 9. If direction is next, then + // a. Let transition be GetNamedTimeZoneNextTransition(timeZone, zonedDateTime.[[EpochNanoseconds]]). + // 10. Else, + // a. Assert: direction is previous. + // b. Let transition be GetNamedTimeZonePreviousTransition(timeZone, zonedDateTime.[[EpochNanoseconds]]). + let transition = provider.get_time_zone_transition( + identifier, + self.epoch_nanoseconds().as_i128(), + direction, + )?; + + // 11. If transition is null, return null. + let Some(transition) = transition else { + return Ok(None); + }; + + if transition.check_validity().is_err() { + // GetNamedTimeZoneNextTransition, GetNamedTimeZonePreviousTransition include a check for out-of-bounds + // instants. Instead of requiring providers handle that, we handle it here. + return Ok(None); + } + // 12. Return ! CreateTemporalZonedDateTime(transition, timeZone, zonedDateTime.[[Calendar]]). + Ok(Some( + ZonedDateTime::try_new_with_provider( + transition.0, + self.time_zone, + self.calendar().clone(), + provider, + ) + .ok() + .temporal_unwrap()?, + )) + } + + pub fn hours_in_day_with_provider( + &self, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + // 1-3. Is engine specific steps + // 4. Let isoDateTime be GetISODateTimeFor(timeZone, zonedDateTime.[[EpochNanoseconds]]). + let iso = self.get_iso_datetime(); + // 5. Let today be isoDateTime.[[ISODate]]. + let today = iso.date; + // 6. Let tomorrow be BalanceISODate(today.[[Year]], today.[[Month]], today.[[Day]] + 1). + let tomorrow = IsoDate::balance(today.year, today.month.into(), i32::from(today.day + 1)); + // 7. Let todayNs be ? GetStartOfDay(timeZone, today). + let today = self.time_zone.get_start_of_day(&today, provider)?; + // 8. Let tomorrowNs be ? GetStartOfDay(timeZone, tomorrow). + let tomorrow = self.time_zone.get_start_of_day(&tomorrow, provider)?; + // 9. Let diff be TimeDurationFromEpochNanosecondsDifference(tomorrowNs, todayNs). + let diff = TimeDuration::from_nanosecond_difference(tomorrow.ns.0, today.ns.0)?; + // NOTE: The below should be safe as today_ns and tomorrow_ns should be at most 25 hours. + // TODO: Tests for the below cast. + // 10. Return 𝔽(TotalTimeDuration(diff, hour)). + Ok(diff.divide(3_600_000_000_000.)) + } +} + +// ==== Core accessor methods ==== + +impl ZonedDateTime { + /// Returns the `year` value for this `ZonedDateTime`. + #[inline] + pub fn year(&self) -> i32 { + let iso = self.get_iso_datetime(); + let dt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.year(&dt.iso.date) + } + + /// Returns the `month` value for this `ZonedDateTime`. + pub fn month(&self) -> u8 { + let iso = self.get_iso_datetime(); + let dt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.month(&dt.iso.date) + } + + /// Returns the `monthCode` value for this `ZonedDateTime`. + pub fn month_code(&self) -> MonthCode { + let iso = self.get_iso_datetime(); + let dt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.month_code(&dt.iso.date) + } + + /// Returns the `day` value for this `ZonedDateTime`. + pub fn day(&self) -> u8 { + let iso = self.get_iso_datetime(); + let dt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.day(&dt.iso.date) + } + + /// Returns the `hour` value for this `ZonedDateTime`. + pub fn hour(&self) -> u8 { + let iso = self.get_iso_datetime(); + iso.time.hour + } + + /// Returns the `minute` value for this `ZonedDateTime`. + pub fn minute(&self) -> u8 { + let iso = self.get_iso_datetime(); + iso.time.minute + } + + /// Returns the `second` value for this `ZonedDateTime`. + pub fn second(&self) -> u8 { + let iso = self.get_iso_datetime(); + iso.time.second + } + + /// Returns the `millisecond` value for this `ZonedDateTime`. + pub fn millisecond(&self) -> u16 { + let iso = self.get_iso_datetime(); + iso.time.millisecond + } + + /// Returns the `microsecond` value for this `ZonedDateTime`. + pub fn microsecond(&self) -> u16 { + let iso = self.get_iso_datetime(); + iso.time.microsecond + } + + /// Returns the `nanosecond` value for this `ZonedDateTime`. + pub fn nanosecond(&self) -> u16 { + let iso = self.get_iso_datetime(); + iso.time.nanosecond + } + + // TODO: Expose a format / writeable API + /// Returns an offset string for the current `ZonedDateTime`. + pub fn offset(&self) -> String { + let offset = self.cached_offset.nanoseconds(); + nanoseconds_to_formattable_offset(offset as i128).to_string() + } + + /// Returns the offset nanoseconds for the current `ZonedDateTime`. + pub fn offset_nanoseconds(&self) -> i64 { + self.cached_offset.nanoseconds() + } +} + +pub(crate) fn nanoseconds_to_formattable_offset(nanoseconds: i128) -> FormattableOffset { + let sign = if nanoseconds >= 0 { + Sign::Positive + } else { + Sign::Negative + }; + let nanos = nanoseconds.unsigned_abs(); + let hour = (nanos / 3_600_000_000_000) as u8; + let minute = ((nanos / 60_000_000_000) % 60) as u8; + let second = ((nanos / 1_000_000_000) % 60) as u8; + let nanosecond = (nanos % 1_000_000_000) as u32; + + let precision = if second == 0 && nanosecond == 0 { + Precision::Minute + } else { + Precision::Auto + }; + + FormattableOffset { + sign, + time: FormattableTime { + hour, + minute, + second, + nanosecond, + precision, + include_sep: true, + }, + } +} + +// ==== Core calendar method implementations ==== + +impl ZonedDateTime { + /// Returns the era for the current `ZonedDateTime`. + pub fn era(&self) -> Option> { + let iso = self.get_iso_datetime(); + let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.era(&pdt.iso.date) + } + + /// Returns the era-specific year for the current `ZonedDateTime`. + pub fn era_year(&self) -> Option { + let iso = self.get_iso_datetime(); + let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.era_year(&pdt.iso.date) + } + + /// Returns the calendar day of week value. + pub fn day_of_week(&self) -> u16 { + let iso = self.get_iso_datetime(); + let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.day_of_week(&pdt.iso.date) + } + + /// Returns the calendar day of year value. + pub fn day_of_year(&self) -> u16 { + let iso = self.get_iso_datetime(); + let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.day_of_year(&pdt.iso.date) + } + + /// Returns the calendar week of year value. + pub fn week_of_year(&self) -> Option { + let iso = self.get_iso_datetime(); + let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.week_of_year(&pdt.iso.date) + } + + /// Returns the calendar year of week value. + pub fn year_of_week(&self) -> Option { + let iso = self.get_iso_datetime(); + let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.year_of_week(&pdt.iso.date) + } + + /// Returns the calendar days in week value. + pub fn days_in_week(&self) -> u16 { + let iso = self.get_iso_datetime(); + let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.days_in_week(&pdt.iso.date) + } + + /// Returns the calendar days in month value. + pub fn days_in_month(&self) -> u16 { + let iso = self.get_iso_datetime(); + let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.days_in_month(&pdt.iso.date) + } + + /// Returns the calendar days in year value. + pub fn days_in_year(&self) -> u16 { + let iso = self.get_iso_datetime(); + let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.days_in_year(&pdt.iso.date) + } + + /// Returns the calendar months in year value. + pub fn months_in_year(&self) -> u16 { + let iso = self.get_iso_datetime(); + let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.months_in_year(&pdt.iso.date) + } + + /// Returns returns whether the date in a leap year for the given calendar. + pub fn in_leap_year(&self) -> bool { + let iso = self.get_iso_datetime(); + let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); + self.calendar.in_leap_year(&pdt.iso.date) + } +} + +// ==== Core method implementations ==== + +impl ZonedDateTime { + /// Creates a new `ZonedDateTime` from the current `ZonedDateTime` + /// combined with the provided `TimeZone`. + pub fn with_plain_time_and_provider( + &self, + time: Option, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + let iso = self.get_iso_datetime(); + let epoch_ns = if let Some(time) = time { + let result_iso = IsoDateTime::new_unchecked(iso.date, time.iso); + self.time_zone.get_epoch_nanoseconds_for( + result_iso, + Disambiguation::Compatible, + provider, + )? + } else { + self.time_zone.get_start_of_day(&iso.date, provider)? + }; + Self::try_new_with_cached_offset( + epoch_ns.ns.0, + self.time_zone, + self.calendar.clone(), + epoch_ns.offset, + ) + } + + /// Add a duration to the current `ZonedDateTime` + pub fn add_with_provider( + &self, + duration: &Duration, + overflow: Option, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + self.add_internal(duration, overflow.unwrap_or(Overflow::Constrain), provider) + } + + /// Subtract a duration to the current `ZonedDateTime` + pub fn subtract_with_provider( + &self, + duration: &Duration, + overflow: Option, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + self.add_internal( + &duration.negated(), + overflow.unwrap_or(Overflow::Constrain), + provider, + ) + } + + /// Checks if the current `ZonedDateTime` is equal to another `ZonedDateTime`. + pub fn equals_with_provider( + &self, + other: &Self, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + // 4. If zonedDateTime.[[EpochNanoseconds]] ≠ other.[[EpochNanoseconds]], return false. + if self.instant != other.instant { + return Ok(false); + } + + // 5. If TimeZoneEquals(zonedDateTime.[[TimeZone]], other.[[TimeZone]]) is false, return false. + if !self + .time_zone + .time_zone_equals_with_provider(&other.time_zone, provider)? + { + return Ok(false); + } + // 6. Return CalendarEquals(zonedDateTime.[[Calendar]], other.[[Calendar]]). + Ok(self.calendar == other.calendar) + } + + /// Returns a [`Duration`] representing the period of time from this `ZonedDateTime` since the other `ZonedDateTime`. + pub fn since_with_provider( + &self, + other: &Self, + options: DifferenceSettings, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + self.diff_internal_with_provider(DifferenceOperation::Since, other, options, provider) + } + + /// Returns a [`Duration`] representing the period of time from this `ZonedDateTime` since the other `ZonedDateTime`. + pub fn until_with_provider( + &self, + other: &Self, + options: DifferenceSettings, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + self.diff_internal_with_provider(DifferenceOperation::Until, other, options, provider) + } + + /// Return a `ZonedDateTime` representing the start of the day + /// for the current `ZonedDateTime`. + pub fn start_of_day_with_provider( + &self, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + let iso = self.get_iso_datetime(); + let epoch_nanos = self.time_zone.get_start_of_day(&iso.date, provider)?; + Self::try_new_with_cached_offset( + epoch_nanos.ns.0, + self.time_zone, + self.calendar.clone(), + epoch_nanos.offset, + ) + } + + /// Convert the current `ZonedDateTime` to a [`PlainDate`] + pub fn to_plain_date(&self) -> PlainDate { + let iso = self.get_iso_datetime(); + PlainDate::new_unchecked(iso.date, self.calendar.clone()) + } + + /// Convert the current `ZonedDateTime` to a [`PlainTime`] + pub fn to_plain_time(&self) -> PlainTime { + let iso = self.get_iso_datetime(); + PlainTime::new_unchecked(iso.time) + } + + /// Convert the current `ZonedDateTime` to a [`PlainDateTime`] + pub fn to_plain_date_time(&self) -> PlainDateTime { + let iso = self.get_iso_datetime(); + PlainDateTime::new_unchecked(iso, self.calendar.clone()) + } + + /// Creates a default formatted IXDTF (RFC 9557) date/time string for the provided `ZonedDateTime`. + pub fn to_string_with_provider( + &self, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + self.to_ixdtf_string_with_provider( + DisplayOffset::Auto, + DisplayTimeZone::Auto, + DisplayCalendar::Auto, + ToStringRoundingOptions::default(), + provider, + ) + } + + /// 6.3.39 Temporal.ZonedDateTime.prototype.round + pub fn round_with_provider( + &self, + options: RoundingOptions, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + // 1. Let zonedDateTime be the this value. + // 2. Perform ? RequireInternalSlot(zonedDateTime, [[InitializedTemporalZonedDateTime]]). + // 3. If roundTo is undefined, then + // a. Throw a TypeError exception. + // 4. If roundTo is a String, then + // a. Let paramString be roundTo. + // b. Set roundTo to OrdinaryObjectCreate(null). + // c. Perform ! CreateDataPropertyOrThrow(roundTo, "smallestUnit", paramString). + // 5. Else, + // a. Set roundTo to ? GetOptionsObject(roundTo). + // 6. NOTE: The following steps read options and perform independent validation in alphabetical order (GetRoundingIncrementOption reads "roundingIncrement" and GetRoundingModeOption reads "roundingMode"). + // 7. Let roundingIncrement be ? GetRoundingIncrementOption(roundTo). + // 8. Let roundingMode be ? GetRoundingModeOption(roundTo, half-expand). + // 9. Let smallestUnit be ? GetTemporalUnitValuedOption(roundTo, "smallestUnit", time, required, « day »). + // 10. If smallestUnit is day, then + // a. Let maximum be 1. + // b. Let inclusive be true. + // 11. Else, + // a. Let maximum be MaximumTemporalDurationRoundingIncrement(smallestUnit). + // b. Assert: maximum is not unset. + // c. Let inclusive be false. + let resolved = ResolvedRoundingOptions::from_datetime_options(options)?; + // 12. Perform ? ValidateTemporalRoundingIncrement(roundingIncrement, maximum, inclusive). + // 13. If maximum is not unset, perform ? ValidateTemporalRoundingIncrement(roundingIncrement, maximum, false). + // 13. If smallestUnit is nanosecond and roundingIncrement = 1, then + if resolved.smallest_unit == Unit::Nanosecond + && resolved.increment == RoundingIncrement::ONE + { + // a. Return ! CreateTemporalZonedDateTime(zonedDateTime.[[EpochNanoseconds]], zonedDateTime.[[TimeZone]], zonedDateTime.[[Calendar]]). + return Ok(self.clone()); + } + // 14. Let thisNs be zonedDateTime.[[EpochNanoseconds]]. + let this_ns = self.epoch_nanoseconds(); + // 15. Let timeZone be zonedDateTime.[[TimeZone]]. + // 16. Let calendar be zonedDateTime.[[Calendar]]. + // 17. Let isoDateTime be GetISODateTimeFor(timeZone, thisNs). + // 18. If smallestUnit is day, then + if resolved.smallest_unit == Unit::Day { + // a. Let dateStart be isoDateTime.[[ISODate]]. + let iso_start = self.get_iso_datetime(); + // b. Let dateEnd be BalanceISODate(dateStart.[[Year]], dateStart.[[Month]], dateStart.[[Day]] + 1). + let iso_end = IsoDate::balance( + iso_start.date.year, + iso_start.date.month.into(), + i32::from(iso_start.date.day + 1), + ); + // c. Let startNs be ? GetStartOfDay(timeZone, dateStart). + // d. Assert: thisNs ≥ startNs. + // e. Let endNs be ? GetStartOfDay(timeZone, dateEnd). + // f. [Struck out in spec] Assert: thisNs < endNs. + let start = self.time_zone.get_start_of_day(&iso_start.date, provider)?; + let end = self.time_zone.get_start_of_day(&iso_end, provider)?; + if this_ns.0 < start.ns.0 { + return Err(TemporalError::range().with_enum(ErrorMessage::ZDTOutOfDayBounds)); + } + // g. Set thisNs to min(thisNs, endNs - 1). + let this_ns_val = this_ns.0.min(end.ns.0 - 1); + // h. Let dayLengthNs be ℝ(endNs - startNs). + // i. Let dayProgressNs be TimeDurationFromEpochNanosecondsDifference(thisNs, startNs). + let day_len_ns = TimeDuration::from_nanosecond_difference(end.ns.0, start.ns.0)?; + let day_progress_ns = + TimeDuration::from_nanosecond_difference(this_ns_val, start.ns.0)?; + // j. Let roundedDayNs be ! RoundTimeDurationToIncrement(dayProgressNs, dayLengthNs, roundingMode). + let rounded = if let Some(increment) = NonZeroU128::new(day_len_ns.0.unsigned_abs()) { + IncrementRounder::::from_signed_num(day_progress_ns.0, increment)? + .round(resolved.rounding_mode) + } else { + 0 // Zero-length day: round to start of day + }; + + // The cached offset will be based on which way we round + let offset = if rounded == 0 { + start.offset + } else { + end.offset + }; + + // k. Let epochNanoseconds be AddTimeDurationToEpochNanoseconds(roundedDayNs, startNs). + let candidate = start.ns.0 + rounded; + Instant::try_new(candidate)?; + // 20. Return ! CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar). + ZonedDateTime::try_new_with_cached_offset( + candidate, + self.time_zone, + self.calendar.clone(), + offset, + ) + } else { + // 19. Else, + // a. Let roundResult be RoundISODateTime(isoDateTime, roundingIncrement, smallestUnit, roundingMode). + // b. Let offsetNanoseconds be GetOffsetNanosecondsFor(timeZone, thisNs). + // c. Let epochNanoseconds be ? InterpretISODateTimeOffset(roundResult.[[ISODate]], roundResult.[[Time]], option, offsetNanoseconds, timeZone, compatible, prefer, match-exactly). + // 20. Return ! CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar). + let iso_dt = self.get_iso_datetime(); + let rounded_dt = iso_dt.round(resolved)?; + let offset_ns = self + .time_zone + .get_offset_nanos_for(this_ns.as_i128(), provider)?; + + let epoch_ns = interpret_isodatetime_offset( + rounded_dt.date, + Some(rounded_dt.time), + false, + Some(offset_ns as i64), + &self.time_zone, + Disambiguation::Compatible, + OffsetDisambiguation::Prefer, + // match-exactly + false, + provider, + )?; + + ZonedDateTime::try_new_with_cached_offset( + epoch_ns.ns.0, + self.time_zone, + self.calendar.clone(), + epoch_ns.offset, + ) + } + } + + /// Creates an IXDTF (RFC 9557) date/time string for the provided `ZonedDateTime` according + /// to the provided display options. + pub fn to_ixdtf_string_with_provider( + &self, + display_offset: DisplayOffset, + display_timezone: DisplayTimeZone, + display_calendar: DisplayCalendar, + options: ToStringRoundingOptions, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + let resolved_options = options.resolve()?; + let result = + self.instant + .round_instant(ResolvedRoundingOptions::from_to_string_options( + &resolved_options, + ))?; + let rounded_instant = Instant::try_new(result)?; + + let offset = self.time_zone.get_offset_nanos_for(result, provider)?; + let datetime = self + .time_zone + .get_iso_datetime_for(&rounded_instant, provider)?; + let (sign, hour, minute) = nanoseconds_to_formattable_offset_minutes(offset)?; + let timezone_id = self.time_zone().identifier_with_provider(provider)?; + + let ixdtf_string = IxdtfStringBuilder::default() + .with_date(datetime.date) + .with_time(datetime.time, resolved_options.precision) + .with_minute_offset(sign, hour, minute, display_offset) + .with_timezone(&timezone_id, display_timezone) + .with_calendar(self.calendar.identifier(), display_calendar) + .build(); + + Ok(ixdtf_string) + } + + // TODO: Should IANA Identifier be prechecked or allow potentially invalid IANA Identifer values here? + pub fn from_utf8_with_provider( + source: &[u8], + disambiguation: Disambiguation, + offset_option: OffsetDisambiguation, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + let parsed = ParsedZonedDateTime::from_utf8_with_provider(source, provider)?; + + Self::from_parsed_with_provider(parsed, disambiguation, offset_option, provider) + } + + pub fn from_parsed_with_provider( + parsed: ParsedZonedDateTime, + disambiguation: Disambiguation, + offset_option: OffsetDisambiguation, + provider: &(impl TimeZoneProvider + ?Sized), + ) -> TemporalResult { + let date = IsoDate::new_with_overflow( + parsed.date.record.year, + parsed.date.record.month, + parsed.date.record.day, + Overflow::Reject, + )?; + + let epoch_nanos = interpret_isodatetime_offset( + date, + parsed.time, + parsed.has_utc_designator, + parsed.offset.map(|o| o.nanoseconds()), + &parsed.timezone, + disambiguation, + offset_option, + parsed.match_minutes, + provider, + )?; + Ok(Self::new_unchecked( + Instant::from(epoch_nanos.ns), + parsed.timezone, + Calendar::new(parsed.date.calendar), + epoch_nanos.offset, + )) + } +} + +/// InterpretISODateTimeOffset +/// +/// offsetBehavior is: +/// - OPTION if offset_nanos is Some +/// - WALL if offset_nanos is None and !is_exact +/// - EXACT if offset_nanos is None and is_exact +/// +/// When offset_nanos is None, offsetNanoseconds is 0 +#[allow(clippy::too_many_arguments)] +pub(crate) fn interpret_isodatetime_offset( + date: IsoDate, + time: Option, + is_exact: bool, + offset_nanos: Option, + timezone: &TimeZone, + disambiguation: Disambiguation, + offset_option: OffsetDisambiguation, + match_minutes: bool, + provider: &(impl TimeZoneProvider + ?Sized), +) -> TemporalResult { + // 1. If time is start-of-day, then + let Some(time) = time else { + // a. Assert: offsetBehaviour is wall. + // b. Assert: offsetNanoseconds is 0. + temporal_assert!(offset_nanos.is_none()); + // c. Return ? GetStartOfDay(timeZone, isoDate). + return timezone.get_start_of_day(&date, provider); + }; + + // 2. Let isoDateTime be CombineISODateAndTimeRecord(isoDate, time). + let iso_datetime = IsoDateTime::new_unchecked(date, time); + match (is_exact, offset_nanos, offset_option) { + // 3. If offsetBehaviour is wall, or offsetBehaviour is option and offsetOption is ignore, then + (false, None, _) | (_, Some(_), OffsetDisambiguation::Ignore) => { + // a. Return ? GetEpochNanosecondsFor(timeZone, isoDateTime, disambiguation). + timezone.get_epoch_nanoseconds_for(iso_datetime, disambiguation, provider) + } + // 4. If offsetBehaviour is exact, or offsetBehaviour is option and offsetOption is use, then + (true, None, _) | (_, Some(_), OffsetDisambiguation::Use) => { + let offset = offset_nanos.unwrap_or(0); + // a. Let balanced be BalanceISODateTime(isoDate.[[Year]], isoDate.[[Month]], + // isoDate.[[Day]], time.[[Hour]], time.[[Minute]], time.[[Second]], time.[[Millisecond]], + // time.[[Microsecond]], time.[[Nanosecond]] - offsetNanoseconds). + let iso = IsoDateTime::balance( + date.year, + date.month.into(), + date.day.into(), + time.hour.into(), + time.minute.into(), + time.second.into(), + time.millisecond.into(), + time.microsecond.into(), + (i64::from(time.nanosecond) - offset).into(), + ); + + // b. Perform ? CheckISODaysRange(balanced.[[ISODate]]). + iso.date.is_valid_day_range()?; + + // c. Let epochNanoseconds be GetUTCEpochNanoseconds(balanced). + let ns = iso.as_nanoseconds(); + // d. If IsValidEpochNanoseconds(epochNanoseconds) is false, throw a RangeError exception. + ns.check_validity()?; + + // e. Return epochNanoseconds. + Ok(EpochNanosecondsAndOffset { + ns, + offset: timezone.get_utc_offset_for(ns.0, provider)?.into(), + }) + } + // 5. Assert: offsetBehaviour is option. + // 6. Assert: offsetOption is prefer or reject. + (_, Some(offset), OffsetDisambiguation::Prefer | OffsetDisambiguation::Reject) => { + // 7. Perform ? CheckISODaysRange(isoDate). + date.is_valid_day_range()?; + let iso = IsoDateTime::new_unchecked(date, time); + // 8. Let utcEpochNanoseconds be GetUTCEpochNanoseconds(isoDateTime). + let utc_epochs = iso.as_nanoseconds(); + // 9. Let possibleEpochNs be ? GetPossibleEpochNanoseconds(timeZone, isoDateTime). + let possible_nanos = timezone.get_possible_epoch_ns_for(iso, provider)?; + + // 10. For each element candidate of possibleEpochNs, do + for candidate in possible_nanos.as_slice() { + // a. Let candidateOffset be utcEpochNanoseconds - candidate. + let candidate_offset = utc_epochs.0 - candidate.ns.0; + // b. If candidateOffset = offsetNanoseconds, then + if candidate_offset == offset.into() { + // i. Return candidate. + return Ok(*candidate); + } + // c. If matchBehaviour is match-minutes, then + if match_minutes { + // i. Let roundedCandidateNanoseconds be RoundNumberToIncrement(candidateOffset, 60 × 10**9, half-expand). + let rounded_candidate = + IncrementRounder::from_signed_num(candidate_offset, NS_PER_MINUTE_NONZERO)? + .round(RoundingMode::HalfExpand); + // ii. If roundedCandidateNanoseconds = offsetNanoseconds, then + if rounded_candidate == offset.into() { + // 1. Return candidate. + return Ok(*candidate); + } + } + } + + // 11. If offsetOption is reject, throw a RangeError exception. + if offset_option == OffsetDisambiguation::Reject { + return Err( + TemporalError::range().with_enum(ErrorMessage::OffsetNeedsDisambiguation) + ); + } + // 12. Return ? DisambiguatePossibleEpochNanoseconds(possibleEpochNs, timeZone, isoDateTime, disambiguation). + timezone.disambiguate_possible_epoch_nanos( + possible_nanos, + iso, + disambiguation, + provider, + ) + } + } +} + +// Formatting utils +const NS_PER_MINUTE: i128 = 60_000_000_000; +// Once MSRV is 1.83 we can update this to just calling .unwrap() +const NS_PER_MINUTE_NONZERO: NonZeroU128 = if let Some(nz) = NonZeroU128::new(NS_PER_MINUTE as u128) +{ + nz +} else { + NonZeroU128::MIN +}; + +pub(crate) fn nanoseconds_to_formattable_offset_minutes( + nanoseconds: i128, +) -> TemporalResult<(Sign, u8, u8)> { + // Per 11.1.7 this should be rounding + let nanoseconds = IncrementRounder::from_signed_num(nanoseconds, NS_PER_MINUTE_NONZERO)? + .round(RoundingMode::HalfExpand); + let offset_minutes = (nanoseconds / NS_PER_MINUTE) as i32; + let sign = if offset_minutes < 0 { + Sign::Negative + } else { + Sign::Positive + }; + let hour = offset_minutes.abs() / 60; + let minute = offset_minutes.abs() % 60; + Ok((sign, hour as u8, minute as u8)) +} diff --git a/src/builtins/core/zoned_date_time/tests.rs b/crates/temporal/src/builtins/core/zoned_date_time/tests.rs similarity index 100% rename from src/builtins/core/zoned_date_time/tests.rs rename to crates/temporal/src/builtins/core/zoned_date_time/tests.rs diff --git a/src/builtins/mod.rs b/crates/temporal/src/builtins/mod.rs similarity index 100% rename from src/builtins/mod.rs rename to crates/temporal/src/builtins/mod.rs diff --git a/src/error.rs b/crates/temporal/src/error.rs similarity index 100% rename from src/error.rs rename to crates/temporal/src/error.rs diff --git a/src/host.rs b/crates/temporal/src/host.rs similarity index 96% rename from src/host.rs rename to crates/temporal/src/host.rs index a6f684527..1b0b4867a 100644 --- a/src/host.rs +++ b/crates/temporal/src/host.rs @@ -41,8 +41,8 @@ pub trait HostHooks: HostClock + HostTimeZone { /// /// ``` /// # #[cfg(feature = "compiled_data")] { -/// use temporal_rs::host::EmptyHostSystem; -/// use temporal_rs::now::Now; +/// use temporal::host::EmptyHostSystem; +/// use temporal::now::Now; /// /// let now = Now::new(EmptyHostSystem); /// let zoned_date_time = now.zoned_date_time_iso(None).unwrap(); diff --git a/src/iso.rs b/crates/temporal/src/iso.rs similarity index 100% rename from src/iso.rs rename to crates/temporal/src/iso.rs diff --git a/crates/temporal/src/lib.rs b/crates/temporal/src/lib.rs new file mode 100644 index 000000000..36b1db8b2 --- /dev/null +++ b/crates/temporal/src/lib.rs @@ -0,0 +1,504 @@ +//! The Rust implementation of ECMAScript's Temporal +//! +//! Temporal is date and time library that provides support for calendrical calculations +//! and time zones based on the ECMAScript Temporal specification. +//! +//! temporal is designed with general purpose Rust usage and ECMAScript implementations +//! in mind, meaning that temporal can be used to implement the Temporal built-ins +//! in an ECMAScript implementation or generally used as a date and time library in a +//! Rust project. +//! +//! temporal is the primary library for the Temporal API implementation in Boa, Kiesel, +//! and V8. Each of these engines pass the large ECMAScript conformance test suite for +//! the specification. +//! +//! ## Why use temporal? +//! +//! As previously mentioned, Temporal is an API for working with date and time in +//! a calendar and time zone aware manner. This means that calendar and time zone support +//! are first class in Temporal as well as in temporal. +//! +//! For instance, converting between calendars is as simple as providing the calendar as +//! shown below. +//! +//! ```rust +//! use temporal::{PlainDate, Calendar}; +//! use tinystr::tinystr; +//! use core::str::FromStr; +//! +//! // Create a date with an ISO calendar +//! let iso8601_date = PlainDate::try_new_iso(2025, 3, 3).unwrap(); +//! +//! // Create a new date with the japanese calendar +//! let japanese_date = iso8601_date.with_calendar(Calendar::JAPANESE); +//! assert_eq!(japanese_date.era(), Some(tinystr!(16, "reiwa"))); +//! assert_eq!(japanese_date.era_year(), Some(7)); +//! assert_eq!(japanese_date.month(), 3) +//! ``` +//! +//! Beyond the general calendar use case, temporal has robust support for +//! time zones which can generally by applied to a `PlainDate` via [`ZonedDateTime`]. +//! +//! **Important Note:** The below API is enabled with the +//! `compiled_data` feature flag. +//! +//! ```rust +//! # #[cfg(feature = "compiled_data")] { +//! use temporal::{ZonedDateTime, TimeZone}; +//! use temporal::options::{Disambiguation, OffsetDisambiguation}; +//! +//! let zdt = ZonedDateTime::from_utf8( +//! b"2025-03-01T11:16:10Z[America/Chicago][u-ca=iso8601]", +//! Disambiguation::Compatible, +//! OffsetDisambiguation::Reject +//! ).unwrap(); +//! assert_eq!(zdt.year(), 2025); +//! assert_eq!(zdt.month(), 3); +//! assert_eq!(zdt.day(), 1); +//! // Using Z and a timezone projects a UTC datetime into the timezone. +//! assert_eq!(zdt.hour(), 5); +//! assert_eq!(zdt.minute(), 16); +//! assert_eq!(zdt.second(), 10); +//! +//! // You can also update a time zone easily. +//! let zurich_zone = TimeZone::try_from_str("Europe/Zurich").unwrap(); +//! let zdt_zurich = zdt.with_timezone(zurich_zone).unwrap(); +//! assert_eq!(zdt_zurich.year(), 2025); +//! assert_eq!(zdt_zurich.month(), 3); +//! assert_eq!(zdt_zurich.day(), 1); +//! assert_eq!(zdt_zurich.hour(), 12); +//! assert_eq!(zdt_zurich.minute(), 16); +//! assert_eq!(zdt_zurich.second(), 10); +//! +//! # } +//! ``` +//! +//! ## Overview +//! +//! temporal provides 8 core types for working with date and time. The core types are: +//! +//! - [PlainDate] +//! - [PlainTime] +//! - [PlainDateTime] +//! - [ZonedDateTime] +//! - [Instant] +//! - [Duration] +//! - [PlainYearMonth] +//! - [PlainMonthDay] +//! +//! In addition to these types, there are the [`Calendar`] and [`TimeZone`] type that +//! support the calendars or time zones. The specific support for calendars and time +//! zones per type are as follows. +//! +//! | Temporal type | Category | Calendar support | Time zone support | +//! |----------------|--------------------------------------|--------------------|--------------------| +//! | PlainDate | Calendar date | yes | no | +//! | PlainTime | Wall-clock time | no | no | +//! | PlainDateTime | Calendar date and wall-clock time | yes | no | +//! | ZonedDateTime | Calendar date and exact time | yes | yes | +//! | Instant | Exact time | no | no | +//! | Duration | None | no | no | +//! | PlainYearMonth | Calendar date | yes | no | +//! | PlainMonthDay | Calendar date | yes | no | +//! +//! There is also the [`Now`][now::Now], which provides access to the current host system +//! time. This can then be used to map to any of the above Temporal types. +//! +//! **Important Note:** the below example is only available with the `sys` and +//! `compiled_data` feature flag enabled. +//! +//! ```rust +//! # #[cfg(all(feature = "sys", feature = "compiled_data"))] { +//! use core::cmp::Ordering; +//! use temporal::{Temporal, Calendar, ZonedDateTime}; +//! let current_instant = Temporal::utc_now().instant().unwrap(); +//! let current_zoned_date_time = Temporal::utc_now().zoned_date_time_iso(None).unwrap(); +//! +//! /// Create a `ZonedDateTime` from the requested instant. +//! let zoned_date_time_from_instant = ZonedDateTime::try_new( +//! current_instant.as_i128(), +//! *current_zoned_date_time.time_zone(), +//! Calendar::ISO, +//! ).unwrap(); +//! +//! // The two `ZonedDateTime` will be equal down to the second. +//! assert_eq!(current_zoned_date_time.year(), zoned_date_time_from_instant.year()); +//! assert_eq!(current_zoned_date_time.month(), zoned_date_time_from_instant.month()); +//! assert_eq!(current_zoned_date_time.day(), zoned_date_time_from_instant.day()); +//! assert_eq!(current_zoned_date_time.hour(), zoned_date_time_from_instant.hour()); +//! assert_eq!(current_zoned_date_time.minute(), zoned_date_time_from_instant.minute()); +//! assert_eq!(current_zoned_date_time.second(), zoned_date_time_from_instant.second()); +//! +//! // The `Instant` reading that occurred first will be less than the ZonedDateTime +//! // reading +//! assert_eq!( +//! zoned_date_time_from_instant.compare_instant(¤t_zoned_date_time), +//! Ordering::Less +//! ); +//! # } +//! ``` +//! +//! ## General design +//! +//! While temporal can be used in native Rust programs, the library is -- first and +//! foremost -- designed for use in ECMAScript implementations. This is not to detract +//! from temporal's use in a native Rust program, but it is important information to +//! understand in order to understand the library's architecture and general API design. +//! +//! Without default feature flags, temporal is not released with access to the host +//! environment and it does not embed any time zone data. This is important from an +//! interpreter perspective, because access to the host environment and time zone data +//! comes from the interpreter's agent, not from a dependency. +//! +//! Instead, temporal provides the [`HostHooks`][host::HostHooks] and [`TimeZoneProvider`][provider::TimeZoneProvider] +//! traits that can be implemented and provided as function arguments that temporal will +//! use to access the host system or time zone data. temporal also provides some baseline +//! implementations of the traits that can be selected from depending on application needs. +//! +//! That being said, this does not mean that everyone must implement their own trait +//! implementations for that functionality to exist, but the APIs are there for power +//! users who may need a custom host system or time zone data implementation. +//! +//! A default host system and time zone provider have been implemented and are automatically +//! active as default features. +//! +//! ### A quick walkthrough +//! +//! For instance, the examples thus far have been using the general usage Rust API with +//! the `sys` and `compiled_data` feature. +//! +//! For instance, let's manually write our [`Now`][now::Now] implementation instead of using +//! [`Temporal::now()`] with an empty host system implementation. +//! +//! ```rust +//! # #[cfg(feature = "compiled_data")] { +//! use temporal::{Instant, now::Now, host::EmptyHostSystem}; +//! +//! // The empty host system is a system implementation HostHooks that always +//! // returns the UNIX_EPOCH and the "+00:00" time zone. +//! let now = Now::new(EmptyHostSystem); +//! let time_zone = now.time_zone().unwrap(); +//! assert_eq!(time_zone.identifier().unwrap(), "+00:00"); +//! let now = Now::new(EmptyHostSystem); +//! assert_eq!(now.instant(), Instant::try_new(0)); +//! # } +//! ``` +//! +//! However, even in our above example, we cheated a bit. We were still relying on the +//! `compiled_data` feature flag that provided time zone data for us. Let's try again, +//! but this time without the feature flag. +//! +//! ```rust +//! # #[cfg(feature = "tzdb")] { +//! use temporal::{Instant, now::Now, host::EmptyHostSystem}; +//! use timezone_provider::tzif::CompiledTzdbProvider; +//! +//! let provider = CompiledTzdbProvider::default(); +//! +//! // The empty host system is a system implementation HostHooks that always +//! // returns the UNIX_EPOCH and the "+00:00" time zone. +//! let now = Now::new(EmptyHostSystem); +//! let time_zone = now.time_zone_with_provider(&provider).unwrap(); +//! assert_eq!(time_zone.identifier_with_provider(&provider).unwrap(), "+00:00"); +//! +//! let now = Now::new(EmptyHostSystem); +//! assert_eq!(now.instant(), Instant::try_new(0)); +//! # } +//! ``` +//! +//! Now -- pun only partially intended -- we've successfully written a no-default-features +//! example with temporal! +//! +//! ### What have we learned going over this all this? +//! +//! First, any API that has the suffix `_with_provider` is a power user API for supplying +//! a custom or specific time zone data provider. Furthermore, any API that has a +//! `_with_provider` suffix will also have a version without the suffix that automagically +//! provides time zone data for you. +//! +//! Finally, sourcing time zone data is a very scary (but fun!) business. If you're interested +//! in learning more, feel free to check out the `timezone_provider` crate! +//! +//! With any luck, this also highlights the general design of temporal. It provides a +//! general usage API that aligns with the Temporal specification while also being +//! flexible enough to provide an power user to take control of their host system access +//! and time zone data sourcing as needed. +//! +//! ## Formatting +//! +//! temporal adheres to Temporal grammar, which is a strict version of +//! [RFC9557's IXDTF][ixdtf]. RFC9557 is an update to RFC3339 that adds +//! extensions to the format. +//! +//! ## More information +//! +//! [`Temporal`][proposal] is the Stage 4 proposal for ECMAScript that +//! provides new JS objects and functions for working with dates and +//! times that fully supports time zones and non-gregorian calendars. +//! +//! This library's primary development source is the Temporal +//! Proposal [specification][spec]. +//! +//! [ixdtf]: https://www.rfc-editor.org/rfc/rfc9557.txt +//! [proposal]: https://github.com/tc39/proposal-temporal +//! [spec]: https://tc39.es/proposal-temporal/ +#![doc( + html_logo_url = "https://raw.githubusercontent.com/boa-dev/boa/main/assets/logo.svg", + html_favicon_url = "https://raw.githubusercontent.com/boa-dev/boa/main/assets/logo.svg" +)] +#![no_std] +#![cfg_attr(not(test), forbid(clippy::unwrap_used))] +// We wish to reduce the number of panics, .expect() must be justified +// to never occur. Opt to have GIGO or .temporal_unwrap() behavior where possible. +#![cfg_attr(not(test), warn(clippy::expect_used, clippy::indexing_slicing))] +#![allow( + // Currently throws a false positive regarding dependencies that are only used in benchmarks. + unused_crate_dependencies, + clippy::module_name_repetitions, + clippy::redundant_pub_crate, + clippy::too_many_lines, + clippy::cognitive_complexity, + clippy::missing_errors_doc, + clippy::let_unit_value, + clippy::option_if_let_else, +)] +#![forbid(unsafe_code)] + +extern crate alloc; +extern crate core; + +#[cfg(any(test, feature = "std"))] +extern crate std; + +pub mod error; +pub mod host; +pub mod iso; +pub mod options; +pub mod parsers; +pub mod primitive; +pub mod provider; + +#[cfg(feature = "sys")] +pub mod sys; + +mod builtins; + +#[cfg(feature = "tzdb")] +pub(crate) mod tzdb; + +#[doc(hidden)] +pub(crate) mod rounding; +#[doc(hidden)] +pub(crate) mod utils; + +use core::cmp::Ordering; + +// TODO: evaluate positives and negatives of using tinystr. Re-exporting +// tinystr as a convenience, as it is currently tied into the API. +/// Re-export of `TinyAsciiStr` from `tinystr`. +pub use tinystr::TinyAsciiStr; + +/// The `Temporal` result type +pub type TemporalResult = Result; + +#[doc(inline)] +pub use error::TemporalError; + +#[cfg(feature = "sys")] +#[doc(inline)] +pub use sys::Temporal; + +pub mod partial { + //! Partial date and time component records + //! + //! The partial records are `temporal`'s method of addressing + //! `TemporalFields` in the specification. + pub use crate::builtins::core::{ + PartialDate, PartialDateTime, PartialDuration, PartialTime, PartialYearMonth, + PartialZonedDateTime, + }; +} + +pub mod parsed_intermediates; + +// TODO: Potentially bikeshed how `EpochNanoseconds` should be exported. +/// A module for structs related to the UNIX epoch +pub mod unix_time { + pub use timezone_provider::epoch_nanoseconds::EpochNanoseconds; +} + +/// The `Now` module includes type for building a Now +pub mod now { + pub use crate::builtins::Now; +} + +/// Duration related types +pub mod duration { + pub use crate::builtins::DateDuration; +} + +/// Calendar field records +pub mod fields { + pub use crate::builtins::{ + calendar::{CalendarFields, YearMonthCalendarFields}, + DateTimeFields, ZonedDateTimeFields, + }; +} + +// TODO: Should we be exporting MonthCode and UtcOffset here. +pub use crate::builtins::{ + calendar::{Calendar, MonthCode}, + core::time_zone::{TimeZone, UtcOffset}, + Duration, Instant, PlainDate, PlainDateTime, PlainMonthDay, PlainTime, PlainYearMonth, + ZonedDateTime, +}; + +/// A library specific trait for unwrapping assertions. +pub(crate) trait TemporalUnwrap { + type Output; + + /// `temporal` based assertion for unwrapping. This will panic in + /// debug builds, but throws error during runtime. + fn temporal_unwrap(self) -> TemporalResult; +} + +impl TemporalUnwrap for Option { + type Output = T; + + fn temporal_unwrap(self) -> TemporalResult { + debug_assert!(self.is_some()); + self.ok_or(TemporalError::assert()) + } +} + +impl TemporalUnwrap for TemporalResult { + type Output = T; + + fn temporal_unwrap(self) -> Self { + debug_assert!(self.is_ok(), "Assertion failed: {:?}", self.err()); + self.map_err(|e| TemporalError::assert().with_message(e.into_message())) + } +} + +#[doc(hidden)] +#[macro_export] +macro_rules! temporal_assert { + ($condition:expr $(,)*) => { + if !$condition { + return Err(TemporalError::assert()); + } + }; + ($condition:expr, $($args:tt)+) => { + if !$condition { + #[cfg(feature = "log")] + log::error!($($args)+); + return Err(TemporalError::assert()); + } + }; +} + +// TODO: Determine final home or leave in the top level? ops::Sign, +// types::Sign, etc. +/// A general Sign type. +#[repr(i8)] +#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] +pub enum Sign { + #[default] + Positive = 1, + Zero = 0, + Negative = -1, +} + +impl From for Sign { + fn from(value: i8) -> Self { + match value.cmp(&0) { + Ordering::Greater => Self::Positive, + Ordering::Equal => Self::Zero, + Ordering::Less => Self::Negative, + } + } +} + +impl Sign { + /// Coerces the current `Sign` to be either negative or positive. + pub(crate) const fn as_sign_multiplier(&self) -> i8 { + if matches!(self, Self::Zero) { + return 1; + } + *self as i8 + } + + pub(crate) fn negate(&self) -> Sign { + Sign::from(-(*self as i8)) + } + + pub(crate) fn to_nonzero_sign(self) -> NonZeroSign { + self.into() + } +} + +impl PartialEq for Sign { + fn eq(&self, other: &NonZeroSign) -> bool { + *self as i8 == *other as i8 + } +} + +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] +pub(crate) enum NonZeroSign { + Positive = 1, + Negative = -1, +} + +impl NonZeroSign { + pub(crate) const fn as_sign_multiplier(&self) -> i8 { + *self as i8 + } + + /// Negate the current sign + pub(crate) fn negate(&self) -> NonZeroSign { + Sign::from(-(*self as i8)).into() + } +} + +impl From for NonZeroSign { + fn from(sign: Sign) -> Self { + match sign { + Sign::Positive | Sign::Zero => NonZeroSign::Positive, + Sign::Negative => NonZeroSign::Negative, + } + } +} + +impl From for NonZeroSign { + fn from(value: i8) -> Self { + Sign::from(value).to_nonzero_sign() + } +} + +impl PartialEq for NonZeroSign { + fn eq(&self, other: &Sign) -> bool { + *self as i8 == *other as i8 + } +} + +// ==== Relevant numeric constants ==== + +/// Nanoseconds per day constant: 8.64e+13 +#[doc(hidden)] +pub const NS_PER_DAY: u64 = MS_PER_DAY as u64 * 1_000_000; +#[doc(hidden)] +pub const NS_PER_DAY_NONZERO: core::num::NonZeroU128 = + if let Some(nz) = core::num::NonZeroU128::new(NS_PER_DAY as u128) { + nz + } else { + unreachable!() + }; +/// Milliseconds per day constant: 8.64e+7 +#[doc(hidden)] +pub const MS_PER_DAY: u32 = 24 * 60 * 60 * 1000; +/// Max Instant nanosecond constant +#[doc(hidden)] +pub(crate) const NS_MAX_INSTANT: i128 = NS_PER_DAY as i128 * 100_000_000i128; +/// Min Instant nanosecond constant +#[doc(hidden)] +pub(crate) const NS_MIN_INSTANT: i128 = -NS_MAX_INSTANT; diff --git a/src/options.rs b/crates/temporal/src/options.rs similarity index 100% rename from src/options.rs rename to crates/temporal/src/options.rs diff --git a/src/options/increment.rs b/crates/temporal/src/options/increment.rs similarity index 100% rename from src/options/increment.rs rename to crates/temporal/src/options/increment.rs diff --git a/src/options/relative_to.rs b/crates/temporal/src/options/relative_to.rs similarity index 100% rename from src/options/relative_to.rs rename to crates/temporal/src/options/relative_to.rs diff --git a/src/parsed_intermediates.rs b/crates/temporal/src/parsed_intermediates.rs similarity index 100% rename from src/parsed_intermediates.rs rename to crates/temporal/src/parsed_intermediates.rs diff --git a/src/parsers.rs b/crates/temporal/src/parsers.rs similarity index 100% rename from src/parsers.rs rename to crates/temporal/src/parsers.rs diff --git a/src/parsers/time_zone.rs b/crates/temporal/src/parsers/time_zone.rs similarity index 100% rename from src/parsers/time_zone.rs rename to crates/temporal/src/parsers/time_zone.rs diff --git a/src/primitive.rs b/crates/temporal/src/primitive.rs similarity index 100% rename from src/primitive.rs rename to crates/temporal/src/primitive.rs diff --git a/src/provider.rs b/crates/temporal/src/provider.rs similarity index 100% rename from src/provider.rs rename to crates/temporal/src/provider.rs diff --git a/src/rounding.rs b/crates/temporal/src/rounding.rs similarity index 100% rename from src/rounding.rs rename to crates/temporal/src/rounding.rs diff --git a/src/sys.rs b/crates/temporal/src/sys.rs similarity index 100% rename from src/sys.rs rename to crates/temporal/src/sys.rs diff --git a/src/tzdb.rs b/crates/temporal/src/tzdb.rs similarity index 100% rename from src/tzdb.rs rename to crates/temporal/src/tzdb.rs diff --git a/src/utils.rs b/crates/temporal/src/utils.rs similarity index 100% rename from src/utils.rs rename to crates/temporal/src/utils.rs diff --git a/temporal_capi/.gitattributes b/crates/temporal_capi/.gitattributes similarity index 100% rename from temporal_capi/.gitattributes rename to crates/temporal_capi/.gitattributes diff --git a/temporal_capi/.gitignore b/crates/temporal_capi/.gitignore similarity index 100% rename from temporal_capi/.gitignore rename to crates/temporal_capi/.gitignore diff --git a/crates/temporal_capi/Cargo.toml b/crates/temporal_capi/Cargo.toml new file mode 100644 index 000000000..552030445 --- /dev/null +++ b/crates/temporal_capi/Cargo.toml @@ -0,0 +1,36 @@ +[package] +name = "temporal_capi" +description = "C interface to temporal" +edition.workspace = true +version.workspace = true +rust-version.workspace = true +authors.workspace = true +license.workspace = true +repository.workspace = true +include = [ + "bindings/**/*", + "src/**/*", + "tests/**/*", + "Cargo.toml", + "LICENSE-Apache", + "LICENSE-MIT", + "README.md", +] + +[dependencies] +diplomat.workspace = true +diplomat-runtime.workspace = true +num-traits.workspace = true +temporal = { workspace = true, default-features = false } +timezone_provider = { workspace = true, default-features = false } +icu_calendar.workspace = true +icu_locale_core.workspace = true +writeable.workspace = true +zoneinfo64 = { workspace = true, optional = true } + +[features] +compiled_data = ["temporal/compiled_data"] +zoneinfo64 = ["dep:zoneinfo64", "timezone_provider/zoneinfo64"] + +[package.metadata.docs.rs] +all-features = true diff --git a/temporal_capi/LICENSE-Apache b/crates/temporal_capi/LICENSE-Apache similarity index 100% rename from temporal_capi/LICENSE-Apache rename to crates/temporal_capi/LICENSE-Apache diff --git a/temporal_capi/LICENSE-MIT b/crates/temporal_capi/LICENSE-MIT similarity index 100% rename from temporal_capi/LICENSE-MIT rename to crates/temporal_capi/LICENSE-MIT diff --git a/crates/temporal_capi/README.md b/crates/temporal_capi/README.md new file mode 100644 index 000000000..416b3ac3c --- /dev/null +++ b/crates/temporal_capi/README.md @@ -0,0 +1,14 @@ +# temporal_capi [![crates.io](https://img.shields.io/crates/v/temporal_capi)](https://crates.io/crates/temporal_capi) + + + +This crate contains the original definitions of [`temporal`] APIs consumed by [Diplomat](https://github.com/rust-diplomat/diplomat) +to generate FFI bindings. We currently generate bindings for C++ and `extern "C"` APIs. + +The APIs exposed by this crate are *not intended to be used from Rust* and as such this crate may change its Rust API +across compatible semver versions. In contrast, the `extern "C"` APIs and all the language bindings are stable within +the same major semver version. + +[`temporal`]: https://crates.io/crates/temporal + + diff --git a/temporal_capi/bindings/c/AnyCalendarKind.d.h b/crates/temporal_capi/bindings/c/AnyCalendarKind.d.h similarity index 100% rename from temporal_capi/bindings/c/AnyCalendarKind.d.h rename to crates/temporal_capi/bindings/c/AnyCalendarKind.d.h diff --git a/temporal_capi/bindings/c/AnyCalendarKind.h b/crates/temporal_capi/bindings/c/AnyCalendarKind.h similarity index 100% rename from temporal_capi/bindings/c/AnyCalendarKind.h rename to crates/temporal_capi/bindings/c/AnyCalendarKind.h diff --git a/temporal_capi/bindings/c/ArithmeticOverflow.d.h b/crates/temporal_capi/bindings/c/ArithmeticOverflow.d.h similarity index 100% rename from temporal_capi/bindings/c/ArithmeticOverflow.d.h rename to crates/temporal_capi/bindings/c/ArithmeticOverflow.d.h diff --git a/temporal_capi/bindings/c/ArithmeticOverflow.h b/crates/temporal_capi/bindings/c/ArithmeticOverflow.h similarity index 100% rename from temporal_capi/bindings/c/ArithmeticOverflow.h rename to crates/temporal_capi/bindings/c/ArithmeticOverflow.h diff --git a/temporal_capi/bindings/c/Calendar.d.h b/crates/temporal_capi/bindings/c/Calendar.d.h similarity index 100% rename from temporal_capi/bindings/c/Calendar.d.h rename to crates/temporal_capi/bindings/c/Calendar.d.h diff --git a/temporal_capi/bindings/c/Calendar.h b/crates/temporal_capi/bindings/c/Calendar.h similarity index 100% rename from temporal_capi/bindings/c/Calendar.h rename to crates/temporal_capi/bindings/c/Calendar.h diff --git a/temporal_capi/bindings/c/DateDuration.d.h b/crates/temporal_capi/bindings/c/DateDuration.d.h similarity index 100% rename from temporal_capi/bindings/c/DateDuration.d.h rename to crates/temporal_capi/bindings/c/DateDuration.d.h diff --git a/temporal_capi/bindings/c/DateDuration.h b/crates/temporal_capi/bindings/c/DateDuration.h similarity index 100% rename from temporal_capi/bindings/c/DateDuration.h rename to crates/temporal_capi/bindings/c/DateDuration.h diff --git a/temporal_capi/bindings/c/DifferenceSettings.d.h b/crates/temporal_capi/bindings/c/DifferenceSettings.d.h similarity index 100% rename from temporal_capi/bindings/c/DifferenceSettings.d.h rename to crates/temporal_capi/bindings/c/DifferenceSettings.d.h diff --git a/temporal_capi/bindings/c/DifferenceSettings.h b/crates/temporal_capi/bindings/c/DifferenceSettings.h similarity index 100% rename from temporal_capi/bindings/c/DifferenceSettings.h rename to crates/temporal_capi/bindings/c/DifferenceSettings.h diff --git a/temporal_capi/bindings/c/Disambiguation.d.h b/crates/temporal_capi/bindings/c/Disambiguation.d.h similarity index 100% rename from temporal_capi/bindings/c/Disambiguation.d.h rename to crates/temporal_capi/bindings/c/Disambiguation.d.h diff --git a/temporal_capi/bindings/c/Disambiguation.h b/crates/temporal_capi/bindings/c/Disambiguation.h similarity index 100% rename from temporal_capi/bindings/c/Disambiguation.h rename to crates/temporal_capi/bindings/c/Disambiguation.h diff --git a/temporal_capi/bindings/c/DisplayCalendar.d.h b/crates/temporal_capi/bindings/c/DisplayCalendar.d.h similarity index 100% rename from temporal_capi/bindings/c/DisplayCalendar.d.h rename to crates/temporal_capi/bindings/c/DisplayCalendar.d.h diff --git a/temporal_capi/bindings/c/DisplayCalendar.h b/crates/temporal_capi/bindings/c/DisplayCalendar.h similarity index 100% rename from temporal_capi/bindings/c/DisplayCalendar.h rename to crates/temporal_capi/bindings/c/DisplayCalendar.h diff --git a/temporal_capi/bindings/c/DisplayOffset.d.h b/crates/temporal_capi/bindings/c/DisplayOffset.d.h similarity index 100% rename from temporal_capi/bindings/c/DisplayOffset.d.h rename to crates/temporal_capi/bindings/c/DisplayOffset.d.h diff --git a/temporal_capi/bindings/c/DisplayOffset.h b/crates/temporal_capi/bindings/c/DisplayOffset.h similarity index 100% rename from temporal_capi/bindings/c/DisplayOffset.h rename to crates/temporal_capi/bindings/c/DisplayOffset.h diff --git a/temporal_capi/bindings/c/DisplayTimeZone.d.h b/crates/temporal_capi/bindings/c/DisplayTimeZone.d.h similarity index 100% rename from temporal_capi/bindings/c/DisplayTimeZone.d.h rename to crates/temporal_capi/bindings/c/DisplayTimeZone.d.h diff --git a/temporal_capi/bindings/c/DisplayTimeZone.h b/crates/temporal_capi/bindings/c/DisplayTimeZone.h similarity index 100% rename from temporal_capi/bindings/c/DisplayTimeZone.h rename to crates/temporal_capi/bindings/c/DisplayTimeZone.h diff --git a/temporal_capi/bindings/c/Duration.d.h b/crates/temporal_capi/bindings/c/Duration.d.h similarity index 100% rename from temporal_capi/bindings/c/Duration.d.h rename to crates/temporal_capi/bindings/c/Duration.d.h diff --git a/temporal_capi/bindings/c/Duration.h b/crates/temporal_capi/bindings/c/Duration.h similarity index 100% rename from temporal_capi/bindings/c/Duration.h rename to crates/temporal_capi/bindings/c/Duration.h diff --git a/temporal_capi/bindings/c/ErrorKind.d.h b/crates/temporal_capi/bindings/c/ErrorKind.d.h similarity index 100% rename from temporal_capi/bindings/c/ErrorKind.d.h rename to crates/temporal_capi/bindings/c/ErrorKind.d.h diff --git a/temporal_capi/bindings/c/ErrorKind.h b/crates/temporal_capi/bindings/c/ErrorKind.h similarity index 100% rename from temporal_capi/bindings/c/ErrorKind.h rename to crates/temporal_capi/bindings/c/ErrorKind.h diff --git a/temporal_capi/bindings/c/I128Nanoseconds.d.h b/crates/temporal_capi/bindings/c/I128Nanoseconds.d.h similarity index 100% rename from temporal_capi/bindings/c/I128Nanoseconds.d.h rename to crates/temporal_capi/bindings/c/I128Nanoseconds.d.h diff --git a/temporal_capi/bindings/c/I128Nanoseconds.h b/crates/temporal_capi/bindings/c/I128Nanoseconds.h similarity index 100% rename from temporal_capi/bindings/c/I128Nanoseconds.h rename to crates/temporal_capi/bindings/c/I128Nanoseconds.h diff --git a/temporal_capi/bindings/c/Instant.d.h b/crates/temporal_capi/bindings/c/Instant.d.h similarity index 100% rename from temporal_capi/bindings/c/Instant.d.h rename to crates/temporal_capi/bindings/c/Instant.d.h diff --git a/temporal_capi/bindings/c/Instant.h b/crates/temporal_capi/bindings/c/Instant.h similarity index 100% rename from temporal_capi/bindings/c/Instant.h rename to crates/temporal_capi/bindings/c/Instant.h diff --git a/temporal_capi/bindings/c/OffsetDisambiguation.d.h b/crates/temporal_capi/bindings/c/OffsetDisambiguation.d.h similarity index 100% rename from temporal_capi/bindings/c/OffsetDisambiguation.d.h rename to crates/temporal_capi/bindings/c/OffsetDisambiguation.d.h diff --git a/temporal_capi/bindings/c/OffsetDisambiguation.h b/crates/temporal_capi/bindings/c/OffsetDisambiguation.h similarity index 100% rename from temporal_capi/bindings/c/OffsetDisambiguation.h rename to crates/temporal_capi/bindings/c/OffsetDisambiguation.h diff --git a/temporal_capi/bindings/c/OwnedRelativeTo.d.h b/crates/temporal_capi/bindings/c/OwnedRelativeTo.d.h similarity index 100% rename from temporal_capi/bindings/c/OwnedRelativeTo.d.h rename to crates/temporal_capi/bindings/c/OwnedRelativeTo.d.h diff --git a/temporal_capi/bindings/c/OwnedRelativeTo.h b/crates/temporal_capi/bindings/c/OwnedRelativeTo.h similarity index 100% rename from temporal_capi/bindings/c/OwnedRelativeTo.h rename to crates/temporal_capi/bindings/c/OwnedRelativeTo.h diff --git a/temporal_capi/bindings/c/ParsedDate.d.h b/crates/temporal_capi/bindings/c/ParsedDate.d.h similarity index 100% rename from temporal_capi/bindings/c/ParsedDate.d.h rename to crates/temporal_capi/bindings/c/ParsedDate.d.h diff --git a/temporal_capi/bindings/c/ParsedDate.h b/crates/temporal_capi/bindings/c/ParsedDate.h similarity index 100% rename from temporal_capi/bindings/c/ParsedDate.h rename to crates/temporal_capi/bindings/c/ParsedDate.h diff --git a/temporal_capi/bindings/c/ParsedDateTime.d.h b/crates/temporal_capi/bindings/c/ParsedDateTime.d.h similarity index 100% rename from temporal_capi/bindings/c/ParsedDateTime.d.h rename to crates/temporal_capi/bindings/c/ParsedDateTime.d.h diff --git a/temporal_capi/bindings/c/ParsedDateTime.h b/crates/temporal_capi/bindings/c/ParsedDateTime.h similarity index 100% rename from temporal_capi/bindings/c/ParsedDateTime.h rename to crates/temporal_capi/bindings/c/ParsedDateTime.h diff --git a/temporal_capi/bindings/c/ParsedZonedDateTime.d.h b/crates/temporal_capi/bindings/c/ParsedZonedDateTime.d.h similarity index 100% rename from temporal_capi/bindings/c/ParsedZonedDateTime.d.h rename to crates/temporal_capi/bindings/c/ParsedZonedDateTime.d.h diff --git a/temporal_capi/bindings/c/ParsedZonedDateTime.h b/crates/temporal_capi/bindings/c/ParsedZonedDateTime.h similarity index 100% rename from temporal_capi/bindings/c/ParsedZonedDateTime.h rename to crates/temporal_capi/bindings/c/ParsedZonedDateTime.h diff --git a/temporal_capi/bindings/c/PartialDate.d.h b/crates/temporal_capi/bindings/c/PartialDate.d.h similarity index 100% rename from temporal_capi/bindings/c/PartialDate.d.h rename to crates/temporal_capi/bindings/c/PartialDate.d.h diff --git a/temporal_capi/bindings/c/PartialDate.h b/crates/temporal_capi/bindings/c/PartialDate.h similarity index 100% rename from temporal_capi/bindings/c/PartialDate.h rename to crates/temporal_capi/bindings/c/PartialDate.h diff --git a/temporal_capi/bindings/c/PartialDateTime.d.h b/crates/temporal_capi/bindings/c/PartialDateTime.d.h similarity index 100% rename from temporal_capi/bindings/c/PartialDateTime.d.h rename to crates/temporal_capi/bindings/c/PartialDateTime.d.h diff --git a/temporal_capi/bindings/c/PartialDateTime.h b/crates/temporal_capi/bindings/c/PartialDateTime.h similarity index 100% rename from temporal_capi/bindings/c/PartialDateTime.h rename to crates/temporal_capi/bindings/c/PartialDateTime.h diff --git a/temporal_capi/bindings/c/PartialDuration.d.h b/crates/temporal_capi/bindings/c/PartialDuration.d.h similarity index 100% rename from temporal_capi/bindings/c/PartialDuration.d.h rename to crates/temporal_capi/bindings/c/PartialDuration.d.h diff --git a/temporal_capi/bindings/c/PartialDuration.h b/crates/temporal_capi/bindings/c/PartialDuration.h similarity index 100% rename from temporal_capi/bindings/c/PartialDuration.h rename to crates/temporal_capi/bindings/c/PartialDuration.h diff --git a/temporal_capi/bindings/c/PartialTime.d.h b/crates/temporal_capi/bindings/c/PartialTime.d.h similarity index 100% rename from temporal_capi/bindings/c/PartialTime.d.h rename to crates/temporal_capi/bindings/c/PartialTime.d.h diff --git a/temporal_capi/bindings/c/PartialTime.h b/crates/temporal_capi/bindings/c/PartialTime.h similarity index 100% rename from temporal_capi/bindings/c/PartialTime.h rename to crates/temporal_capi/bindings/c/PartialTime.h diff --git a/temporal_capi/bindings/c/PartialZonedDateTime.d.h b/crates/temporal_capi/bindings/c/PartialZonedDateTime.d.h similarity index 100% rename from temporal_capi/bindings/c/PartialZonedDateTime.d.h rename to crates/temporal_capi/bindings/c/PartialZonedDateTime.d.h diff --git a/temporal_capi/bindings/c/PartialZonedDateTime.h b/crates/temporal_capi/bindings/c/PartialZonedDateTime.h similarity index 100% rename from temporal_capi/bindings/c/PartialZonedDateTime.h rename to crates/temporal_capi/bindings/c/PartialZonedDateTime.h diff --git a/temporal_capi/bindings/c/PlainDate.d.h b/crates/temporal_capi/bindings/c/PlainDate.d.h similarity index 100% rename from temporal_capi/bindings/c/PlainDate.d.h rename to crates/temporal_capi/bindings/c/PlainDate.d.h diff --git a/temporal_capi/bindings/c/PlainDate.h b/crates/temporal_capi/bindings/c/PlainDate.h similarity index 100% rename from temporal_capi/bindings/c/PlainDate.h rename to crates/temporal_capi/bindings/c/PlainDate.h diff --git a/temporal_capi/bindings/c/PlainDateTime.d.h b/crates/temporal_capi/bindings/c/PlainDateTime.d.h similarity index 100% rename from temporal_capi/bindings/c/PlainDateTime.d.h rename to crates/temporal_capi/bindings/c/PlainDateTime.d.h diff --git a/temporal_capi/bindings/c/PlainDateTime.h b/crates/temporal_capi/bindings/c/PlainDateTime.h similarity index 100% rename from temporal_capi/bindings/c/PlainDateTime.h rename to crates/temporal_capi/bindings/c/PlainDateTime.h diff --git a/temporal_capi/bindings/c/PlainMonthDay.d.h b/crates/temporal_capi/bindings/c/PlainMonthDay.d.h similarity index 100% rename from temporal_capi/bindings/c/PlainMonthDay.d.h rename to crates/temporal_capi/bindings/c/PlainMonthDay.d.h diff --git a/temporal_capi/bindings/c/PlainMonthDay.h b/crates/temporal_capi/bindings/c/PlainMonthDay.h similarity index 100% rename from temporal_capi/bindings/c/PlainMonthDay.h rename to crates/temporal_capi/bindings/c/PlainMonthDay.h diff --git a/temporal_capi/bindings/c/PlainTime.d.h b/crates/temporal_capi/bindings/c/PlainTime.d.h similarity index 100% rename from temporal_capi/bindings/c/PlainTime.d.h rename to crates/temporal_capi/bindings/c/PlainTime.d.h diff --git a/temporal_capi/bindings/c/PlainTime.h b/crates/temporal_capi/bindings/c/PlainTime.h similarity index 100% rename from temporal_capi/bindings/c/PlainTime.h rename to crates/temporal_capi/bindings/c/PlainTime.h diff --git a/temporal_capi/bindings/c/PlainYearMonth.d.h b/crates/temporal_capi/bindings/c/PlainYearMonth.d.h similarity index 100% rename from temporal_capi/bindings/c/PlainYearMonth.d.h rename to crates/temporal_capi/bindings/c/PlainYearMonth.d.h diff --git a/temporal_capi/bindings/c/PlainYearMonth.h b/crates/temporal_capi/bindings/c/PlainYearMonth.h similarity index 100% rename from temporal_capi/bindings/c/PlainYearMonth.h rename to crates/temporal_capi/bindings/c/PlainYearMonth.h diff --git a/temporal_capi/bindings/c/Precision.d.h b/crates/temporal_capi/bindings/c/Precision.d.h similarity index 100% rename from temporal_capi/bindings/c/Precision.d.h rename to crates/temporal_capi/bindings/c/Precision.d.h diff --git a/temporal_capi/bindings/c/Precision.h b/crates/temporal_capi/bindings/c/Precision.h similarity index 100% rename from temporal_capi/bindings/c/Precision.h rename to crates/temporal_capi/bindings/c/Precision.h diff --git a/temporal_capi/bindings/c/Provider.d.h b/crates/temporal_capi/bindings/c/Provider.d.h similarity index 100% rename from temporal_capi/bindings/c/Provider.d.h rename to crates/temporal_capi/bindings/c/Provider.d.h diff --git a/temporal_capi/bindings/c/Provider.h b/crates/temporal_capi/bindings/c/Provider.h similarity index 100% rename from temporal_capi/bindings/c/Provider.h rename to crates/temporal_capi/bindings/c/Provider.h diff --git a/temporal_capi/bindings/c/RelativeTo.d.h b/crates/temporal_capi/bindings/c/RelativeTo.d.h similarity index 100% rename from temporal_capi/bindings/c/RelativeTo.d.h rename to crates/temporal_capi/bindings/c/RelativeTo.d.h diff --git a/temporal_capi/bindings/c/RelativeTo.h b/crates/temporal_capi/bindings/c/RelativeTo.h similarity index 100% rename from temporal_capi/bindings/c/RelativeTo.h rename to crates/temporal_capi/bindings/c/RelativeTo.h diff --git a/temporal_capi/bindings/c/RoundingMode.d.h b/crates/temporal_capi/bindings/c/RoundingMode.d.h similarity index 100% rename from temporal_capi/bindings/c/RoundingMode.d.h rename to crates/temporal_capi/bindings/c/RoundingMode.d.h diff --git a/temporal_capi/bindings/c/RoundingMode.h b/crates/temporal_capi/bindings/c/RoundingMode.h similarity index 100% rename from temporal_capi/bindings/c/RoundingMode.h rename to crates/temporal_capi/bindings/c/RoundingMode.h diff --git a/temporal_capi/bindings/c/RoundingOptions.d.h b/crates/temporal_capi/bindings/c/RoundingOptions.d.h similarity index 100% rename from temporal_capi/bindings/c/RoundingOptions.d.h rename to crates/temporal_capi/bindings/c/RoundingOptions.d.h diff --git a/temporal_capi/bindings/c/RoundingOptions.h b/crates/temporal_capi/bindings/c/RoundingOptions.h similarity index 100% rename from temporal_capi/bindings/c/RoundingOptions.h rename to crates/temporal_capi/bindings/c/RoundingOptions.h diff --git a/temporal_capi/bindings/c/Sign.d.h b/crates/temporal_capi/bindings/c/Sign.d.h similarity index 100% rename from temporal_capi/bindings/c/Sign.d.h rename to crates/temporal_capi/bindings/c/Sign.d.h diff --git a/temporal_capi/bindings/c/Sign.h b/crates/temporal_capi/bindings/c/Sign.h similarity index 100% rename from temporal_capi/bindings/c/Sign.h rename to crates/temporal_capi/bindings/c/Sign.h diff --git a/temporal_capi/bindings/c/TemporalError.d.h b/crates/temporal_capi/bindings/c/TemporalError.d.h similarity index 100% rename from temporal_capi/bindings/c/TemporalError.d.h rename to crates/temporal_capi/bindings/c/TemporalError.d.h diff --git a/temporal_capi/bindings/c/TemporalError.h b/crates/temporal_capi/bindings/c/TemporalError.h similarity index 100% rename from temporal_capi/bindings/c/TemporalError.h rename to crates/temporal_capi/bindings/c/TemporalError.h diff --git a/temporal_capi/bindings/c/TimeZone.d.h b/crates/temporal_capi/bindings/c/TimeZone.d.h similarity index 100% rename from temporal_capi/bindings/c/TimeZone.d.h rename to crates/temporal_capi/bindings/c/TimeZone.d.h diff --git a/temporal_capi/bindings/c/TimeZone.h b/crates/temporal_capi/bindings/c/TimeZone.h similarity index 100% rename from temporal_capi/bindings/c/TimeZone.h rename to crates/temporal_capi/bindings/c/TimeZone.h diff --git a/temporal_capi/bindings/c/ToStringRoundingOptions.d.h b/crates/temporal_capi/bindings/c/ToStringRoundingOptions.d.h similarity index 100% rename from temporal_capi/bindings/c/ToStringRoundingOptions.d.h rename to crates/temporal_capi/bindings/c/ToStringRoundingOptions.d.h diff --git a/temporal_capi/bindings/c/ToStringRoundingOptions.h b/crates/temporal_capi/bindings/c/ToStringRoundingOptions.h similarity index 100% rename from temporal_capi/bindings/c/ToStringRoundingOptions.h rename to crates/temporal_capi/bindings/c/ToStringRoundingOptions.h diff --git a/temporal_capi/bindings/c/TransitionDirection.d.h b/crates/temporal_capi/bindings/c/TransitionDirection.d.h similarity index 100% rename from temporal_capi/bindings/c/TransitionDirection.d.h rename to crates/temporal_capi/bindings/c/TransitionDirection.d.h diff --git a/temporal_capi/bindings/c/TransitionDirection.h b/crates/temporal_capi/bindings/c/TransitionDirection.h similarity index 100% rename from temporal_capi/bindings/c/TransitionDirection.h rename to crates/temporal_capi/bindings/c/TransitionDirection.h diff --git a/temporal_capi/bindings/c/Unit.d.h b/crates/temporal_capi/bindings/c/Unit.d.h similarity index 100% rename from temporal_capi/bindings/c/Unit.d.h rename to crates/temporal_capi/bindings/c/Unit.d.h diff --git a/temporal_capi/bindings/c/Unit.h b/crates/temporal_capi/bindings/c/Unit.h similarity index 100% rename from temporal_capi/bindings/c/Unit.h rename to crates/temporal_capi/bindings/c/Unit.h diff --git a/temporal_capi/bindings/c/UnsignedRoundingMode.d.h b/crates/temporal_capi/bindings/c/UnsignedRoundingMode.d.h similarity index 100% rename from temporal_capi/bindings/c/UnsignedRoundingMode.d.h rename to crates/temporal_capi/bindings/c/UnsignedRoundingMode.d.h diff --git a/temporal_capi/bindings/c/UnsignedRoundingMode.h b/crates/temporal_capi/bindings/c/UnsignedRoundingMode.h similarity index 100% rename from temporal_capi/bindings/c/UnsignedRoundingMode.h rename to crates/temporal_capi/bindings/c/UnsignedRoundingMode.h diff --git a/temporal_capi/bindings/c/ZonedDateTime.d.h b/crates/temporal_capi/bindings/c/ZonedDateTime.d.h similarity index 100% rename from temporal_capi/bindings/c/ZonedDateTime.d.h rename to crates/temporal_capi/bindings/c/ZonedDateTime.d.h diff --git a/temporal_capi/bindings/c/ZonedDateTime.h b/crates/temporal_capi/bindings/c/ZonedDateTime.h similarity index 100% rename from temporal_capi/bindings/c/ZonedDateTime.h rename to crates/temporal_capi/bindings/c/ZonedDateTime.h diff --git a/temporal_capi/bindings/c/diplomat_runtime.h b/crates/temporal_capi/bindings/c/diplomat_runtime.h similarity index 100% rename from temporal_capi/bindings/c/diplomat_runtime.h rename to crates/temporal_capi/bindings/c/diplomat_runtime.h diff --git a/temporal_capi/bindings/cpp/temporal_rs/AnyCalendarKind.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/AnyCalendarKind.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/AnyCalendarKind.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/AnyCalendarKind.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/AnyCalendarKind.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/AnyCalendarKind.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/AnyCalendarKind.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/AnyCalendarKind.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/ArithmeticOverflow.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/ArithmeticOverflow.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/ArithmeticOverflow.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/ArithmeticOverflow.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/ArithmeticOverflow.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/ArithmeticOverflow.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/ArithmeticOverflow.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/ArithmeticOverflow.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Calendar.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Calendar.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Calendar.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Calendar.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Calendar.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Calendar.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Calendar.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Calendar.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/DateDuration.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/DateDuration.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/DateDuration.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/DateDuration.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/DateDuration.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/DateDuration.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/DateDuration.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/DateDuration.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/DifferenceSettings.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/DifferenceSettings.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/DifferenceSettings.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/DifferenceSettings.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/DifferenceSettings.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/DifferenceSettings.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/DifferenceSettings.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/DifferenceSettings.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Disambiguation.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Disambiguation.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Disambiguation.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Disambiguation.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Disambiguation.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Disambiguation.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Disambiguation.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Disambiguation.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/DisplayCalendar.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/DisplayCalendar.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/DisplayCalendar.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/DisplayCalendar.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/DisplayCalendar.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/DisplayCalendar.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/DisplayCalendar.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/DisplayCalendar.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/DisplayOffset.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/DisplayOffset.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/DisplayOffset.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/DisplayOffset.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/DisplayOffset.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/DisplayOffset.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/DisplayOffset.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/DisplayOffset.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/DisplayTimeZone.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/DisplayTimeZone.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/DisplayTimeZone.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/DisplayTimeZone.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/DisplayTimeZone.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/DisplayTimeZone.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/DisplayTimeZone.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/DisplayTimeZone.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Duration.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Duration.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Duration.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Duration.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Duration.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Duration.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Duration.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Duration.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/ErrorKind.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/ErrorKind.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/ErrorKind.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/ErrorKind.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/ErrorKind.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/ErrorKind.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/ErrorKind.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/ErrorKind.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/I128Nanoseconds.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Instant.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Instant.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Instant.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Instant.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Instant.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Instant.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Instant.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Instant.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/OffsetDisambiguation.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/OffsetDisambiguation.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/OffsetDisambiguation.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/OffsetDisambiguation.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/OffsetDisambiguation.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/OffsetDisambiguation.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/OffsetDisambiguation.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/OffsetDisambiguation.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/OwnedRelativeTo.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/OwnedRelativeTo.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/OwnedRelativeTo.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/OwnedRelativeTo.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/OwnedRelativeTo.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/OwnedRelativeTo.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/OwnedRelativeTo.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/OwnedRelativeTo.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/ParsedDate.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/ParsedDate.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/ParsedDate.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/ParsedDate.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/ParsedDate.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/ParsedDate.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/ParsedDate.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/ParsedDate.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/ParsedDateTime.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/ParsedDateTime.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/ParsedDateTime.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/ParsedDateTime.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/ParsedDateTime.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/ParsedDateTime.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/ParsedDateTime.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/ParsedDateTime.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/ParsedZonedDateTime.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/ParsedZonedDateTime.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/ParsedZonedDateTime.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/ParsedZonedDateTime.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/ParsedZonedDateTime.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/ParsedZonedDateTime.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/ParsedZonedDateTime.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/ParsedZonedDateTime.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PartialDate.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PartialDate.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PartialDate.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PartialDate.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PartialDate.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PartialDate.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PartialDate.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PartialDate.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PartialDateTime.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PartialDateTime.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PartialDateTime.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PartialDateTime.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PartialDateTime.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PartialDateTime.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PartialDateTime.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PartialDateTime.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PartialDuration.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PartialDuration.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PartialDuration.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PartialDuration.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PartialDuration.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PartialDuration.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PartialDuration.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PartialDuration.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PartialTime.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PartialTime.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PartialTime.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PartialTime.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PartialTime.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PartialTime.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PartialTime.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PartialTime.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PartialZonedDateTime.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PartialZonedDateTime.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PartialZonedDateTime.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PartialZonedDateTime.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PartialZonedDateTime.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PartialZonedDateTime.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PartialZonedDateTime.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PartialZonedDateTime.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainDate.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PlainDate.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PlainDate.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PlainDate.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainDate.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PlainDate.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PlainDate.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PlainDate.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PlainDateTime.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PlainMonthDay.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainTime.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PlainTime.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PlainTime.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PlainTime.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainTime.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PlainTime.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PlainTime.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PlainTime.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/PlainYearMonth.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Precision.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Precision.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Precision.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Precision.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Precision.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Precision.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Precision.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Precision.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Provider.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Provider.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Provider.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Provider.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Provider.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Provider.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Provider.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Provider.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/RelativeTo.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/RelativeTo.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/RelativeTo.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/RelativeTo.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/RelativeTo.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/RelativeTo.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/RelativeTo.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/RelativeTo.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/RoundingMode.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/RoundingMode.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/RoundingMode.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/RoundingMode.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/RoundingMode.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/RoundingMode.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/RoundingMode.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/RoundingMode.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/RoundingOptions.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/RoundingOptions.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/RoundingOptions.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/RoundingOptions.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/RoundingOptions.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/RoundingOptions.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/RoundingOptions.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/RoundingOptions.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Sign.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Sign.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Sign.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Sign.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Sign.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Sign.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Sign.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Sign.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/TemporalError.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/TemporalError.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/TemporalError.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/TemporalError.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/TemporalError.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/TemporalError.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/TemporalError.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/TemporalError.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/TimeZone.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/TimeZone.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/TimeZone.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/TimeZone.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/TimeZone.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/TimeZone.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/TimeZone.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/TimeZone.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/ToStringRoundingOptions.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/ToStringRoundingOptions.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/ToStringRoundingOptions.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/ToStringRoundingOptions.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/ToStringRoundingOptions.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/ToStringRoundingOptions.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/ToStringRoundingOptions.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/ToStringRoundingOptions.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/TransitionDirection.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/TransitionDirection.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/TransitionDirection.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/TransitionDirection.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/TransitionDirection.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/TransitionDirection.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/TransitionDirection.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/TransitionDirection.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Unit.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Unit.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Unit.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Unit.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/Unit.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/Unit.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/Unit.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/Unit.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/UnsignedRoundingMode.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/UnsignedRoundingMode.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/UnsignedRoundingMode.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/UnsignedRoundingMode.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/UnsignedRoundingMode.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/UnsignedRoundingMode.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/UnsignedRoundingMode.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/UnsignedRoundingMode.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/ZonedDateTime.d.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/ZonedDateTime.d.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/ZonedDateTime.d.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/ZonedDateTime.d.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/ZonedDateTime.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/ZonedDateTime.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/ZonedDateTime.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/ZonedDateTime.hpp diff --git a/temporal_capi/bindings/cpp/temporal_rs/diplomat_runtime.hpp b/crates/temporal_capi/bindings/cpp/temporal_rs/diplomat_runtime.hpp similarity index 100% rename from temporal_capi/bindings/cpp/temporal_rs/diplomat_runtime.hpp rename to crates/temporal_capi/bindings/cpp/temporal_rs/diplomat_runtime.hpp diff --git a/crates/temporal_capi/src/calendar.rs b/crates/temporal_capi/src/calendar.rs new file mode 100644 index 000000000..5e432aa00 --- /dev/null +++ b/crates/temporal_capi/src/calendar.rs @@ -0,0 +1,82 @@ +#[diplomat::bridge] +#[diplomat::abi_rename = "temporal_rs_{0}"] +pub mod ffi { + use crate::error::ffi::TemporalError; + use alloc::boxed::Box; + use diplomat_runtime::DiplomatStr; + use icu_calendar::preferences::CalendarAlgorithm; + + #[diplomat::enum_convert(icu_calendar::AnyCalendarKind, needs_wildcard)] + pub enum AnyCalendarKind { + Iso, + Buddhist, + Chinese, + Coptic, + Dangi, + Ethiopian, + EthiopianAmeteAlem, + Gregorian, + Hebrew, + Indian, + HijriTabularTypeIIFriday, + HijriTabularTypeIIThursday, + HijriUmmAlQura, + Japanese, + JapaneseExtended, + Persian, + Roc, + } + + impl AnyCalendarKind { + pub fn get_for_str(s: &DiplomatStr) -> Option { + let value = icu_locale_core::extensions::unicode::Value::try_from_utf8(s).ok()?; + let algorithm = CalendarAlgorithm::try_from(&value).ok()?; + match icu_calendar::AnyCalendarKind::try_from(algorithm) { + // islamic-rgsa / simulated-mecca is supported by ICU4X but not Temporal + Ok(icu_calendar::AnyCalendarKind::HijriSimulatedMecca) => None, + Ok(c) => Some(c.into()), + Err(()) => None, + } + } + + // https://tc39.es/proposal-temporal/#sec-temporal-parsetemporalcalendarstring + pub fn parse_temporal_calendar_string(s: &DiplomatStr) -> Option { + match temporal::parsers::parse_allowed_calendar_formats(s) { + Some([]) => Some(AnyCalendarKind::Iso), + Some(result) => Self::get_for_str(result), + None => Self::get_for_str(s), + } + } + } + + #[diplomat::opaque] + #[diplomat::transparent_convert] + /// By and large one should not need to construct this type; it mostly exists + /// to represent calendar data found on other Temporal types, obtained via `.calendar()`. + pub struct Calendar(pub temporal::Calendar); + + impl Calendar { + pub fn try_new_constrain(kind: AnyCalendarKind) -> Box { + Box::new(Calendar(temporal::Calendar::new(kind.into()))) + } + + pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { + temporal::Calendar::try_from_utf8(s) + .map(|c| Box::new(Calendar(c))) + .map_err(Into::into) + } + + pub fn is_iso(&self) -> bool { + self.0.is_iso() + } + + pub fn identifier(&self) -> &'static str { + self.0.identifier() + } + /// Returns the kind of this calendar + #[inline] + pub fn kind(&self) -> AnyCalendarKind { + self.0.kind().into() + } + } +} diff --git a/crates/temporal_capi/src/duration.rs b/crates/temporal_capi/src/duration.rs new file mode 100644 index 000000000..31561b29a --- /dev/null +++ b/crates/temporal_capi/src/duration.rs @@ -0,0 +1,335 @@ +use crate::error::ffi::TemporalError; + +#[diplomat::bridge] +#[diplomat::abi_rename = "temporal_rs_{0}"] +pub mod ffi { + use crate::error::ffi::TemporalError; + use crate::options::ffi::ToStringRoundingOptions; + use crate::options::ffi::{RoundingOptions, Unit}; + use crate::provider::ffi::Provider; + use crate::zoned_date_time::ffi::RelativeTo; + use alloc::boxed::Box; + use alloc::string::String; + use core::str::FromStr; + use diplomat_runtime::DiplomatOption; + use diplomat_runtime::{DiplomatStr, DiplomatStr16}; + use num_traits::FromPrimitive; + + #[diplomat::opaque] + pub struct Duration(pub(crate) temporal::Duration); + + #[diplomat::opaque] + #[diplomat::transparent_convert] + pub struct DateDuration(pub(crate) temporal::duration::DateDuration); + + pub struct PartialDuration { + pub years: DiplomatOption, + pub months: DiplomatOption, + pub weeks: DiplomatOption, + pub days: DiplomatOption, + pub hours: DiplomatOption, + pub minutes: DiplomatOption, + pub seconds: DiplomatOption, + pub milliseconds: DiplomatOption, + pub microseconds: DiplomatOption, + pub nanoseconds: DiplomatOption, + } + + #[diplomat::enum_convert(temporal::Sign)] + pub enum Sign { + Positive = 1, + Zero = 0, + Negative = -1, + } + + impl PartialDuration { + pub fn is_empty(self) -> bool { + temporal::partial::PartialDuration::try_from(self) + .map(|p| p.is_empty()) + .unwrap_or(false) + } + } + + impl DateDuration { + pub fn try_new( + years: i64, + months: i64, + weeks: i64, + days: i64, + ) -> Result, TemporalError> { + temporal::duration::DateDuration::new(years, months, weeks, days) + .map(|x| Box::new(DateDuration(x))) + .map_err(Into::into) + } + + pub fn abs(&self) -> Box { + Box::new(Self(self.0.abs())) + } + pub fn negated(&self) -> Box { + Box::new(Self(self.0.negated())) + } + + pub fn sign(&self) -> Sign { + self.0.sign().into() + } + } + impl Duration { + /// Temporary API until v8 can move off of it + pub fn create( + years: i64, + months: i64, + weeks: i64, + days: i64, + hours: i64, + minutes: i64, + seconds: i64, + milliseconds: i64, + microseconds: f64, + nanoseconds: f64, + ) -> Result, TemporalError> { + Self::try_new( + years, + months, + weeks, + days, + hours, + minutes, + seconds, + milliseconds, + microseconds, + nanoseconds, + ) + } + + pub fn try_new( + years: i64, + months: i64, + weeks: i64, + days: i64, + hours: i64, + minutes: i64, + seconds: i64, + milliseconds: i64, + microseconds: f64, + nanoseconds: f64, + ) -> Result, TemporalError> { + temporal::Duration::new( + years, + months, + weeks, + days, + hours, + minutes, + seconds, + milliseconds, + i128::from_f64(microseconds).ok_or(TemporalError::range("μs out of range"))?, + i128::from_f64(nanoseconds).ok_or(TemporalError::range("ms out of range"))?, + ) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + + pub fn from_partial_duration(partial: PartialDuration) -> Result, TemporalError> { + temporal::Duration::from_partial_duration(partial.try_into()?) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + + pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { + temporal::Duration::from_utf8(s) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { + // TODO(#275) This should not need to convert + let s = String::from_utf16(s).map_err(|_| temporal::TemporalError::range())?; + temporal::Duration::from_str(&s) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn is_time_within_range(&self) -> bool { + self.0.is_time_within_range() + } + + // set_time_duration is NOT safe to expose over FFI if the date()/time() methods are available + // Diplomat plans to make this a hard error. + + pub fn years(&self) -> i64 { + self.0.years() + } + pub fn months(&self) -> i64 { + self.0.months() + } + pub fn weeks(&self) -> i64 { + self.0.weeks() + } + pub fn days(&self) -> i64 { + self.0.days() + } + pub fn hours(&self) -> i64 { + self.0.hours() + } + pub fn minutes(&self) -> i64 { + self.0.minutes() + } + pub fn seconds(&self) -> i64 { + self.0.seconds() + } + pub fn milliseconds(&self) -> i64 { + self.0.milliseconds() + } + pub fn microseconds(&self) -> f64 { + // The error case should never occur since + // duration values are clamped within range + // + // https://github.com/boa-dev/temporal/issues/189 + f64::from_i128(self.0.microseconds()).unwrap_or(0.) + } + pub fn nanoseconds(&self) -> f64 { + // The error case should never occur since + // duration values are clamped within range + // + // https://github.com/boa-dev/temporal/issues/189 + f64::from_i128(self.0.nanoseconds()).unwrap_or(0.) + } + + pub fn sign(&self) -> Sign { + self.0.sign().into() + } + + pub fn is_zero(&self) -> bool { + self.0.is_zero() + } + + pub fn abs(&self) -> Box { + Box::new(Self(self.0.abs())) + } + pub fn negated(&self) -> Box { + Box::new(Self(self.0.negated())) + } + + pub fn add(&self, other: &Self) -> Result, TemporalError> { + self.0 + .add(&other.0) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + + pub fn subtract(&self, other: &Self) -> Result, TemporalError> { + self.0 + .subtract(&other.0) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + + pub fn to_string( + &self, + options: ToStringRoundingOptions, + write: &mut DiplomatWrite, + ) -> Result<(), TemporalError> { + use core::fmt::Write; + let string = self.0.as_temporal_string(options.into())?; + // throw away the error, this should always succeed + let _ = write.write_str(&string); + + Ok(()) + } + + #[cfg(feature = "compiled_data")] + pub fn round( + &self, + options: RoundingOptions, + relative_to: RelativeTo, + ) -> Result, TemporalError> { + self.round_with_provider(options, relative_to, &Provider::compiled()) + } + pub fn round_with_provider<'p>( + &self, + options: RoundingOptions, + relative_to: RelativeTo, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| self.0.round_with_provider( + options.try_into()?, + relative_to.into(), + p + )) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + + #[cfg(feature = "compiled_data")] + pub fn compare(&self, other: &Self, relative_to: RelativeTo) -> Result { + self.compare_with_provider(other, relative_to, &Provider::compiled()) + } + pub fn compare_with_provider<'p>( + &self, + other: &Self, + relative_to: RelativeTo, + p: &Provider<'p>, + ) -> Result { + // Ideally we'd return core::cmp::Ordering here but Diplomat + // isn't happy about needing to convert the contents of a result + with_provider!(p, |p| self.0.compare_with_provider( + &other.0, + relative_to.into(), + p + )) + .map(|x| x as i8) + .map_err(Into::into) + } + + #[cfg(feature = "compiled_data")] + pub fn total(&self, unit: Unit, relative_to: RelativeTo) -> Result { + self.total_with_provider(unit, relative_to, &Provider::compiled()) + } + pub fn total_with_provider<'p>( + &self, + unit: Unit, + relative_to: RelativeTo, + p: &Provider<'p>, + ) -> Result { + with_provider!(p, |p| self.0.total_with_provider( + unit.into(), + relative_to.into(), + p + )) + .map(|x| x.as_inner()) + .map_err(Into::into) + } + + #[allow(clippy::should_implement_trait)] + pub fn clone(&self) -> Box { + Box::new(Self(self.0)) + } + } +} + +impl TryFrom for temporal::partial::PartialDuration { + type Error = TemporalError; + fn try_from(other: ffi::PartialDuration) -> Result { + use num_traits::FromPrimitive; + Ok(Self { + years: other.years.into_option(), + months: other.months.into_option(), + weeks: other.weeks.into_option(), + days: other.days.into_option(), + hours: other.hours.into_option(), + minutes: other.minutes.into_option(), + seconds: other.seconds.into_option(), + milliseconds: other.milliseconds.into_option(), + microseconds: other + .microseconds + .into_option() + .map(|v| i128::from_f64(v).ok_or(TemporalError::range("μs out of range"))) + .transpose()?, + nanoseconds: other + .nanoseconds + .into_option() + .map(|v| i128::from_f64(v).ok_or(TemporalError::range("ns out of range"))) + .transpose()?, + }) + } +} diff --git a/temporal_capi/src/error.rs b/crates/temporal_capi/src/error.rs similarity index 85% rename from temporal_capi/src/error.rs rename to crates/temporal_capi/src/error.rs index 95c632d14..c1dc597b5 100644 --- a/temporal_capi/src/error.rs +++ b/crates/temporal_capi/src/error.rs @@ -3,7 +3,7 @@ pub mod ffi { use diplomat_runtime::{DiplomatOption, DiplomatUtf8StrSlice}; - #[diplomat::enum_convert(temporal_rs::error::ErrorKind)] + #[diplomat::enum_convert(temporal::error::ErrorKind)] pub enum ErrorKind { Generic, Type, @@ -34,8 +34,8 @@ pub mod ffi { } } -impl From for ffi::TemporalError { - fn from(other: temporal_rs::TemporalError) -> Self { +impl From for ffi::TemporalError { + fn from(other: temporal::TemporalError) -> Self { let kind = other.kind().into(); let msg = other.into_message(); Self { diff --git a/crates/temporal_capi/src/instant.rs b/crates/temporal_capi/src/instant.rs new file mode 100644 index 000000000..1b5699d2b --- /dev/null +++ b/crates/temporal_capi/src/instant.rs @@ -0,0 +1,246 @@ +#[diplomat::bridge] +#[diplomat::abi_rename = "temporal_rs_{0}"] +pub mod ffi { + use crate::duration::ffi::Duration; + use crate::error::ffi::TemporalError; + use crate::options::ffi::{DifferenceSettings, RoundingOptions}; + use crate::zoned_date_time::ffi::ZonedDateTime; + use alloc::boxed::Box; + use alloc::string::String; + use core::str::FromStr; + use diplomat_runtime::{DiplomatStr, DiplomatStr16}; + + use crate::options::ffi::ToStringRoundingOptions; + use crate::provider::ffi::Provider; + use crate::time_zone::ffi::TimeZone; + + #[diplomat::opaque] + pub struct Instant(pub temporal::Instant); + + /// For portability, we use two u64s instead of an i128. + /// The high bit of the u64 is the sign. + /// This cannot represent i128::MIN, and has a -0, but those are largely + /// irrelevant for this purpose. + /// + /// This could potentially instead be a bit-by-bit split, or something else + #[derive(Debug, Copy, Clone)] + pub struct I128Nanoseconds { + pub high: u64, + pub low: u64, + } + + impl I128Nanoseconds { + pub fn is_valid(self) -> bool { + let ns = i128::from(self); + temporal::unix_time::EpochNanoseconds::from(ns) + .check_validity() + .is_ok() + } + } + + impl Instant { + pub fn try_new(ns: I128Nanoseconds) -> Result, TemporalError> { + temporal::Instant::try_new(ns.into()) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn from_epoch_milliseconds( + epoch_milliseconds: i64, + ) -> Result, TemporalError> { + temporal::Instant::from_epoch_milliseconds(epoch_milliseconds) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { + temporal::Instant::from_utf8(s) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { + // TODO(#275) This should not need to convert + let s = String::from_utf16(s).map_err(|_| temporal::TemporalError::range())?; + temporal::Instant::from_str(&s) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn add(&self, duration: &Duration) -> Result, TemporalError> { + self.0 + .add(&duration.0) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + pub fn subtract(&self, duration: &Duration) -> Result, TemporalError> { + self.0 + .subtract(&duration.0) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + pub fn since( + &self, + other: &Self, + settings: DifferenceSettings, + ) -> Result, TemporalError> { + self.0 + .since(&other.0, settings.try_into()?) + .map(|c| Box::new(Duration(c))) + .map_err(Into::into) + } + pub fn until( + &self, + other: &Self, + settings: DifferenceSettings, + ) -> Result, TemporalError> { + self.0 + .until(&other.0, settings.try_into()?) + .map(|c| Box::new(Duration(c))) + .map_err(Into::into) + } + pub fn round(&self, options: RoundingOptions) -> Result, TemporalError> { + self.0 + .round(options.try_into()?) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn compare(&self, other: &Self) -> core::cmp::Ordering { + self.0.cmp(&other.0) + } + + pub fn equals(&self, other: &Self) -> bool { + self.0 == other.0 + } + + pub fn epoch_milliseconds(&self) -> i64 { + self.0.epoch_milliseconds() + } + + pub fn epoch_nanoseconds(&self) -> I128Nanoseconds { + let ns = self.0.epoch_nanoseconds().as_i128(); + ns.into() + } + + // TODO: rename after 0.15/0.1.0 to remove the with_compiled_data + #[cfg(feature = "compiled_data")] + pub fn to_ixdtf_string_with_compiled_data( + &self, + zone: Option, + options: ToStringRoundingOptions, + write: &mut DiplomatWrite, + ) -> Result<(), TemporalError> { + self.to_ixdtf_string_with_provider(zone, options, &Provider::compiled(), write) + } + pub fn to_ixdtf_string_with_provider<'p>( + &self, + zone: Option, + options: ToStringRoundingOptions, + p: &Provider<'p>, + write: &mut DiplomatWrite, + ) -> Result<(), TemporalError> { + use writeable::Writeable; + with_provider!(p, |p| { + let writeable = self.0.to_ixdtf_writeable_with_provider( + zone.map(Into::into), + options.into(), + p, + )?; + // This can only fail in cases where the DiplomatWriteable is capped, we + // don't care about that. + let _ = writeable.write_to(write); + }); + Ok(()) + } + + #[cfg(feature = "compiled_data")] + pub fn to_zoned_date_time_iso( + &self, + zone: TimeZone, + ) -> Result, TemporalError> { + self.to_zoned_date_time_iso_with_provider(zone, &Provider::compiled()) + } + pub fn to_zoned_date_time_iso_with_provider<'p>( + &self, + zone: TimeZone, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| self + .0 + .to_zoned_date_time_iso_with_provider(zone.into(), p)) + .map(|c| Box::new(ZonedDateTime(c))) + .map_err(Into::into) + } + + #[allow(clippy::should_implement_trait)] + pub fn clone(&self) -> Box { + Box::new(Self(self.0)) + } + } +} + +const U64_HIGH_BIT_MASK: u64 = 1 << 63; + +impl From for i128 { + fn from(ns: ffi::I128Nanoseconds) -> Self { + let is_neg = (ns.high & U64_HIGH_BIT_MASK) != 0; + // Remove the bitflag + let ns_high = (ns.high & !U64_HIGH_BIT_MASK) as u128; + // Stick them together + let total = ((ns_high << 64) + ns.low as u128) as i128; + // Reintroduce the sign + if is_neg { + -total + } else { + total + } + } +} + +impl From for ffi::I128Nanoseconds { + fn from(ns: i128) -> Self { + debug_assert!( + ns != i128::MIN, + "temporal should never produce i128::MIN, it is out of valid range" + ); + let is_neg = ns < 0; + let ns = ns.unsigned_abs(); + + let high = (ns >> 64) as u64; + let low = (ns & u64::MAX as u128) as u64; + let high = if (is_neg) { + high | U64_HIGH_BIT_MASK + } else { + high + }; + + ffi::I128Nanoseconds { high, low } + } +} + +#[test] +fn test_i128_roundtrip() { + #[track_caller] + fn roundtrip(x: i128) { + let ns = ffi::I128Nanoseconds::from(x); + let round = i128::from(ns); + assert_eq!(x, round, "{x} does not roundtrip via {ns:?}"); + } + + roundtrip(0); + roundtrip(-1); + roundtrip(1); + roundtrip(100); + roundtrip(1000); + roundtrip(-1000); + roundtrip(1000000000); + roundtrip(-100000000); + roundtrip(u64::MAX as i128); + roundtrip(-(u64::MIN as i128)); + roundtrip(100 * (u64::MAX as i128)); + roundtrip(-100 * (u64::MAX as i128)); + roundtrip(i128::MIN + 1); + roundtrip(i128::MAX); + roundtrip(i128::MAX - 10); +} diff --git a/crates/temporal_capi/src/lib.rs b/crates/temporal_capi/src/lib.rs new file mode 100644 index 000000000..f3c47f9c3 --- /dev/null +++ b/crates/temporal_capi/src/lib.rs @@ -0,0 +1,40 @@ +#![allow(unused)] // Until we add all the APIs +#![warn(unused_imports)] // But we want to clean up imports +#![allow(clippy::needless_lifetimes)] // Diplomat requires explicit lifetimes at times +#![allow(clippy::too_many_arguments)] // We're mapping APIs with the same argument size +#![allow(clippy::wrong_self_convention)] // Diplomat forces self conventions that may not always be ideal + +//! This crate contains the original definitions of [`temporal`] APIs consumed by [Diplomat](https://github.com/rust-diplomat/diplomat) +//! to generate FFI bindings. We currently generate bindings for C++ and `extern "C"` APIs. +//! +//! The APIs exposed by this crate are *not intended to be used from Rust* and as such this crate may change its Rust API +//! across compatible semver versions. In contrast, the `extern "C"` APIs and all the language bindings are stable within +//! the same major semver version. +//! +//! [`temporal`]: https://crates.io/crates/temporal + +#![no_std] +#![cfg_attr( + not(test), + forbid(clippy::unwrap_used, clippy::expect_used, clippy::indexing_slicing) +)] + +extern crate alloc; + +#[macro_use] +pub mod provider; + +pub mod calendar; +pub mod duration; +pub mod error; +pub mod instant; +pub mod options; + +pub mod plain_date; +pub mod plain_date_time; +pub mod plain_month_day; +pub mod plain_time; +pub mod plain_year_month; +pub mod zoned_date_time; + +pub mod time_zone; diff --git a/temporal_capi/src/options.rs b/crates/temporal_capi/src/options.rs similarity index 87% rename from temporal_capi/src/options.rs rename to crates/temporal_capi/src/options.rs index 445cf1549..d92cc3a08 100644 --- a/temporal_capi/src/options.rs +++ b/crates/temporal_capi/src/options.rs @@ -4,7 +4,7 @@ use crate::error::ffi::TemporalError; #[diplomat::abi_rename = "temporal_rs_{0}"] pub mod ffi { use diplomat_runtime::DiplomatOption; - use temporal_rs::options; + use temporal::options; #[diplomat::enum_convert(options::Overflow)] pub enum ArithmeticOverflow { @@ -91,7 +91,7 @@ pub mod ffi { HalfEven, } - #[diplomat::enum_convert(temporal_rs::provider::TransitionDirection)] + #[diplomat::enum_convert(temporal::provider::TransitionDirection)] pub enum TransitionDirection { Next, Previous, @@ -125,7 +125,7 @@ pub mod ffi { } } -impl From for temporal_rs::parsers::Precision { +impl From for temporal::parsers::Precision { fn from(other: ffi::Precision) -> Self { if other.is_minute { Self::Minute @@ -137,7 +137,7 @@ impl From for temporal_rs::parsers::Precision { } } -impl From for temporal_rs::options::ToStringRoundingOptions { +impl From for temporal::options::ToStringRoundingOptions { fn from(other: ffi::ToStringRoundingOptions) -> Self { Self { precision: other.precision.into(), @@ -147,7 +147,7 @@ impl From for temporal_rs::options::ToStringRoundi } } -impl TryFrom for temporal_rs::options::DifferenceSettings { +impl TryFrom for temporal::options::DifferenceSettings { type Error = TemporalError; fn try_from(other: ffi::DifferenceSettings) -> Result { let mut ret = Self::default(); @@ -155,12 +155,12 @@ impl TryFrom for temporal_rs::options::DifferenceSettin ret.smallest_unit = other.smallest_unit.into_converted_option(); ret.rounding_mode = other.rounding_mode.into_converted_option(); if let Some(increment) = other.increment.into() { - ret.increment = Some(temporal_rs::options::RoundingIncrement::try_new(increment)?); + ret.increment = Some(temporal::options::RoundingIncrement::try_new(increment)?); } Ok(ret) } } -impl TryFrom for temporal_rs::options::RoundingOptions { +impl TryFrom for temporal::options::RoundingOptions { type Error = TemporalError; fn try_from(other: ffi::RoundingOptions) -> Result { let mut ret = Self::default(); @@ -168,7 +168,7 @@ impl TryFrom for temporal_rs::options::RoundingOptions { ret.smallest_unit = other.smallest_unit.into_converted_option(); ret.rounding_mode = other.rounding_mode.into_converted_option(); if let Some(increment) = other.increment.into() { - ret.increment = Some(temporal_rs::options::RoundingIncrement::try_new(increment)?); + ret.increment = Some(temporal::options::RoundingIncrement::try_new(increment)?); } Ok(ret) } diff --git a/crates/temporal_capi/src/plain_date.rs b/crates/temporal_capi/src/plain_date.rs new file mode 100644 index 000000000..060f291c4 --- /dev/null +++ b/crates/temporal_capi/src/plain_date.rs @@ -0,0 +1,472 @@ +use temporal::MonthCode; + +use crate::error::ffi::TemporalError; + +#[diplomat::bridge] +#[diplomat::abi_rename = "temporal_rs_{0}"] +pub mod ffi { + use crate::calendar::ffi::{AnyCalendarKind, Calendar}; + use crate::duration::ffi::Duration; + use crate::error::ffi::TemporalError; + use crate::instant::ffi::I128Nanoseconds; + use crate::options::ffi::{ArithmeticOverflow, DifferenceSettings, DisplayCalendar}; + use crate::plain_date_time::ffi::PlainDateTime; + use crate::plain_month_day::ffi::PlainMonthDay; + use crate::plain_time::ffi::PlainTime; + use crate::plain_year_month::ffi::PlainYearMonth; + use crate::provider::ffi::Provider; + use crate::time_zone::ffi::TimeZone; + use crate::zoned_date_time::ffi::ZonedDateTime; + use alloc::boxed::Box; + use alloc::string::String; + use core::fmt::Write; + use diplomat_runtime::{DiplomatOption, DiplomatStrSlice, DiplomatWrite}; + use diplomat_runtime::{DiplomatStr, DiplomatStr16}; + use writeable::Writeable; + + use core::str::FromStr; + + #[diplomat::opaque] + pub struct PlainDate(pub(crate) temporal::PlainDate); + + pub struct PartialDate<'a> { + pub year: DiplomatOption, + pub month: DiplomatOption, + // None if empty + pub month_code: DiplomatStrSlice<'a>, + pub day: DiplomatOption, + // None if empty + pub era: DiplomatStrSlice<'a>, + pub era_year: DiplomatOption, + pub calendar: AnyCalendarKind, + } + + #[diplomat::opaque] + pub struct ParsedDate(pub(crate) temporal::parsed_intermediates::ParsedDate); + + impl ParsedDate { + pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { + temporal::parsed_intermediates::ParsedDate::from_utf8(s) + .map(|x| Box::new(ParsedDate(x))) + .map_err(Into::::into) + } + pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { + // TODO(#275) This should not need to convert + let s = String::from_utf16(s).map_err(|_| temporal::TemporalError::range())?; + + temporal::parsed_intermediates::ParsedDate::from_utf8(s.as_bytes()) + .map(|x| Box::new(ParsedDate(x))) + .map_err(Into::::into) + } + + pub fn year_month_from_utf8(s: &DiplomatStr) -> Result, TemporalError> { + temporal::parsed_intermediates::ParsedDate::year_month_from_utf8(s) + .map(|x| Box::new(ParsedDate(x))) + .map_err(Into::::into) + } + pub fn year_month_from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { + // TODO(#275) This should not need to convert + let s = String::from_utf16(s).map_err(|_| temporal::TemporalError::range())?; + + temporal::parsed_intermediates::ParsedDate::year_month_from_utf8(s.as_bytes()) + .map(|x| Box::new(ParsedDate(x))) + .map_err(Into::::into) + } + + pub fn month_day_from_utf8(s: &DiplomatStr) -> Result, TemporalError> { + temporal::parsed_intermediates::ParsedDate::month_day_from_utf8(s) + .map(|x| Box::new(ParsedDate(x))) + .map_err(Into::::into) + } + pub fn month_day_from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { + // TODO(#275) This should not need to convert + let s = String::from_utf16(s).map_err(|_| temporal::TemporalError::range())?; + + temporal::parsed_intermediates::ParsedDate::month_day_from_utf8(s.as_bytes()) + .map(|x| Box::new(ParsedDate(x))) + .map_err(Into::::into) + } + } + + impl PlainDate { + pub fn try_new_constrain( + year: i32, + month: u8, + day: u8, + calendar: AnyCalendarKind, + ) -> Result, TemporalError> { + temporal::PlainDate::new(year, month, day, temporal::Calendar::new(calendar.into())) + .map(|x| Box::new(PlainDate(x))) + .map_err(Into::into) + } + pub fn try_new( + year: i32, + month: u8, + day: u8, + calendar: AnyCalendarKind, + ) -> Result, TemporalError> { + temporal::PlainDate::try_new(year, month, day, temporal::Calendar::new(calendar.into())) + .map(|x| Box::new(PlainDate(x))) + .map_err(Into::into) + } + pub fn try_new_with_overflow( + year: i32, + month: u8, + day: u8, + calendar: AnyCalendarKind, + overflow: ArithmeticOverflow, + ) -> Result, TemporalError> { + temporal::PlainDate::new_with_overflow( + year, + month, + day, + temporal::Calendar::new(calendar.into()), + overflow.into(), + ) + .map(|x| Box::new(PlainDate(x))) + .map_err(Into::into) + } + pub fn from_partial( + partial: PartialDate, + overflow: Option, + ) -> Result, TemporalError> { + temporal::PlainDate::from_partial(partial.try_into()?, overflow.map(Into::into)) + .map(|x| Box::new(PlainDate(x))) + .map_err(Into::into) + } + + pub fn from_parsed(parsed: &ParsedDate) -> Result, TemporalError> { + temporal::PlainDate::from_parsed(parsed.0) + .map(|x| Box::new(PlainDate(x))) + .map_err(Into::into) + } + + #[cfg(feature = "compiled_data")] + pub fn from_epoch_milliseconds(ms: i64, tz: TimeZone) -> Result, TemporalError> { + Self::from_epoch_milliseconds_with_provider(ms, tz, &Provider::compiled()) + } + pub fn from_epoch_milliseconds_with_provider<'p>( + ms: i64, + tz: TimeZone, + p: &Provider<'p>, + ) -> Result, TemporalError> { + let zdt = crate::zoned_date_time::zdt_from_epoch_ms_with_provider(ms, tz.into(), p)?; + Ok(Box::new(Self(zdt.to_plain_date()))) + } + + #[cfg(feature = "compiled_data")] + pub fn from_epoch_nanoseconds( + ns: I128Nanoseconds, + tz: TimeZone, + ) -> Result, TemporalError> { + Self::from_epoch_nanoseconds_with_provider(ns, tz, &Provider::compiled()) + } + pub fn from_epoch_nanoseconds_with_provider<'p>( + ns: I128Nanoseconds, + tz: TimeZone, + p: &Provider<'p>, + ) -> Result, TemporalError> { + let zdt = crate::zoned_date_time::zdt_from_epoch_ns_with_provider(ns, tz.into(), p)?; + Ok(Box::new(Self(zdt.to_plain_date()))) + } + + pub fn with( + &self, + partial: PartialDate, + overflow: Option, + ) -> Result, TemporalError> { + self.0 + .with(partial.try_into()?, overflow.map(Into::into)) + .map(|x| Box::new(PlainDate(x))) + .map_err(Into::into) + } + + pub fn with_calendar(&self, calendar: AnyCalendarKind) -> Box { + Box::new(PlainDate( + self.0 + .with_calendar(temporal::Calendar::new(calendar.into())), + )) + } + + pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { + temporal::PlainDate::from_utf8(s) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { + // TODO(#275) This should not need to convert + let s = String::from_utf16(s).map_err(|_| temporal::TemporalError::range())?; + temporal::PlainDate::from_str(&s) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn calendar<'a>(&'a self) -> &'a Calendar { + Calendar::transparent_convert(self.0.calendar()) + } + + pub fn is_valid(&self) -> bool { + self.0.is_valid() + } + + pub fn add( + &self, + duration: &Duration, + overflow: Option, + ) -> Result, TemporalError> { + self.0 + .add(&duration.0, overflow.map(Into::into)) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + pub fn subtract( + &self, + duration: &Duration, + overflow: Option, + ) -> Result, TemporalError> { + self.0 + .subtract(&duration.0, overflow.map(Into::into)) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + pub fn until( + &self, + other: &Self, + settings: DifferenceSettings, + ) -> Result, TemporalError> { + self.0 + .until(&other.0, settings.try_into()?) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + pub fn since( + &self, + other: &Self, + settings: DifferenceSettings, + ) -> Result, TemporalError> { + self.0 + .since(&other.0, settings.try_into()?) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + + pub fn equals(&self, other: &Self) -> bool { + self.0 == other.0 + } + + pub fn compare(one: &Self, two: &Self) -> core::cmp::Ordering { + one.0.compare_iso(&two.0) + } + pub fn year(&self) -> i32 { + self.0.year() + } + pub fn month(&self) -> u8 { + self.0.month() + } + pub fn month_code(&self, write: &mut DiplomatWrite) { + let code = self.0.month_code(); + // throw away the error, this should always succeed + let _ = write.write_str(code.as_str()); + } + pub fn day(&self) -> u8 { + self.0.day() + } + pub fn day_of_week(&self) -> u16 { + self.0.day_of_week() + } + pub fn day_of_year(&self) -> u16 { + self.0.day_of_year() + } + pub fn week_of_year(&self) -> Option { + self.0.week_of_year() + } + pub fn year_of_week(&self) -> Option { + self.0.year_of_week() + } + pub fn days_in_week(&self) -> u16 { + self.0.days_in_week() + } + pub fn days_in_month(&self) -> u16 { + self.0.days_in_month() + } + pub fn days_in_year(&self) -> u16 { + self.0.days_in_year() + } + pub fn months_in_year(&self) -> u16 { + self.0.months_in_year() + } + pub fn in_leap_year(&self) -> bool { + self.0.in_leap_year() + } + // Writes an empty string for no era + pub fn era(&self, write: &mut DiplomatWrite) { + let era = self.0.era(); + if let Some(era) = era { + // throw away the error, this should always succeed + let _ = write.write_str(&era); + } + } + + pub fn era_year(&self) -> Option { + self.0.era_year() + } + + pub fn to_plain_date_time( + &self, + time: Option<&PlainTime>, + ) -> Result, TemporalError> { + self.0 + .to_plain_date_time(time.map(|t| t.0)) + .map(|x| Box::new(PlainDateTime(x))) + .map_err(Into::into) + } + + pub fn to_plain_month_day(&self) -> Result, TemporalError> { + self.0 + .to_plain_month_day() + .map(|x| Box::new(PlainMonthDay(x))) + .map_err(Into::into) + } + + pub fn to_plain_year_month(&self) -> Result, TemporalError> { + self.0 + .to_plain_year_month() + .map(|x| Box::new(PlainYearMonth(x))) + .map_err(Into::into) + } + #[cfg(feature = "compiled_data")] + pub fn to_zoned_date_time( + &self, + time_zone: TimeZone, + time: Option<&PlainTime>, + ) -> Result, TemporalError> { + self.to_zoned_date_time_with_provider(time_zone, time, &Provider::compiled()) + } + pub fn to_zoned_date_time_with_provider<'p>( + &self, + time_zone: TimeZone, + time: Option<&PlainTime>, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| self.0.to_zoned_date_time_with_provider( + time_zone.into(), + time.map(|x| x.0), + p + )) + .map(|x| Box::new(ZonedDateTime(x))) + .map_err(Into::into) + } + + pub fn epoch_ms_for_utc(&self) -> Result { + let ns = self.0.epoch_ns_for_utc(); + + let ns_i128 = ns.as_i128(); + let ms = ns_i128 / 1_000_000; + if let Ok(ms) = i64::try_from(ms) { + Ok(ms) + } else { + Err(TemporalError::assert("Found an out-of-range Date")) + } + } + + pub fn to_ixdtf_string( + &self, + display_calendar: DisplayCalendar, + write: &mut DiplomatWrite, + ) { + let writeable = self.0.to_ixdtf_writeable(display_calendar.into()); + // This can only fail in cases where the DiplomatWriteable is capped, we + // don't care about that. + let _ = writeable.write_to(write); + } + + #[allow(clippy::should_implement_trait)] + pub fn clone(&self) -> Box { + Box::new(Self(self.0.clone())) + } + } +} + +impl TryFrom> for temporal::partial::PartialDate { + type Error = TemporalError; + fn try_from(other: ffi::PartialDate<'_>) -> Result { + let calendar = temporal::Calendar::new(other.calendar.into()); + Ok(Self { + calendar_fields: other.try_into()?, + calendar, + }) + } +} + +impl TryFrom> for temporal::partial::PartialYearMonth { + type Error = TemporalError; + fn try_from(other: ffi::PartialDate<'_>) -> Result { + let calendar = temporal::Calendar::new(other.calendar.into()); + Ok(Self { + calendar_fields: other.try_into()?, + calendar, + }) + } +} + +impl TryFrom> for temporal::fields::CalendarFields { + type Error = TemporalError; + fn try_from(other: ffi::PartialDate<'_>) -> Result { + use temporal::TinyAsciiStr; + + let month_code = if other.month_code.is_empty() { + None + } else { + Some(MonthCode::try_from_utf8(other.month_code.into()).map_err(TemporalError::from)?) + }; + + let era = if other.era.is_empty() { + None + } else { + Some(TinyAsciiStr::try_from_utf8(other.era.into()).map_err(|_| { + TemporalError::from( + temporal::TemporalError::range().with_message("Invalid era code."), + ) + })?) + }; + Ok(Self { + year: other.year.into(), + month: other.month.into(), + month_code, + day: other.day.into(), + era_year: other.era_year.into(), + era, + }) + } +} + +impl TryFrom> for temporal::fields::YearMonthCalendarFields { + type Error = TemporalError; + fn try_from(other: ffi::PartialDate<'_>) -> Result { + use temporal::TinyAsciiStr; + + let month_code = if other.month_code.is_empty() { + None + } else { + Some(MonthCode::try_from_utf8(other.month_code.into()).map_err(TemporalError::from)?) + }; + + let era = if other.era.is_empty() { + None + } else { + Some(TinyAsciiStr::try_from_utf8(other.era.into()).map_err(|_| { + TemporalError::from( + temporal::TemporalError::range().with_message("Invalid era code."), + ) + })?) + }; + Ok(Self { + year: other.year.into(), + month: other.month.into(), + month_code, + era_year: other.era_year.into(), + era, + }) + } +} diff --git a/crates/temporal_capi/src/plain_date_time.rs b/crates/temporal_capi/src/plain_date_time.rs new file mode 100644 index 000000000..1cfe4c22a --- /dev/null +++ b/crates/temporal_capi/src/plain_date_time.rs @@ -0,0 +1,413 @@ +use crate::error::ffi::TemporalError; + +#[diplomat::bridge] +#[diplomat::abi_rename = "temporal_rs_{0}"] +pub mod ffi { + use crate::calendar::ffi::{AnyCalendarKind, Calendar}; + use crate::duration::ffi::Duration; + use crate::error::ffi::TemporalError; + use crate::instant::ffi::I128Nanoseconds; + use crate::options::ffi::{ + ArithmeticOverflow, DifferenceSettings, DisplayCalendar, RoundingOptions, + ToStringRoundingOptions, + }; + use crate::provider::ffi::Provider; + use crate::time_zone::ffi::TimeZone; + use crate::zoned_date_time::ffi::ZonedDateTime; + use alloc::boxed::Box; + + use crate::options::ffi::Disambiguation; + use crate::plain_date::ffi::{PartialDate, PlainDate}; + use crate::plain_time::ffi::{PartialTime, PlainTime}; + use alloc::string::String; + use core::fmt::Write; + use core::str::FromStr; + use diplomat_runtime::DiplomatWrite; + use diplomat_runtime::{DiplomatStr, DiplomatStr16}; + use writeable::Writeable; + + #[diplomat::opaque] + pub struct PlainDateTime(pub(crate) temporal::PlainDateTime); + + pub struct PartialDateTime<'a> { + pub date: PartialDate<'a>, + pub time: PartialTime, + } + + #[diplomat::opaque] + pub struct ParsedDateTime(temporal::parsed_intermediates::ParsedDateTime); + + impl ParsedDateTime { + pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { + temporal::parsed_intermediates::ParsedDateTime::from_utf8(s) + .map(|x| Box::new(ParsedDateTime(x))) + .map_err(Into::::into) + } + pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { + // TODO(#275) This should not need to convert + let s = String::from_utf16(s).map_err(|_| temporal::TemporalError::range())?; + + temporal::parsed_intermediates::ParsedDateTime::from_utf8(s.as_bytes()) + .map(|x| Box::new(ParsedDateTime(x))) + .map_err(Into::::into) + } + } + + impl PlainDateTime { + pub fn try_new_constrain( + year: i32, + month: u8, + day: u8, + hour: u8, + minute: u8, + second: u8, + millisecond: u16, + microsecond: u16, + nanosecond: u16, + calendar: AnyCalendarKind, + ) -> Result, TemporalError> { + temporal::PlainDateTime::new( + year, + month, + day, + hour, + minute, + second, + millisecond, + microsecond, + nanosecond, + temporal::Calendar::new(calendar.into()), + ) + .map(|x| Box::new(PlainDateTime(x))) + .map_err(Into::into) + } + pub fn try_new( + year: i32, + month: u8, + day: u8, + hour: u8, + minute: u8, + second: u8, + millisecond: u16, + microsecond: u16, + nanosecond: u16, + calendar: AnyCalendarKind, + ) -> Result, TemporalError> { + temporal::PlainDateTime::try_new( + year, + month, + day, + hour, + minute, + second, + millisecond, + microsecond, + nanosecond, + temporal::Calendar::new(calendar.into()), + ) + .map(|x| Box::new(PlainDateTime(x))) + .map_err(Into::into) + } + + pub fn from_partial( + partial: PartialDateTime, + overflow: Option, + ) -> Result, TemporalError> { + temporal::PlainDateTime::from_partial(partial.try_into()?, overflow.map(Into::into)) + .map(|x| Box::new(PlainDateTime(x))) + .map_err(Into::into) + } + + pub fn from_parsed(parsed: &ParsedDateTime) -> Result, TemporalError> { + temporal::PlainDateTime::from_parsed(parsed.0) + .map(|x| Box::new(PlainDateTime(x))) + .map_err(Into::into) + } + + #[cfg(feature = "compiled_data")] + pub fn from_epoch_milliseconds(ms: i64, tz: TimeZone) -> Result, TemporalError> { + Self::from_epoch_milliseconds_with_provider(ms, tz, &Provider::compiled()) + } + pub fn from_epoch_milliseconds_with_provider<'p>( + ms: i64, + tz: TimeZone, + p: &Provider<'p>, + ) -> Result, TemporalError> { + let zdt = crate::zoned_date_time::zdt_from_epoch_ms_with_provider(ms, tz.into(), p)?; + Ok(Box::new(Self(zdt.to_plain_date_time()))) + } + #[cfg(feature = "compiled_data")] + pub fn from_epoch_nanoseconds( + ns: I128Nanoseconds, + tz: TimeZone, + ) -> Result, TemporalError> { + Self::from_epoch_nanoseconds_with_provider(ns, tz, &Provider::compiled()) + } + pub fn from_epoch_nanoseconds_with_provider<'p>( + ns: I128Nanoseconds, + tz: TimeZone, + p: &Provider<'p>, + ) -> Result, TemporalError> { + let zdt = crate::zoned_date_time::zdt_from_epoch_ns_with_provider(ns, tz.into(), p)?; + Ok(Box::new(Self(zdt.to_plain_date_time()))) + } + pub fn with( + &self, + partial: PartialDateTime, + overflow: Option, + ) -> Result, TemporalError> { + self.0 + .with(partial.try_into()?, overflow.map(Into::into)) + .map(|x| Box::new(PlainDateTime(x))) + .map_err(Into::into) + } + + pub fn with_time(&self, time: Option<&PlainTime>) -> Result, TemporalError> { + self.0 + .with_time(time.map(|t| t.0)) + .map(|x| Box::new(PlainDateTime(x))) + .map_err(Into::into) + } + + pub fn with_calendar(&self, calendar: AnyCalendarKind) -> Box { + Box::new(PlainDateTime( + self.0 + .with_calendar(temporal::Calendar::new(calendar.into())), + )) + } + + pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { + temporal::PlainDateTime::from_utf8(s) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { + // TODO(#275) This should not need to convert + let s = String::from_utf16(s).map_err(|_| temporal::TemporalError::range())?; + temporal::PlainDateTime::from_str(&s) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn hour(&self) -> u8 { + self.0.hour() + } + pub fn minute(&self) -> u8 { + self.0.minute() + } + pub fn second(&self) -> u8 { + self.0.second() + } + pub fn millisecond(&self) -> u16 { + self.0.millisecond() + } + pub fn microsecond(&self) -> u16 { + self.0.microsecond() + } + pub fn nanosecond(&self) -> u16 { + self.0.nanosecond() + } + + pub fn calendar<'a>(&'a self) -> &'a Calendar { + Calendar::transparent_convert(self.0.calendar()) + } + + pub fn year(&self) -> i32 { + self.0.year() + } + pub fn month(&self) -> u8 { + self.0.month() + } + pub fn month_code(&self, write: &mut DiplomatWrite) { + let code = self.0.month_code(); + // throw away the error, this should always succeed + let _ = write.write_str(code.as_str()); + } + pub fn day(&self) -> u8 { + self.0.day() + } + pub fn day_of_week(&self) -> u16 { + self.0.day_of_week() + } + pub fn day_of_year(&self) -> u16 { + self.0.day_of_year() + } + pub fn week_of_year(&self) -> Option { + self.0.week_of_year() + } + pub fn year_of_week(&self) -> Option { + self.0.year_of_week() + } + pub fn days_in_week(&self) -> u16 { + self.0.days_in_week() + } + pub fn days_in_month(&self) -> u16 { + self.0.days_in_month() + } + pub fn days_in_year(&self) -> u16 { + self.0.days_in_year() + } + pub fn months_in_year(&self) -> u16 { + self.0.months_in_year() + } + pub fn in_leap_year(&self) -> bool { + self.0.in_leap_year() + } + // Writes an empty string for no era + pub fn era(&self, write: &mut DiplomatWrite) { + let era = self.0.era(); + if let Some(era) = era { + // throw away the error, this should always succeed + let _ = write.write_str(&era); + } + } + + pub fn era_year(&self) -> Option { + self.0.era_year() + } + + pub fn add( + &self, + duration: &Duration, + overflow: Option, + ) -> Result, TemporalError> { + self.0 + .add(&duration.0, overflow.map(Into::into)) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + pub fn subtract( + &self, + duration: &Duration, + overflow: Option, + ) -> Result, TemporalError> { + self.0 + .subtract(&duration.0, overflow.map(Into::into)) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + pub fn until( + &self, + other: &Self, + settings: DifferenceSettings, + ) -> Result, TemporalError> { + self.0 + .until(&other.0, settings.try_into()?) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + pub fn since( + &self, + other: &Self, + settings: DifferenceSettings, + ) -> Result, TemporalError> { + self.0 + .since(&other.0, settings.try_into()?) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + + pub fn equals(&self, other: &Self) -> bool { + self.0 == other.0 + } + + pub fn compare(one: &Self, two: &Self) -> core::cmp::Ordering { + one.0.compare_iso(&two.0) + } + + pub fn round(&self, options: RoundingOptions) -> Result, TemporalError> { + self.0 + .round(options.try_into()?) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + + pub fn to_plain_date(&self) -> Box { + Box::new(PlainDate(self.0.to_plain_date())) + } + + pub fn to_plain_time(&self) -> Box { + Box::new(PlainTime(self.0.to_plain_time())) + } + + #[cfg(feature = "compiled_data")] + pub fn to_zoned_date_time( + &self, + time_zone: TimeZone, + disambiguation: Disambiguation, + ) -> Result, TemporalError> { + self.to_zoned_date_time_with_provider(time_zone, disambiguation, &Provider::compiled()) + } + + pub fn to_zoned_date_time_with_provider<'p>( + &self, + time_zone: TimeZone, + disambiguation: Disambiguation, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| self.0.to_zoned_date_time_with_provider( + time_zone.into(), + disambiguation.into(), + p + )) + .map(|x| Box::new(ZonedDateTime(x))) + .map_err(Into::into) + } + + pub fn epoch_ms_for_utc(&self) -> Result { + let ns = self.0.epoch_ns_for_utc(); + + let ns_i128 = ns.as_i128(); + let ms = ns_i128 / 1_000_000; + if let Ok(ms) = i64::try_from(ms) { + Ok(ms) + } else { + Err(TemporalError::assert("Found an out-of-range DateTime")) + } + } + + pub fn to_ixdtf_string( + &self, + options: ToStringRoundingOptions, + + display_calendar: DisplayCalendar, + write: &mut DiplomatWrite, + ) -> Result<(), TemporalError> { + let writeable = self + .0 + .to_ixdtf_writeable(options.into(), display_calendar.into())?; + + // This can only fail in cases where the DiplomatWriteable is capped, we + // don't care about that. + let _ = writeable.write_to(write); + Ok(()) + } + + #[allow(clippy::should_implement_trait)] + pub fn clone(&self) -> Box { + Box::new(Self(self.0.clone())) + } + } +} + +impl TryFrom> for temporal::partial::PartialDateTime { + type Error = TemporalError; + fn try_from(other: ffi::PartialDateTime<'_>) -> Result { + let calendar = temporal::Calendar::new(other.date.calendar.into()); + Ok(Self { + fields: other.try_into()?, + calendar, + }) + } +} + +impl TryFrom> for temporal::fields::DateTimeFields { + type Error = TemporalError; + fn try_from(other: ffi::PartialDateTime<'_>) -> Result { + Ok(Self { + calendar_fields: other.date.try_into()?, + time: other.time.into(), + }) + } +} diff --git a/crates/temporal_capi/src/plain_month_day.rs b/crates/temporal_capi/src/plain_month_day.rs new file mode 100644 index 000000000..03ef81244 --- /dev/null +++ b/crates/temporal_capi/src/plain_month_day.rs @@ -0,0 +1,171 @@ +#[diplomat::bridge] +#[diplomat::abi_rename = "temporal_rs_{0}"] +pub mod ffi { + use crate::calendar::ffi::{AnyCalendarKind, Calendar}; + use crate::error::ffi::TemporalError; + use alloc::boxed::Box; + + use crate::options::ffi::{ArithmeticOverflow, DisplayCalendar}; + use crate::plain_date::ffi::{PartialDate, PlainDate}; + use crate::time_zone::ffi::TimeZone; + + use crate::provider::ffi::Provider; + use alloc::string::String; + use core::fmt::Write; + use core::str::FromStr; + use diplomat_runtime::DiplomatWrite; + use diplomat_runtime::{DiplomatStr, DiplomatStr16}; + use writeable::Writeable; + + #[diplomat::opaque] + pub struct PlainMonthDay(pub(crate) temporal::PlainMonthDay); + + impl PlainMonthDay { + pub fn try_new_with_overflow( + month: u8, + day: u8, + calendar: AnyCalendarKind, + overflow: ArithmeticOverflow, + ref_year: Option, + ) -> Result, TemporalError> { + temporal::PlainMonthDay::new_with_overflow( + month, + day, + temporal::Calendar::new(calendar.into()), + overflow.into(), + ref_year, + ) + .map(|x| Box::new(PlainMonthDay(x))) + .map_err(Into::into) + } + + pub fn from_partial( + partial: PartialDate, + overflow: Option, + ) -> Result, TemporalError> { + temporal::PlainMonthDay::from_partial(partial.try_into()?, overflow.map(Into::into)) + .map(|x| Box::new(PlainMonthDay(x))) + .map_err(Into::into) + } + pub fn from_parsed( + parsed: &crate::plain_date::ffi::ParsedDate, + ) -> Result, TemporalError> { + temporal::PlainMonthDay::from_parsed(parsed.0) + .map(|x| Box::new(PlainMonthDay(x))) + .map_err(Into::into) + } + + pub fn with( + &self, + partial: PartialDate, + overflow: Option, + ) -> Result, TemporalError> { + self.0 + .with(partial.try_into()?, overflow.map(Into::into)) + .map(|x| Box::new(PlainMonthDay(x))) + .map_err(Into::into) + } + + pub fn equals(&self, other: &Self) -> bool { + self.0 == other.0 + } + + pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { + temporal::PlainMonthDay::from_utf8(s) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { + // TODO(#275) This should not need to convert + let s = String::from_utf16(s).map_err(|_| temporal::TemporalError::range())?; + temporal::PlainMonthDay::from_str(&s) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn day(&self) -> u8 { + self.0.day() + } + + pub fn calendar<'a>(&'a self) -> &'a Calendar { + Calendar::transparent_convert(self.0.calendar()) + } + + pub fn month(&self) -> u8 { + self.0.month_code().to_month_integer() + } + + pub fn month_code(&self, write: &mut DiplomatWrite) { + let code = self.0.month_code(); + // throw away the error, this should always succeed + let _ = write.write_str(code.as_str()); + } + + pub fn reference_year(&self) -> i32 { + self.0.reference_year() + } + + pub fn to_plain_date( + &self, + year: Option, + ) -> Result, TemporalError> { + self.0 + .to_plain_date(year.map(|y| y.try_into()).transpose()?) + .map(|x| Box::new(PlainDate(x))) + .map_err(Into::into) + } + + pub fn epoch_ms_for_utc(&self) -> Result { + let ns = self.0.epoch_ns_for_utc(); + + let ns_i128 = ns.as_i128(); + let ms = ns_i128 / 1_000_000; + if let Ok(ms) = i64::try_from(ms) { + Ok(ms) + } else { + Err(TemporalError::assert("Found an out-of-range MonthDay")) + } + } + + #[cfg(feature = "compiled_data")] + pub fn epoch_ms_for(&self, time_zone: TimeZone) -> Result { + self.epoch_ms_for_with_provider(time_zone, &Provider::compiled()) + } + + pub fn epoch_ms_for_with_provider<'p>( + &self, + time_zone: TimeZone, + p: &Provider<'p>, + ) -> Result { + let ns = with_provider!(p, |p| self + .0 + .epoch_ns_for_with_provider(time_zone.into(), p) + .map_err(TemporalError::from))?; + + let ns_i128 = ns.as_i128(); + let ms = ns_i128 / 1_000_000; + if let Ok(ms) = i64::try_from(ms) { + Ok(ms) + } else { + Err(TemporalError::assert("Found an out-of-range MonthDay")) + } + } + + pub fn to_ixdtf_string( + &self, + display_calendar: DisplayCalendar, + write: &mut DiplomatWrite, + ) { + let writeable = self.0.to_ixdtf_writeable(display_calendar.into()); + // This can only fail in cases where the DiplomatWriteable is capped, we + // don't care about that. + let _ = writeable.write_to(write); + } + + #[allow(clippy::should_implement_trait)] + pub fn clone(&self) -> Box { + Box::new(Self(self.0.clone())) + } + } +} diff --git a/crates/temporal_capi/src/plain_time.rs b/crates/temporal_capi/src/plain_time.rs new file mode 100644 index 000000000..3b8d5321d --- /dev/null +++ b/crates/temporal_capi/src/plain_time.rs @@ -0,0 +1,244 @@ +#[diplomat::bridge] +#[diplomat::abi_rename = "temporal_rs_{0}"] +pub mod ffi { + use alloc::boxed::Box; + + use crate::duration::ffi::Duration; + use crate::error::ffi::TemporalError; + use crate::instant::ffi::I128Nanoseconds; + use crate::options::ffi::{ + ArithmeticOverflow, DifferenceSettings, RoundingOptions, ToStringRoundingOptions, + }; + use crate::provider::ffi::Provider; + use crate::time_zone::ffi::TimeZone; + use alloc::string::String; + use core::str::FromStr; + use diplomat_runtime::{DiplomatOption, DiplomatWrite}; + use diplomat_runtime::{DiplomatStr, DiplomatStr16}; + use writeable::Writeable; + + #[diplomat::opaque] + pub struct PlainTime(pub(crate) temporal::PlainTime); + + pub struct PartialTime { + pub hour: DiplomatOption, + pub minute: DiplomatOption, + pub second: DiplomatOption, + pub millisecond: DiplomatOption, + pub microsecond: DiplomatOption, + pub nanosecond: DiplomatOption, + } + + impl PlainTime { + pub fn try_new_constrain( + hour: u8, + minute: u8, + second: u8, + millisecond: u16, + microsecond: u16, + nanosecond: u16, + ) -> Result, TemporalError> { + temporal::PlainTime::new(hour, minute, second, millisecond, microsecond, nanosecond) + .map(|x| Box::new(PlainTime(x))) + .map_err(Into::into) + } + pub fn try_new( + hour: u8, + minute: u8, + second: u8, + millisecond: u16, + microsecond: u16, + nanosecond: u16, + ) -> Result, TemporalError> { + temporal::PlainTime::try_new(hour, minute, second, millisecond, microsecond, nanosecond) + .map(|x| Box::new(PlainTime(x))) + .map_err(Into::into) + } + + pub fn from_partial( + partial: PartialTime, + overflow: Option, + ) -> Result, TemporalError> { + temporal::PlainTime::from_partial(partial.into(), overflow.map(Into::into)) + .map(|x| Box::new(PlainTime(x))) + .map_err(Into::into) + } + + #[cfg(feature = "compiled_data")] + pub fn from_epoch_milliseconds(ms: i64, tz: TimeZone) -> Result, TemporalError> { + Self::from_epoch_milliseconds_with_provider(ms, tz, &Provider::compiled()) + } + pub fn from_epoch_milliseconds_with_provider<'p>( + ms: i64, + tz: TimeZone, + p: &Provider<'p>, + ) -> Result, TemporalError> { + let zdt = crate::zoned_date_time::zdt_from_epoch_ms_with_provider(ms, tz.into(), p)?; + Ok(Box::new(Self(zdt.to_plain_time()))) + } + + #[cfg(feature = "compiled_data")] + pub fn from_epoch_nanoseconds( + ns: I128Nanoseconds, + tz: TimeZone, + ) -> Result, TemporalError> { + Self::from_epoch_nanoseconds_with_provider(ns, tz, &Provider::compiled()) + } + pub fn from_epoch_nanoseconds_with_provider<'p>( + ns: I128Nanoseconds, + tz: TimeZone, + p: &Provider<'p>, + ) -> Result, TemporalError> { + let zdt = crate::zoned_date_time::zdt_from_epoch_ns_with_provider(ns, tz.into(), p)?; + Ok(Box::new(Self(zdt.to_plain_time()))) + } + + pub fn epoch_ms_for_utc(&self) -> Result { + let ns = self.0.epoch_ns_for_utc(); + + let ns_i128 = ns.as_i128(); + let ms = ns_i128 / 1_000_000; + if let Ok(ms) = i64::try_from(ms) { + Ok(ms) + } else { + Err(TemporalError::assert("Found an out-of-range Time")) + } + } + + pub fn with( + &self, + partial: PartialTime, + overflow: Option, + ) -> Result, TemporalError> { + self.0 + .with(partial.into(), overflow.map(Into::into)) + .map(|x| Box::new(PlainTime(x))) + .map_err(Into::into) + } + + pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { + temporal::PlainTime::from_utf8(s) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { + // TODO(#275) This should not need to convert + let s = String::from_utf16(s).map_err(|_| temporal::TemporalError::range())?; + temporal::PlainTime::from_str(&s) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn hour(&self) -> u8 { + self.0.hour() + } + pub fn minute(&self) -> u8 { + self.0.minute() + } + pub fn second(&self) -> u8 { + self.0.second() + } + pub fn millisecond(&self) -> u16 { + self.0.millisecond() + } + pub fn microsecond(&self) -> u16 { + self.0.microsecond() + } + pub fn nanosecond(&self) -> u16 { + self.0.nanosecond() + } + + pub fn add(&self, duration: &Duration) -> Result, TemporalError> { + self.0 + .add(&duration.0) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + pub fn subtract(&self, duration: &Duration) -> Result, TemporalError> { + self.0 + .subtract(&duration.0) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + pub fn until( + &self, + other: &Self, + settings: DifferenceSettings, + ) -> Result, TemporalError> { + self.0 + .until(&other.0, settings.try_into()?) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + pub fn since( + &self, + other: &Self, + settings: DifferenceSettings, + ) -> Result, TemporalError> { + self.0 + .since(&other.0, settings.try_into()?) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + pub fn equals(&self, other: &Self) -> bool { + self.0 == other.0 + } + pub fn compare(one: &Self, two: &Self) -> core::cmp::Ordering { + let tuple1 = ( + one.hour(), + one.minute(), + one.second(), + one.millisecond(), + one.microsecond(), + one.nanosecond(), + ); + let tuple2 = ( + two.hour(), + two.minute(), + two.second(), + two.millisecond(), + two.microsecond(), + two.nanosecond(), + ); + + tuple1.cmp(&tuple2) + } + pub fn round(&self, options: RoundingOptions) -> Result, TemporalError> { + self.0 + .round(options.try_into()?) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + pub fn to_ixdtf_string( + &self, + options: ToStringRoundingOptions, + write: &mut DiplomatWrite, + ) -> Result<(), TemporalError> { + let writeable = self.0.to_ixdtf_writeable(options.into())?; + // This can only fail in cases where the DiplomatWriteable is capped, we + // don't care about that. + let _ = writeable.write_to(write); + + Ok(()) + } + + #[allow(clippy::should_implement_trait)] + pub fn clone(&self) -> Box { + Box::new(Self(self.0)) + } + } +} + +impl From for temporal::partial::PartialTime { + fn from(other: ffi::PartialTime) -> Self { + Self { + hour: other.hour.into(), + minute: other.minute.into(), + second: other.second.into(), + millisecond: other.millisecond.into(), + microsecond: other.microsecond.into(), + nanosecond: other.nanosecond.into(), + } + } +} diff --git a/crates/temporal_capi/src/plain_year_month.rs b/crates/temporal_capi/src/plain_year_month.rs new file mode 100644 index 000000000..107b091bb --- /dev/null +++ b/crates/temporal_capi/src/plain_year_month.rs @@ -0,0 +1,237 @@ +#[diplomat::bridge] +#[diplomat::abi_rename = "temporal_rs_{0}"] +pub mod ffi { + use crate::calendar::ffi::{AnyCalendarKind, Calendar}; + use crate::duration::ffi::Duration; + use crate::error::ffi::TemporalError; + use crate::provider::ffi::Provider; + use crate::time_zone::ffi::TimeZone; + use alloc::boxed::Box; + + use crate::options::ffi::{ArithmeticOverflow, DifferenceSettings, DisplayCalendar}; + use crate::plain_date::ffi::{PartialDate, PlainDate}; + use alloc::string::String; + use core::fmt::Write; + use diplomat_runtime::DiplomatWrite; + use diplomat_runtime::{DiplomatStr, DiplomatStr16}; + use writeable::Writeable; + + use core::str::FromStr; + + #[diplomat::opaque] + pub struct PlainYearMonth(pub(crate) temporal::PlainYearMonth); + + impl PlainYearMonth { + pub fn try_new_with_overflow( + year: i32, + month: u8, + reference_day: Option, + calendar: AnyCalendarKind, + overflow: ArithmeticOverflow, + ) -> Result, TemporalError> { + temporal::PlainYearMonth::new_with_overflow( + year, + month, + reference_day, + temporal::Calendar::new(calendar.into()), + overflow.into(), + ) + .map(|x| Box::new(PlainYearMonth(x))) + .map_err(Into::into) + } + + pub fn from_partial( + partial: PartialDate, + overflow: Option, + ) -> Result, TemporalError> { + temporal::PlainYearMonth::from_partial(partial.try_into()?, overflow.map(Into::into)) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + + pub fn from_parsed( + parsed: &crate::plain_date::ffi::ParsedDate, + ) -> Result, TemporalError> { + temporal::PlainYearMonth::from_parsed(parsed.0) + .map(|x| Box::new(PlainYearMonth(x))) + .map_err(Into::into) + } + + pub fn with( + &self, + partial: PartialDate, + overflow: Option, + ) -> Result, TemporalError> { + let fields: temporal::fields::YearMonthCalendarFields = partial.try_into()?; + self.0 + .with(fields, overflow.map(Into::into)) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + + pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { + temporal::PlainYearMonth::from_utf8(s) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { + // TODO(#275) This should not need to convert + let s = String::from_utf16(s).map_err(|_| temporal::TemporalError::range())?; + temporal::PlainYearMonth::from_str(&s) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn year(&self) -> i32 { + self.0.year() + } + pub fn month(&self) -> u8 { + self.0.month() + } + pub fn month_code(&self, write: &mut DiplomatWrite) { + let code = self.0.month_code(); + // throw away the error, this should always succeed + let _ = write.write_str(code.as_str()); + } + + pub fn in_leap_year(&self) -> bool { + self.0.in_leap_year() + } + pub fn days_in_month(&self) -> u16 { + self.0.days_in_month() + } + pub fn days_in_year(&self) -> u16 { + self.0.days_in_year() + } + pub fn months_in_year(&self) -> u16 { + self.0.months_in_year() + } + // Writes an empty string for no era + pub fn era(&self, write: &mut DiplomatWrite) { + let era = self.0.era(); + if let Some(era) = era { + // throw away the error, this should always succeed + let _ = write.write_str(&era); + } + } + + pub fn era_year(&self) -> Option { + self.0.era_year() + } + + pub fn reference_day(&self) -> u8 { + self.0.reference_day() + } + + pub fn calendar<'a>(&'a self) -> &'a Calendar { + Calendar::transparent_convert(self.0.calendar()) + } + pub fn add( + &self, + duration: &Duration, + overflow: ArithmeticOverflow, + ) -> Result, TemporalError> { + self.0 + .add(&duration.0, overflow.into()) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + pub fn subtract( + &self, + duration: &Duration, + overflow: ArithmeticOverflow, + ) -> Result, TemporalError> { + self.0 + .subtract(&duration.0, overflow.into()) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + pub fn until( + &self, + other: &Self, + settings: DifferenceSettings, + ) -> Result, TemporalError> { + self.0 + .until(&other.0, settings.try_into()?) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + pub fn since( + &self, + other: &Self, + settings: DifferenceSettings, + ) -> Result, TemporalError> { + self.0 + .since(&other.0, settings.try_into()?) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + pub fn equals(&self, other: &Self) -> bool { + self.0 == other.0 + } + pub fn compare(one: &Self, two: &Self) -> core::cmp::Ordering { + one.0.compare_iso(&two.0) + } + pub fn to_plain_date( + &self, + day: Option, + ) -> Result, TemporalError> { + self.0 + .to_plain_date(day.map(|d| d.try_into()).transpose()?) + .map(|x| Box::new(PlainDate(x))) + .map_err(Into::into) + } + + pub fn epoch_ms_for_utc(&self) -> Result { + let ns = self.0.epoch_ns_for_utc(); + + let ns_i128 = ns.as_i128(); + let ms = ns_i128 / 1_000_000; + if let Ok(ms) = i64::try_from(ms) { + Ok(ms) + } else { + Err(TemporalError::assert("Found an out-of-range YearMonth")) + } + } + + #[cfg(feature = "compiled_data")] + pub fn epoch_ms_for(&self, time_zone: TimeZone) -> Result { + self.epoch_ms_for_with_provider(time_zone, &Provider::compiled()) + } + pub fn epoch_ms_for_with_provider<'p>( + &self, + time_zone: TimeZone, + p: &Provider<'p>, + ) -> Result { + let ns = with_provider!(p, |p| self + .0 + .epoch_ns_for_with_provider(time_zone.into(), p)) + .map_err(TemporalError::from)?; + + let ns_i128 = ns.as_i128(); + let ms = ns_i128 / 1_000_000; + if let Ok(ms) = i64::try_from(ms) { + Ok(ms) + } else { + Err(TemporalError::assert("Found an out-of-range YearMonth")) + } + } + + pub fn to_ixdtf_string( + &self, + display_calendar: DisplayCalendar, + write: &mut DiplomatWrite, + ) { + let writeable = self.0.to_ixdtf_writeable(display_calendar.into()); + // This can only fail in cases where the DiplomatWriteable is capped, we + // don't care about that. + let _ = writeable.write_to(write); + } + + #[allow(clippy::should_implement_trait)] + pub fn clone(&self) -> Box { + Box::new(Self(self.0.clone())) + } + } +} diff --git a/temporal_capi/src/provider.rs b/crates/temporal_capi/src/provider.rs similarity index 97% rename from temporal_capi/src/provider.rs rename to crates/temporal_capi/src/provider.rs index 70b4e39ef..3e14ce5ad 100644 --- a/temporal_capi/src/provider.rs +++ b/crates/temporal_capi/src/provider.rs @@ -14,7 +14,7 @@ macro_rules! with_provider( } #[cfg(feature = "compiled_data")] crate::provider::ProviderInner::Compiled => { - let $p = &*temporal_rs::provider::COMPILED_TZ_PROVIDER; + let $p = &*temporal::provider::COMPILED_TZ_PROVIDER; $code } crate::provider::ProviderInner::Empty(..) => { diff --git a/temporal_capi/src/time_zone.rs b/crates/temporal_capi/src/time_zone.rs similarity index 81% rename from temporal_capi/src/time_zone.rs rename to crates/temporal_capi/src/time_zone.rs index 60cb33bdf..fa510581a 100644 --- a/temporal_capi/src/time_zone.rs +++ b/crates/temporal_capi/src/time_zone.rs @@ -1,5 +1,5 @@ -use temporal_rs::provider::TimeZoneId; -use temporal_rs::UtcOffset; +use temporal::provider::TimeZoneId; +use temporal::UtcOffset; use timezone_provider::provider::{NormalizedId, ResolvedId}; #[diplomat::bridge] @@ -35,17 +35,17 @@ pub mod ffi { p: &Provider<'p>, ) -> Result { let Ok(ident) = core::str::from_utf8(ident) else { - return Err(temporal_rs::TemporalError::range().into()); + return Err(temporal::TemporalError::range().into()); }; with_provider!(p, |p| { - temporal_rs::TimeZone::try_from_identifier_str_with_provider(ident, p) + temporal::TimeZone::try_from_identifier_str_with_provider(ident, p) }) .map(Into::into) .map_err(Into::into) } pub fn try_from_offset_str(ident: &DiplomatStr) -> Result { - temporal_rs::UtcOffset::from_utf8(ident) - .map(|x| temporal_rs::TimeZone::UtcOffset(x).into()) + temporal::UtcOffset::from_utf8(ident) + .map(|x| temporal::TimeZone::UtcOffset(x).into()) .map_err(Into::into) } #[cfg(feature = "compiled_data")] @@ -57,9 +57,9 @@ pub mod ffi { p: &Provider<'p>, ) -> Result { let Ok(ident) = core::str::from_utf8(ident) else { - return Err(temporal_rs::TemporalError::range().into()); + return Err(temporal::TemporalError::range().into()); }; - with_provider!(p, |p| temporal_rs::TimeZone::try_from_str_with_provider( + with_provider!(p, |p| temporal::TimeZone::try_from_str_with_provider( ident, p )) .map(Into::into) @@ -88,11 +88,11 @@ pub mod ffi { #[cfg(feature = "compiled_data")] pub fn utc() -> Self { - temporal_rs::TimeZone::utc().into() + temporal::TimeZone::utc().into() } pub fn utc_with_provider<'p>(p: &Provider<'p>) -> Result { - Ok(with_provider!(p, |p| { temporal_rs::TimeZone::utc_with_provider(p) }).into()) + Ok(with_provider!(p, |p| { temporal::TimeZone::utc_with_provider(p) }).into()) } /// Create a TimeZone that represents +00:00 @@ -100,7 +100,7 @@ pub mod ffi { /// This is the only way to infallibly make a TimeZone without compiled_data, /// and can be used as a fallback. pub fn zero() -> Self { - temporal_rs::TimeZone::UtcOffset(Default::default()).into() + temporal::TimeZone::UtcOffset(Default::default()).into() } /// Get the primary time zone identifier corresponding to this time zone @@ -117,13 +117,13 @@ pub mod ffi { .map_err(Into::into) } - pub(crate) fn tz(self) -> temporal_rs::TimeZone { + pub(crate) fn tz(self) -> temporal::TimeZone { self.into() } } } -impl From for temporal_rs::TimeZone { +impl From for temporal::TimeZone { fn from(other: ffi::TimeZone) -> Self { if other.is_iana_id { Self::IanaIdentifier(TimeZoneId { @@ -136,16 +136,16 @@ impl From for temporal_rs::TimeZone { } } -impl From for ffi::TimeZone { - fn from(other: temporal_rs::TimeZone) -> Self { +impl From for ffi::TimeZone { + fn from(other: temporal::TimeZone) -> Self { match other { - temporal_rs::TimeZone::UtcOffset(offset) => Self { + temporal::TimeZone::UtcOffset(offset) => Self { offset_minutes: offset.minutes(), is_iana_id: false, normalized_id: 0, resolved_id: 0, }, - temporal_rs::TimeZone::IanaIdentifier(id) => Self { + temporal::TimeZone::IanaIdentifier(id) => Self { normalized_id: id.normalized.0, resolved_id: id.resolved.0, is_iana_id: true, diff --git a/crates/temporal_capi/src/zoned_date_time.rs b/crates/temporal_capi/src/zoned_date_time.rs new file mode 100644 index 000000000..9530bea94 --- /dev/null +++ b/crates/temporal_capi/src/zoned_date_time.rs @@ -0,0 +1,801 @@ +use crate::error::ffi::TemporalError; +use crate::instant::ffi::I128Nanoseconds; +use crate::provider::ffi::Provider; +use temporal::options::RelativeTo; + +#[diplomat::bridge] +#[diplomat::abi_rename = "temporal_rs_{0}"] +pub mod ffi { + use crate::calendar::ffi::AnyCalendarKind; + use crate::calendar::ffi::Calendar; + use crate::duration::ffi::Duration; + use crate::error::ffi::TemporalError; + use crate::plain_date::ffi::{PartialDate, PlainDate}; + use crate::plain_date_time::ffi::PlainDateTime; + use crate::plain_time::ffi::{PartialTime, PlainTime}; + use alloc::boxed::Box; + + use crate::provider::ffi::Provider; + + use crate::instant::ffi::I128Nanoseconds; + use crate::instant::ffi::Instant; + use crate::options::ffi::{ + ArithmeticOverflow, DifferenceSettings, Disambiguation, DisplayCalendar, DisplayOffset, + DisplayTimeZone, OffsetDisambiguation, RoundingOptions, ToStringRoundingOptions, + TransitionDirection, + }; + + use crate::time_zone::ffi::TimeZone; + + use alloc::string::String; + use core::fmt::Write; + + use diplomat_runtime::DiplomatOption; + use diplomat_runtime::DiplomatStrSlice; + use diplomat_runtime::DiplomatWrite; + + pub struct PartialZonedDateTime<'a> { + pub date: PartialDate<'a>, + pub time: PartialTime, + pub offset: DiplomatOption>, + pub timezone: DiplomatOption, + } + + pub struct RelativeTo<'a> { + pub date: Option<&'a PlainDate>, + pub zoned: Option<&'a ZonedDateTime>, + } + + /// GetTemporalRelativeToOption can create fresh PlainDate/ZonedDateTimes by parsing them, + /// we need a way to produce that result. + #[diplomat::out] + pub struct OwnedRelativeTo { + pub date: Option>, + pub zoned: Option>, + } + + impl OwnedRelativeTo { + #[cfg(feature = "compiled_data")] + pub fn from_utf8(s: &DiplomatStr) -> Result { + Self::from_utf8_with_provider(s, &Provider::compiled()) + } + pub fn from_utf8_with_provider<'p>( + s: &DiplomatStr, + p: &Provider<'p>, + ) -> Result { + // TODO(#275) This should not need to check + let s = core::str::from_utf8(s).map_err(|_| temporal::TemporalError::range())?; + + with_provider!(p, |p| super::RelativeTo::try_from_str_with_provider(s, p)) + .map(Into::into) + .map_err(Into::::into) + } + + #[cfg(feature = "compiled_data")] + pub fn from_utf16(s: &DiplomatStr16) -> Result { + Self::from_utf16_with_provider(s, &Provider::compiled()) + } + pub fn from_utf16_with_provider<'p>( + s: &DiplomatStr16, + p: &Provider<'p>, + ) -> Result { + // TODO(#275) This should not need to convert + let s = String::from_utf16(s).map_err(|_| temporal::TemporalError::range())?; + with_provider!(p, |p| super::RelativeTo::try_from_str_with_provider(&s, p)) + .map(Into::into) + .map_err(Into::::into) + } + + pub fn empty() -> Self { + Self { + date: None, + zoned: None, + } + } + } + + #[diplomat::opaque] + pub struct ParsedZonedDateTime(temporal::parsed_intermediates::ParsedZonedDateTime); + + impl ParsedZonedDateTime { + #[cfg(feature = "compiled_data")] + pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { + Self::from_utf8_with_provider(s, &Provider::compiled()) + } + pub fn from_utf8_with_provider<'p>( + s: &DiplomatStr, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| { + temporal::parsed_intermediates::ParsedZonedDateTime::from_utf8_with_provider(s, p) + }) + .map(|x| Box::new(ParsedZonedDateTime(x))) + .map_err(Into::::into) + } + + #[cfg(feature = "compiled_data")] + pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { + Self::from_utf16_with_provider(s, &Provider::compiled()) + } + pub fn from_utf16_with_provider<'p>( + s: &DiplomatStr16, + p: &Provider<'p>, + ) -> Result, TemporalError> { + // TODO(#275) This should not need to convert + let s = String::from_utf16(s).map_err(|_| temporal::TemporalError::range())?; + + with_provider!(p, |p| { + temporal::parsed_intermediates::ParsedZonedDateTime::from_utf8_with_provider( + s.as_bytes(), + p, + ) + }) + .map(|x| Box::new(ParsedZonedDateTime(x))) + .map_err(Into::::into) + } + } + + #[diplomat::opaque] + pub struct ZonedDateTime(pub(crate) temporal::ZonedDateTime); + + impl ZonedDateTime { + #[cfg(feature = "compiled_data")] + pub fn try_new( + nanosecond: I128Nanoseconds, + calendar: AnyCalendarKind, + time_zone: TimeZone, + ) -> Result, TemporalError> { + Self::try_new_with_provider(nanosecond, calendar, time_zone, &Provider::compiled()) + } + pub fn try_new_with_provider<'p>( + nanosecond: I128Nanoseconds, + calendar: AnyCalendarKind, + time_zone: TimeZone, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| temporal::ZonedDateTime::try_new_with_provider( + nanosecond.into(), + time_zone.into(), + temporal::Calendar::new(calendar.into()), + p + )) + .map(|x| Box::new(ZonedDateTime(x))) + .map_err(Into::into) + } + #[cfg(feature = "compiled_data")] + pub fn from_partial( + partial: PartialZonedDateTime, + overflow: Option, + disambiguation: Option, + offset_option: Option, + ) -> Result, TemporalError> { + Self::from_partial_with_provider( + partial, + overflow, + disambiguation, + offset_option, + &Provider::compiled(), + ) + } + pub fn from_partial_with_provider<'p>( + partial: PartialZonedDateTime, + overflow: Option, + disambiguation: Option, + offset_option: Option, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| { + temporal::ZonedDateTime::from_partial_with_provider( + partial.try_into()?, + overflow.map(Into::into), + disambiguation.map(Into::into), + offset_option.map(Into::into), + p, + ) + }) + .map(|x| Box::new(ZonedDateTime(x))) + .map_err(Into::into) + } + #[cfg(feature = "compiled_data")] + pub fn from_parsed( + parsed: &ParsedZonedDateTime, + disambiguation: Disambiguation, + offset_option: OffsetDisambiguation, + ) -> Result, TemporalError> { + Self::from_parsed_with_provider( + parsed, + disambiguation, + offset_option, + &Provider::compiled(), + ) + } + pub fn from_parsed_with_provider<'p>( + parsed: &ParsedZonedDateTime, + disambiguation: Disambiguation, + offset_option: OffsetDisambiguation, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| temporal::ZonedDateTime::from_parsed_with_provider( + parsed.0.clone(), + disambiguation.into(), + offset_option.into(), + p + )) + .map(|x| Box::new(ZonedDateTime(x))) + .map_err(Into::into) + } + #[cfg(feature = "compiled_data")] + pub fn from_utf8( + s: &DiplomatStr, + disambiguation: Disambiguation, + offset_disambiguation: OffsetDisambiguation, + ) -> Result, TemporalError> { + Self::from_utf8_with_provider( + s, + disambiguation, + offset_disambiguation, + &Provider::compiled(), + ) + } + pub fn from_utf8_with_provider<'p>( + s: &DiplomatStr, + disambiguation: Disambiguation, + offset_disambiguation: OffsetDisambiguation, + p: &Provider<'p>, + ) -> Result, TemporalError> { + // TODO(#275) This should not need to check + with_provider!(p, |p| temporal::ZonedDateTime::from_utf8_with_provider( + s, + disambiguation.into(), + offset_disambiguation.into(), + p + )) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + #[cfg(feature = "compiled_data")] + pub fn from_utf16( + s: &DiplomatStr16, + disambiguation: Disambiguation, + offset_disambiguation: OffsetDisambiguation, + ) -> Result, TemporalError> { + Self::from_utf16_with_provider( + s, + disambiguation, + offset_disambiguation, + &Provider::compiled(), + ) + } + pub fn from_utf16_with_provider<'p>( + s: &DiplomatStr16, + disambiguation: Disambiguation, + offset_disambiguation: OffsetDisambiguation, + p: &Provider<'p>, + ) -> Result, TemporalError> { + // TODO(#275) This should not need to convert + let s = String::from_utf16(s).map_err(|_| temporal::TemporalError::range())?; + with_provider!(p, |p| temporal::ZonedDateTime::from_utf8_with_provider( + s.as_bytes(), + disambiguation.into(), + offset_disambiguation.into(), + p + )) + .map(|c| Box::new(Self(c))) + .map_err(Into::into) + } + + pub fn epoch_milliseconds(&self) -> i64 { + self.0.epoch_milliseconds() + } + + #[cfg(feature = "compiled_data")] + pub fn from_epoch_milliseconds(ms: i64, tz: TimeZone) -> Result, TemporalError> { + Self::from_epoch_milliseconds_with_provider(ms, tz, &Provider::compiled()) + } + pub fn from_epoch_milliseconds_with_provider<'p>( + ms: i64, + tz: TimeZone, + p: &Provider<'p>, + ) -> Result, TemporalError> { + super::zdt_from_epoch_ms_with_provider(ms, tz.into(), p).map(|c| Box::new(Self(c))) + } + + #[cfg(feature = "compiled_data")] + pub fn from_epoch_nanoseconds( + ns: I128Nanoseconds, + tz: TimeZone, + ) -> Result, TemporalError> { + Self::from_epoch_nanoseconds_with_provider(ns, tz, &Provider::compiled()) + } + pub fn from_epoch_nanoseconds_with_provider<'p>( + ns: I128Nanoseconds, + tz: TimeZone, + p: &Provider<'p>, + ) -> Result, TemporalError> { + let zdt = crate::zoned_date_time::zdt_from_epoch_ns_with_provider(ns, tz.into(), p)?; + Ok(Box::new(Self(zdt))) + } + + pub fn epoch_nanoseconds(&self) -> I128Nanoseconds { + self.0.epoch_nanoseconds().as_i128().into() + } + + pub fn offset_nanoseconds(&self) -> i64 { + self.0.offset_nanoseconds() + } + + pub fn to_instant(&self) -> Box { + Box::new(Instant(self.0.to_instant())) + } + + #[cfg(feature = "compiled_data")] + pub fn with( + &self, + partial: PartialZonedDateTime, + disambiguation: Option, + offset_option: Option, + overflow: Option, + ) -> Result, TemporalError> { + self.with_with_provider( + partial, + disambiguation, + offset_option, + overflow, + &Provider::compiled(), + ) + } + pub fn with_with_provider<'p>( + &self, + partial: PartialZonedDateTime, + disambiguation: Option, + offset_option: Option, + overflow: Option, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| self.0.with_with_provider( + partial.try_into()?, + disambiguation.map(Into::into), + offset_option.map(Into::into), + overflow.map(Into::into), + p + )) + .map(|x| Box::new(ZonedDateTime(x))) + .map_err(Into::into) + } + + #[cfg(feature = "compiled_data")] + pub fn with_timezone(&self, zone: TimeZone) -> Result, TemporalError> { + self.with_timezone_with_provider(zone, &Provider::compiled()) + } + pub fn with_timezone_with_provider<'p>( + &self, + zone: TimeZone, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| self.0.with_time_zone_with_provider(zone.into(), p)) + .map(|x| Box::new(ZonedDateTime(x))) + .map_err(Into::into) + } + + pub fn timezone(&self) -> TimeZone { + TimeZone::from(*self.0.time_zone()) + } + + pub fn compare_instant(&self, other: &Self) -> core::cmp::Ordering { + self.0.compare_instant(&other.0) + } + + #[cfg(feature = "compiled_data")] + pub fn equals(&self, other: &Self) -> bool { + self.equals_with_provider(other, &Provider::compiled()) + .unwrap_or(false) + } + pub fn equals_with_provider<'p>( + &self, + other: &Self, + p: &Provider<'p>, + ) -> Result { + with_provider!(p, |p| self.0.equals_with_provider(&other.0, p)).map_err(Into::into) + } + + pub fn offset(&self, write: &mut DiplomatWrite) -> Result<(), TemporalError> { + let string = self.0.offset(); + // throw away the error, this should always succeed + let _ = write.write_str(&string); + Ok(()) + } + + #[cfg(feature = "compiled_data")] + pub fn start_of_day(&self) -> Result, TemporalError> { + self.start_of_day_with_provider(&Provider::compiled()) + } + pub fn start_of_day_with_provider<'p>( + &self, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| self.0.start_of_day_with_provider(p)) + .map(|x| Box::new(ZonedDateTime(x))) + .map_err(Into::into) + } + + #[cfg(feature = "compiled_data")] + pub fn get_time_zone_transition( + &self, + direction: TransitionDirection, + ) -> Result>, TemporalError> { + self.get_time_zone_transition_with_provider(direction, &Provider::compiled()) + } + pub fn get_time_zone_transition_with_provider<'p>( + &self, + direction: TransitionDirection, + p: &Provider<'p>, + ) -> Result>, TemporalError> { + with_provider!(p, |p| self + .0 + .get_time_zone_transition_with_provider(direction.into(), p)) + .map(|x| x.map(|y| Box::new(ZonedDateTime(y)))) + .map_err(Into::into) + } + + #[cfg(feature = "compiled_data")] + pub fn hours_in_day(&self) -> Result { + self.hours_in_day_with_provider(&Provider::compiled()) + } + pub fn hours_in_day_with_provider<'p>( + &self, + p: &Provider<'p>, + ) -> Result { + with_provider!(p, |p| self.0.hours_in_day_with_provider(p)).map_err(Into::into) + } + + pub fn to_plain_datetime(&self) -> Box { + Box::new(PlainDateTime(self.0.to_plain_date_time())) + } + + pub fn to_plain_date(&self) -> Box { + Box::new(PlainDate(self.0.to_plain_date())) + } + + pub fn to_plain_time(&self) -> Box { + Box::new(PlainTime(self.0.to_plain_time())) + } + + #[cfg(feature = "compiled_data")] + pub fn to_ixdtf_string( + &self, + display_offset: DisplayOffset, + display_timezone: DisplayTimeZone, + display_calendar: DisplayCalendar, + options: ToStringRoundingOptions, + write: &mut DiplomatWrite, + ) -> Result<(), TemporalError> { + self.to_ixdtf_string_with_provider( + display_offset, + display_timezone, + display_calendar, + options, + &Provider::compiled(), + write, + ) + } + pub fn to_ixdtf_string_with_provider<'p>( + &self, + display_offset: DisplayOffset, + display_timezone: DisplayTimeZone, + display_calendar: DisplayCalendar, + options: ToStringRoundingOptions, + p: &Provider<'p>, + write: &mut DiplomatWrite, + ) -> Result<(), TemporalError> { + // TODO this double-allocates, an API returning a Writeable or impl Write would be better + let string = with_provider!(p, |p| self.0.to_ixdtf_string_with_provider( + display_offset.into(), + display_timezone.into(), + display_calendar.into(), + options.into(), + p + )?); + // throw away the error, this should always succeed + let _ = write.write_str(&string); + Ok(()) + } + + // Same as PlainDateTime (non-getters) + pub fn with_calendar(&self, calendar: AnyCalendarKind) -> Box { + Box::new(ZonedDateTime( + self.0 + .with_calendar(temporal::Calendar::new(calendar.into())), + )) + } + #[cfg(feature = "compiled_data")] + pub fn with_plain_time( + &self, + time: Option<&PlainTime>, + ) -> Result, TemporalError> { + self.with_plain_time_and_provider(time, &Provider::compiled()) + } + pub fn with_plain_time_and_provider<'p>( + &self, + time: Option<&PlainTime>, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| self + .0 + .with_plain_time_and_provider(time.map(|t| t.0), p)) + .map(|x| Box::new(ZonedDateTime(x))) + .map_err(Into::into) + } + #[cfg(feature = "compiled_data")] + pub fn add( + &self, + duration: &Duration, + overflow: Option, + ) -> Result, TemporalError> { + self.add_with_provider(duration, overflow, &Provider::compiled()) + } + pub fn add_with_provider<'p>( + &self, + duration: &Duration, + overflow: Option, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| self.0.add_with_provider( + &duration.0, + overflow.map(Into::into), + p + )) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + #[cfg(feature = "compiled_data")] + pub fn subtract( + &self, + duration: &Duration, + overflow: Option, + ) -> Result, TemporalError> { + self.subtract_with_provider(duration, overflow, &Provider::compiled()) + } + pub fn subtract_with_provider<'p>( + &self, + duration: &Duration, + overflow: Option, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| self.0.subtract_with_provider( + &duration.0, + overflow.map(Into::into), + p + )) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + #[cfg(feature = "compiled_data")] + pub fn until( + &self, + other: &Self, + settings: DifferenceSettings, + ) -> Result, TemporalError> { + self.until_with_provider(other, settings, &Provider::compiled()) + } + pub fn until_with_provider<'p>( + &self, + other: &Self, + settings: DifferenceSettings, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| self.0.until_with_provider( + &other.0, + settings.try_into()?, + p + )) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + #[cfg(feature = "compiled_data")] + pub fn since( + &self, + other: &Self, + settings: DifferenceSettings, + ) -> Result, TemporalError> { + self.since_with_provider(other, settings, &Provider::compiled()) + } + pub fn since_with_provider<'p>( + &self, + other: &Self, + settings: DifferenceSettings, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| self.0.since_with_provider( + &other.0, + settings.try_into()?, + p + )) + .map(|x| Box::new(Duration(x))) + .map_err(Into::into) + } + #[cfg(feature = "compiled_data")] + pub fn round(&self, options: RoundingOptions) -> Result, TemporalError> { + self.round_with_provider(options, &Provider::compiled()) + } + pub fn round_with_provider<'p>( + &self, + options: RoundingOptions, + p: &Provider<'p>, + ) -> Result, TemporalError> { + with_provider!(p, |p| self.0.round_with_provider(options.try_into()?, p)) + .map(|x| Box::new(Self(x))) + .map_err(Into::into) + } + + // Same as PlainDateTime (getters) + pub fn hour(&self) -> u8 { + // unwrap_or_default because of + // https://github.com/boa-dev/temporal/issues/548 + self.0.hour() + } + pub fn minute(&self) -> u8 { + self.0.minute() + } + pub fn second(&self) -> u8 { + self.0.second() + } + pub fn millisecond(&self) -> u16 { + self.0.millisecond() + } + pub fn microsecond(&self) -> u16 { + self.0.microsecond() + } + pub fn nanosecond(&self) -> u16 { + self.0.nanosecond() + } + + pub fn calendar<'a>(&'a self) -> &'a Calendar { + Calendar::transparent_convert(self.0.calendar()) + } + pub fn year(&self) -> i32 { + self.0.year() + } + pub fn month(&self) -> u8 { + self.0.month() + } + pub fn month_code(&self, write: &mut DiplomatWrite) { + // https://github.com/boa-dev/temporal/issues/328 for the fallibility + let code = self.0.month_code(); + // throw away the error, this should always succeed + let _ = write.write_str(code.as_str()); + } + pub fn day(&self) -> u8 { + self.0.day() + } + + pub fn day_of_week(&self) -> u16 { + self.0.day_of_week() + } + + pub fn day_of_year(&self) -> u16 { + self.0.day_of_year() + } + + pub fn week_of_year(&self) -> Option { + self.0.week_of_year() + } + + pub fn year_of_week(&self) -> Option { + self.0.year_of_week() + } + + pub fn days_in_week(&self) -> u16 { + self.0.days_in_week() + } + pub fn days_in_month(&self) -> u16 { + self.0.days_in_month() + } + + pub fn days_in_year(&self) -> u16 { + self.0.days_in_year() + } + + pub fn months_in_year(&self) -> u16 { + self.0.months_in_year() + } + + pub fn in_leap_year(&self) -> bool { + self.0.in_leap_year() + } + // Writes an empty string for no era + pub fn era(&self, write: &mut DiplomatWrite) { + let era = self.0.era(); + if let Some(era) = era { + // throw away the error, this should always succeed + let _ = write.write_str(&era); + } + } + + pub fn era_year(&self) -> Option { + self.0.era_year() + } + + #[allow(clippy::should_implement_trait)] + pub fn clone(&self) -> Box { + Box::new(Self(self.0.clone())) + } + } +} + +pub(crate) fn zdt_from_epoch_ms_with_provider<'p>( + ms: i64, + time_zone: temporal::TimeZone, + p: &Provider<'p>, +) -> Result { + let instant = temporal::Instant::from_epoch_milliseconds(ms)?; + with_provider!(p, |p| instant + .to_zoned_date_time_iso_with_provider(time_zone, p)) + .map_err(Into::into) +} + +pub(crate) fn zdt_from_epoch_ns_with_provider<'p>( + ns: I128Nanoseconds, + time_zone: temporal::TimeZone, + p: &Provider<'p>, +) -> Result { + let instant = temporal::Instant::try_new(ns.into())?; + with_provider!(p, |p| instant + .to_zoned_date_time_iso_with_provider(time_zone, p)) + .map_err(Into::into) +} + +impl TryFrom> for temporal::partial::PartialZonedDateTime { + type Error = TemporalError; + fn try_from(other: ffi::PartialZonedDateTime<'_>) -> Result { + let timezone = other.timezone.clone().into_option().map(|x| x.tz()); + let calendar = temporal::Calendar::new(other.date.calendar.into()); + Ok(Self { + fields: other.try_into()?, + timezone, + calendar, + }) + } +} + +impl TryFrom> for temporal::fields::ZonedDateTimeFields { + type Error = TemporalError; + fn try_from(other: ffi::PartialZonedDateTime<'_>) -> Result { + let offset = match other.offset.into_option() { + Some(o) => Some(temporal::UtcOffset::from_utf8(o.into())?), + None => None, + }; + Ok(Self { + calendar_fields: other.date.try_into()?, + time: other.time.into(), + offset, + }) + } +} + +impl From> for Option { + fn from(other: ffi::RelativeTo) -> Self { + if let Some(pd) = other.date { + Some(temporal::options::RelativeTo::PlainDate(pd.0.clone())) + } else { + other + .zoned + .map(|z| temporal::options::RelativeTo::ZonedDateTime(z.0.clone())) + } + } +} + +impl From for ffi::OwnedRelativeTo { + fn from(other: RelativeTo) -> Self { + use alloc::boxed::Box; + match other { + RelativeTo::PlainDate(d) => Self { + date: Some(Box::new(crate::plain_date::ffi::PlainDate(d))), + zoned: None, + }, + RelativeTo::ZonedDateTime(d) => Self { + zoned: Some(Box::new(ffi::ZonedDateTime(d))), + date: None, + }, + } + } +} diff --git a/crates/temporal_capi/tests/c/Makefile b/crates/temporal_capi/tests/c/Makefile new file mode 100644 index 000000000..76d4f0edd --- /dev/null +++ b/crates/temporal_capi/tests/c/Makefile @@ -0,0 +1,25 @@ +.DEFAULT_GOAL := test +.PHONY: build test +FORCE: + +HEADERS := ../../bindings/c/ +ALL_HEADERS := $(wildcard ${HEADERS}/**/*.h) + +C?=gcc + +TEST_FILES := $(wildcard *.c) +OUT_FILES = $(patsubst %.c,%.out,$(TEST_FILES)) + +$(ALL_HEADERS): + +../../../../target/debug/libtemporal_capi.a: FORCE + cargo rustc -p temporal_capi --crate-type staticlib + +%.out: %.c ../../../../target/debug/libtemporal_capi.a $(ALL_HEADERS) + $(C) -L ../../../../target/debug/ -I ${HEADERS} $< -ltemporal_capi -lm -o $@ + ./$@ + +test: $(OUT_FILES) + +clean: + rm $(OUT_FILES) diff --git a/temporal_capi/tests/c/simple.c b/crates/temporal_capi/tests/c/simple.c similarity index 100% rename from temporal_capi/tests/c/simple.c rename to crates/temporal_capi/tests/c/simple.c diff --git a/crates/temporal_capi/tests/cpp/Makefile b/crates/temporal_capi/tests/cpp/Makefile new file mode 100644 index 000000000..7bfe3560b --- /dev/null +++ b/crates/temporal_capi/tests/cpp/Makefile @@ -0,0 +1,25 @@ +.DEFAULT_GOAL := test +.PHONY: build test +FORCE: + +HEADERS := ../../bindings/cpp/ +ALL_HEADERS := $(wildcard ${HEADERS}/**/*.hpp) + +CXX?=g++ + +TEST_FILES := $(wildcard *.cpp) +OUT_FILES = $(patsubst %.cpp,%.out,$(TEST_FILES)) + +$(ALL_HEADERS): + +../../../../target/debug/libtemporal_capi.a: FORCE + cargo rustc -p temporal_capi --crate-type staticlib + +%.out: %.cpp ../../../../target/debug/libtemporal_capi.a $(ALL_HEADERS) + $(CXX) -std=c++17 -L ../../../../target/debug/ -I ${HEADERS} $< -ltemporal_capi -lm -o $@ + ./$@ + +test: $(OUT_FILES) + +clean: + rm $(OUT_FILES) diff --git a/temporal_capi/tests/cpp/simple.cpp b/crates/temporal_capi/tests/cpp/simple.cpp similarity index 100% rename from temporal_capi/tests/cpp/simple.cpp rename to crates/temporal_capi/tests/cpp/simple.cpp diff --git a/crates/temporal_rs/Cargo.toml b/crates/temporal_rs/Cargo.toml new file mode 100644 index 000000000..6a2d84c5d --- /dev/null +++ b/crates/temporal_rs/Cargo.toml @@ -0,0 +1,17 @@ +[package] +name = "temporal_rs" +keywords = ["date", "time", "calendar", "timezone", "duration"] +categories = ["date-and-time", "internationalization"] +description = "Temporal in Rust is an implementation of the TC39 Temporal Builtin Proposal in Rust." +version = "0.2.7" +edition.workspace = true +authors.workspace = true +license.workspace = true +repository.workspace = true +rust-version.workspace = true +readme.workspace = true +exclude.workspace = true + + +[dependencies] +temporal = { workspace = true, default-features = false } diff --git a/crates/temporal_rs/src/lib.rs b/crates/temporal_rs/src/lib.rs new file mode 100644 index 000000000..72a2ce2d5 --- /dev/null +++ b/crates/temporal_rs/src/lib.rs @@ -0,0 +1,6 @@ +//! # DEPRECATED +//! +//! Please note: `temporal_rs` has migrated to `temporal`. Use `temporal` instead +//! + +pub use temporal::*; diff --git a/zoneinfo/Cargo.toml b/crates/zoneinfo/Cargo.toml similarity index 100% rename from zoneinfo/Cargo.toml rename to crates/zoneinfo/Cargo.toml diff --git a/zoneinfo/README.md b/crates/zoneinfo/README.md similarity index 100% rename from zoneinfo/README.md rename to crates/zoneinfo/README.md diff --git a/zoneinfo/src/compiler.rs b/crates/zoneinfo/src/compiler.rs similarity index 100% rename from zoneinfo/src/compiler.rs rename to crates/zoneinfo/src/compiler.rs diff --git a/zoneinfo/src/lib.rs b/crates/zoneinfo/src/lib.rs similarity index 100% rename from zoneinfo/src/lib.rs rename to crates/zoneinfo/src/lib.rs diff --git a/zoneinfo/src/parser.rs b/crates/zoneinfo/src/parser.rs similarity index 100% rename from zoneinfo/src/parser.rs rename to crates/zoneinfo/src/parser.rs diff --git a/zoneinfo/src/posix.rs b/crates/zoneinfo/src/posix.rs similarity index 100% rename from zoneinfo/src/posix.rs rename to crates/zoneinfo/src/posix.rs diff --git a/zoneinfo/src/rule.rs b/crates/zoneinfo/src/rule.rs similarity index 100% rename from zoneinfo/src/rule.rs rename to crates/zoneinfo/src/rule.rs diff --git a/zoneinfo/src/types.rs b/crates/zoneinfo/src/types.rs similarity index 99% rename from zoneinfo/src/types.rs rename to crates/zoneinfo/src/types.rs index f596a9a21..4225ea18e 100644 --- a/zoneinfo/src/types.rs +++ b/crates/zoneinfo/src/types.rs @@ -22,7 +22,7 @@ pub mod zone; /// An enum representing a three letter abbreviated month (e.g. `Jan`, `Sep`). /// /// The month value is present in the `IN` column of a rule line or the date -/// month portion in the [UNTIL] column of a zone line. +/// month portion in the `UNTIL` column of a zone line. /// /// Note: month is 1 based (1-12). #[derive(Debug, Clone, Copy, PartialEq)] diff --git a/zoneinfo/src/types/rule.rs b/crates/zoneinfo/src/types/rule.rs similarity index 100% rename from zoneinfo/src/types/rule.rs rename to crates/zoneinfo/src/types/rule.rs diff --git a/zoneinfo/src/types/zone.rs b/crates/zoneinfo/src/types/zone.rs similarity index 100% rename from zoneinfo/src/types/zone.rs rename to crates/zoneinfo/src/types/zone.rs diff --git a/zoneinfo/src/tzif.rs b/crates/zoneinfo/src/tzif.rs similarity index 100% rename from zoneinfo/src/tzif.rs rename to crates/zoneinfo/src/tzif.rs diff --git a/zoneinfo/src/utils.rs b/crates/zoneinfo/src/utils.rs similarity index 100% rename from zoneinfo/src/utils.rs rename to crates/zoneinfo/src/utils.rs diff --git a/zoneinfo/src/zone.rs b/crates/zoneinfo/src/zone.rs similarity index 100% rename from zoneinfo/src/zone.rs rename to crates/zoneinfo/src/zone.rs diff --git a/crates/zoneinfo/tests/data/africa-abidjan.json b/crates/zoneinfo/tests/data/africa-abidjan.json new file mode 100644 index 000000000..bc95c005f --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-abidjan.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -968, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830383032, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-accra.json b/crates/zoneinfo/tests/data/africa-accra.json new file mode 100644 index 000000000..bc95c005f --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-accra.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -968, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830383032, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-addis_ababa.json b/crates/zoneinfo/tests/data/africa-addis_ababa.json new file mode 100644 index 000000000..43b02e25c --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-addis_ababa.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": 8836, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1946168836, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1309746600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + }, + { + "transition_time": -1261969200, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1041388200, + "record": { + "offset": 9900, + "is_dst": false, + "abbr": "+0245" + } + }, + { + "transition_time": -865305900, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-algiers.json b/crates/zoneinfo/tests/data/africa-algiers.json new file mode 100644 index 000000000..1b94ba288 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-algiers.json @@ -0,0 +1,281 @@ +{ + "first_record": { + "offset": 732, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2486592732, + "record": { + "offset": 561, + "is_dst": false, + "abbr": "PMT" + } + }, + { + "transition_time": -1855958961, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1689814800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1680397200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1665363600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1648342800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1635123600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1616893200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1604278800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1585443600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1574038800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1552266000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1539997200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1531443600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -956365200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -950486400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -942012000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796262400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766630800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -733280400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -439430400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -212029200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 41468400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 54774000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 231724800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 246236400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 259545600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 275274000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 309740400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 325468800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 341802000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 357523200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-asmara.json b/crates/zoneinfo/tests/data/africa-asmara.json new file mode 100644 index 000000000..43b02e25c --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-asmara.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": 8836, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1946168836, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1309746600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + }, + { + "transition_time": -1261969200, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1041388200, + "record": { + "offset": 9900, + "is_dst": false, + "abbr": "+0245" + } + }, + { + "transition_time": -865305900, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-bamako.json b/crates/zoneinfo/tests/data/africa-bamako.json new file mode 100644 index 000000000..bc95c005f --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-bamako.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -968, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830383032, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-bangui.json b/crates/zoneinfo/tests/data/africa-bangui.json new file mode 100644 index 000000000..985bbf860 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-bangui.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2035584815, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1940889600, + "record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1767226415, + "record": { + "offset": 1800, + "is_dst": false, + "abbr": "+0030" + } + }, + { + "transition_time": -1588465800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "WAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-banjul.json b/crates/zoneinfo/tests/data/africa-banjul.json new file mode 100644 index 000000000..bc95c005f --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-banjul.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -968, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830383032, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-bissau.json b/crates/zoneinfo/tests/data/africa-bissau.json new file mode 100644 index 000000000..c07c52ac1 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-bissau.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": -3740, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830380400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 157770000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-blantyre.json b/crates/zoneinfo/tests/data/africa-blantyre.json new file mode 100644 index 000000000..5a00874c1 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-blantyre.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 7818, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1924999818, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-brazzaville.json b/crates/zoneinfo/tests/data/africa-brazzaville.json new file mode 100644 index 000000000..985bbf860 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-brazzaville.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2035584815, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1940889600, + "record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1767226415, + "record": { + "offset": 1800, + "is_dst": false, + "abbr": "+0030" + } + }, + { + "transition_time": -1588465800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "WAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-bujumbura.json b/crates/zoneinfo/tests/data/africa-bujumbura.json new file mode 100644 index 000000000..5a00874c1 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-bujumbura.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 7818, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1924999818, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-cairo.json b/crates/zoneinfo/tests/data/africa-cairo.json new file mode 100644 index 000000000..221050cfc --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-cairo.json @@ -0,0 +1,1033 @@ +{ + "first_record": { + "offset": 7509, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2185409109, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -929844000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -923108400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -906170400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -892868400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -875844000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -857790000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -844308000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -825822000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -812685600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -794199600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -779853600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -762663600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -399088800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -386650800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -368330400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -355114800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -336790800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -323654400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -305168400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -292032000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -273632400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -260496000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -242096400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -228960000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -210560400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -197424000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -178938000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -165801600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -147402000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -134265600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -115866000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -102643200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -84330000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -71107200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -52707600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -39484800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -21171600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -7948800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 10364400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 23587200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 41900400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 55123200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 73522800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 86745600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 105058800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 118281600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 136594800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 149817600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 168130800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 181353600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 199753200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 212976000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 231289200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 244512000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 262825200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 276048000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 294361200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 307584000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 325983600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 339206400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 357519600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 370742400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 396399600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 402278400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 426812400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 433814400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 452214000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 465436800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 483750000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 496972800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 515286000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 528508800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 546822000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 560044800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 578444400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 591667200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 610412400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 623203200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 641516400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 654739200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 673052400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686275200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 704674800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717897600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 736210800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 749433600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 767746800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780969600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 799020000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 812322000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 830469600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 843771600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 861919200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 875221200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 893368800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 906670800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 925423200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 938725200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 956872800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 970174800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 988322400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1001624400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1019772000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1033074000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1051221600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1064523600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1083276000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1096578000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1114725600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1128027600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1146175200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1158872400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1177624800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1189112400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1209074400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1219957200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1240524000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1250802000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1272578400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1281474000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1284069600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1285880400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1400191200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1403816400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1406844000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1411678800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1682632800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-casablanca.json b/crates/zoneinfo/tests/data/africa-casablanca.json new file mode 100644 index 000000000..3cfabef12 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-casablanca.json @@ -0,0 +1,585 @@ +{ + "first_record": { + "offset": -1820, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1773012580, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": -956361600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": -950490000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": -942019200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": -761187600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": -617241600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": -605149200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": -81432000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": -71110800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 141264000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 147222000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 199756800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 207702000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 231292800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 244249200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 265507200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 271033200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 448243200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 504918000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1212278400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1220223600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1243814400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1250809200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1272758400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1281222000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1301788800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1312066800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1335664800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1342749600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1345428000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1348970400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1367114400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1373162400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1376100000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1382839200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1396144800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1403920800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1406944800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1414288800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1427594400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1434247200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1437271200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1445738400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1459044000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1465092000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1468116000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1477792800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1490493600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1495332000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1498960800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1509242400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1521943200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1526176800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1529200800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1540692000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1557021600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1560045600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1587261600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1590890400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1618106400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1621130400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1648346400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1651975200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1679191200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1682215200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1710036000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1713060000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1740276000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1743904800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1771120800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1774144800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1789866000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-ceuta.json b/crates/zoneinfo/tests/data/africa-ceuta.json new file mode 100644 index 000000000..d20e49fe3 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-ceuta.json @@ -0,0 +1,353 @@ +{ + "first_record": { + "offset": -1276, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177452800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1630112400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1616810400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1442451600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1427673600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1379293200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1364774400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1348448400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1333324800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1316390400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1301270400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -81432000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -71110800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 141264000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 147222000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 199756800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 207702000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 231292800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 244249200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 265507200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 271033200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 448243200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-conakry.json b/crates/zoneinfo/tests/data/africa-conakry.json new file mode 100644 index 000000000..bc95c005f --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-conakry.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -968, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830383032, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-dakar.json b/crates/zoneinfo/tests/data/africa-dakar.json new file mode 100644 index 000000000..bc95c005f --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-dakar.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -968, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830383032, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-dar_es_salaam.json b/crates/zoneinfo/tests/data/africa-dar_es_salaam.json new file mode 100644 index 000000000..43b02e25c --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-dar_es_salaam.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": 8836, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1946168836, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1309746600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + }, + { + "transition_time": -1261969200, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1041388200, + "record": { + "offset": 9900, + "is_dst": false, + "abbr": "+0245" + } + }, + { + "transition_time": -865305900, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-djibouti.json b/crates/zoneinfo/tests/data/africa-djibouti.json new file mode 100644 index 000000000..43b02e25c --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-djibouti.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": 8836, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1946168836, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1309746600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + }, + { + "transition_time": -1261969200, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1041388200, + "record": { + "offset": 9900, + "is_dst": false, + "abbr": "+0245" + } + }, + { + "transition_time": -865305900, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-douala.json b/crates/zoneinfo/tests/data/africa-douala.json new file mode 100644 index 000000000..985bbf860 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-douala.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2035584815, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1940889600, + "record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1767226415, + "record": { + "offset": 1800, + "is_dst": false, + "abbr": "+0030" + } + }, + { + "transition_time": -1588465800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "WAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-el_aaiun.json b/crates/zoneinfo/tests/data/africa-el_aaiun.json new file mode 100644 index 000000000..5064c45fd --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-el_aaiun.json @@ -0,0 +1,497 @@ +{ + "first_record": { + "offset": -3168, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1136070432, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 198291600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 199756800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 207702000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 231292800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 244249200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 265507200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 271033200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1212278400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1220223600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1243814400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1250809200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1272758400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1281222000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1301788800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1312066800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1335664800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1342749600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1345428000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1348970400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1367114400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1373162400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1376100000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1382839200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1396144800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1403920800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1406944800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1414288800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1427594400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1434247200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1437271200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1445738400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1459044000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1465092000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1468116000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1477792800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1490493600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1495332000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1498960800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1509242400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1521943200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1526176800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + }, + { + "transition_time": 1529200800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": 1540692000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1557021600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1560045600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1587261600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1590890400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1618106400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1621130400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1648346400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1651975200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1679191200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1682215200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1710036000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1713060000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1740276000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1743904800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1771120800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1774144800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "+01" + } + }, + { + "transition_time": 1789866000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "+00" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-freetown.json b/crates/zoneinfo/tests/data/africa-freetown.json new file mode 100644 index 000000000..bc95c005f --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-freetown.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -968, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830383032, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-gaborone.json b/crates/zoneinfo/tests/data/africa-gaborone.json new file mode 100644 index 000000000..5a00874c1 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-gaborone.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 7818, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1924999818, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-harare.json b/crates/zoneinfo/tests/data/africa-harare.json new file mode 100644 index 000000000..5a00874c1 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-harare.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 7818, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1924999818, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-johannesburg.json b/crates/zoneinfo/tests/data/africa-johannesburg.json new file mode 100644 index 000000000..a8f697ab4 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-johannesburg.json @@ -0,0 +1,57 @@ +{ + "first_record": { + "offset": 6720, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2458173120, + "record": { + "offset": 5400, + "is_dst": false, + "abbr": "SAST" + } + }, + { + "transition_time": -2109288600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "SAST" + } + }, + { + "transition_time": -860976000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "SAST" + } + }, + { + "transition_time": -845254800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "SAST" + } + }, + { + "transition_time": -829526400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "SAST" + } + }, + { + "transition_time": -813805200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "SAST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-juba.json b/crates/zoneinfo/tests/data/africa-juba.json new file mode 100644 index 000000000..74a46c69b --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-juba.json @@ -0,0 +1,289 @@ +{ + "first_record": { + "offset": 7588, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1230775588, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 10360800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 24786000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 41810400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 56322000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 73432800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 87944400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 104882400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 119480400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 136332000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 151016400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 167781600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 182552400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 199231200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 214174800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 230680800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 245710800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 262735200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 277246800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 294184800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 308782800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 325634400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 340405200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 357084000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 371941200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 388533600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 403477200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 419983200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 435013200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 452037600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 466635600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 483487200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 498171600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 947930400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + }, + { + "transition_time": 1612126800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-kampala.json b/crates/zoneinfo/tests/data/africa-kampala.json new file mode 100644 index 000000000..43b02e25c --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-kampala.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": 8836, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1946168836, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1309746600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + }, + { + "transition_time": -1261969200, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1041388200, + "record": { + "offset": 9900, + "is_dst": false, + "abbr": "+0245" + } + }, + { + "transition_time": -865305900, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-khartoum.json b/crates/zoneinfo/tests/data/africa-khartoum.json new file mode 100644 index 000000000..df1ab630d --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-khartoum.json @@ -0,0 +1,289 @@ +{ + "first_record": { + "offset": 7808, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1230775808, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 10360800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 24786000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 41810400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 56322000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 73432800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 87944400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 104882400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 119480400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 136332000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 151016400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 167781600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 182552400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 199231200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 214174800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 230680800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 245710800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 262735200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 277246800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 294184800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 308782800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 325634400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 340405200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 357084000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 371941200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 388533600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 403477200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 419983200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 435013200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 452037600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 466635600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 483487200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CAST" + } + }, + { + "transition_time": 498171600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 947930400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + }, + { + "transition_time": 1509483600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-kigali.json b/crates/zoneinfo/tests/data/africa-kigali.json new file mode 100644 index 000000000..5a00874c1 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-kigali.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 7818, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1924999818, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-kinshasa.json b/crates/zoneinfo/tests/data/africa-kinshasa.json new file mode 100644 index 000000000..985bbf860 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-kinshasa.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2035584815, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1940889600, + "record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1767226415, + "record": { + "offset": 1800, + "is_dst": false, + "abbr": "+0030" + } + }, + { + "transition_time": -1588465800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "WAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-lagos.json b/crates/zoneinfo/tests/data/africa-lagos.json new file mode 100644 index 000000000..985bbf860 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-lagos.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2035584815, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1940889600, + "record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1767226415, + "record": { + "offset": 1800, + "is_dst": false, + "abbr": "+0030" + } + }, + { + "transition_time": -1588465800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "WAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-libreville.json b/crates/zoneinfo/tests/data/africa-libreville.json new file mode 100644 index 000000000..985bbf860 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-libreville.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2035584815, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1940889600, + "record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1767226415, + "record": { + "offset": 1800, + "is_dst": false, + "abbr": "+0030" + } + }, + { + "transition_time": -1588465800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "WAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-lome.json b/crates/zoneinfo/tests/data/africa-lome.json new file mode 100644 index 000000000..bc95c005f --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-lome.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -968, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830383032, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-luanda.json b/crates/zoneinfo/tests/data/africa-luanda.json new file mode 100644 index 000000000..985bbf860 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-luanda.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2035584815, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1940889600, + "record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1767226415, + "record": { + "offset": 1800, + "is_dst": false, + "abbr": "+0030" + } + }, + { + "transition_time": -1588465800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "WAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-lubumbashi.json b/crates/zoneinfo/tests/data/africa-lubumbashi.json new file mode 100644 index 000000000..5a00874c1 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-lubumbashi.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 7818, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1924999818, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-lusaka.json b/crates/zoneinfo/tests/data/africa-lusaka.json new file mode 100644 index 000000000..5a00874c1 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-lusaka.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 7818, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1924999818, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-malabo.json b/crates/zoneinfo/tests/data/africa-malabo.json new file mode 100644 index 000000000..985bbf860 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-malabo.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2035584815, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1940889600, + "record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1767226415, + "record": { + "offset": 1800, + "is_dst": false, + "abbr": "+0030" + } + }, + { + "transition_time": -1588465800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "WAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-maputo.json b/crates/zoneinfo/tests/data/africa-maputo.json new file mode 100644 index 000000000..5a00874c1 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-maputo.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 7818, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1924999818, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-maseru.json b/crates/zoneinfo/tests/data/africa-maseru.json new file mode 100644 index 000000000..a8f697ab4 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-maseru.json @@ -0,0 +1,57 @@ +{ + "first_record": { + "offset": 6720, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2458173120, + "record": { + "offset": 5400, + "is_dst": false, + "abbr": "SAST" + } + }, + { + "transition_time": -2109288600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "SAST" + } + }, + { + "transition_time": -860976000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "SAST" + } + }, + { + "transition_time": -845254800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "SAST" + } + }, + { + "transition_time": -829526400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "SAST" + } + }, + { + "transition_time": -813805200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "SAST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-mbabane.json b/crates/zoneinfo/tests/data/africa-mbabane.json new file mode 100644 index 000000000..a8f697ab4 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-mbabane.json @@ -0,0 +1,57 @@ +{ + "first_record": { + "offset": 6720, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2458173120, + "record": { + "offset": 5400, + "is_dst": false, + "abbr": "SAST" + } + }, + { + "transition_time": -2109288600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "SAST" + } + }, + { + "transition_time": -860976000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "SAST" + } + }, + { + "transition_time": -845254800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "SAST" + } + }, + { + "transition_time": -829526400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "SAST" + } + }, + { + "transition_time": -813805200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "SAST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-mogadishu.json b/crates/zoneinfo/tests/data/africa-mogadishu.json new file mode 100644 index 000000000..43b02e25c --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-mogadishu.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": 8836, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1946168836, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1309746600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + }, + { + "transition_time": -1261969200, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1041388200, + "record": { + "offset": 9900, + "is_dst": false, + "abbr": "+0245" + } + }, + { + "transition_time": -865305900, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-monrovia.json b/crates/zoneinfo/tests/data/africa-monrovia.json new file mode 100644 index 000000000..b405f46fc --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-monrovia.json @@ -0,0 +1,33 @@ +{ + "first_record": { + "offset": -2588, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2776979812, + "record": { + "offset": -2588, + "is_dst": false, + "abbr": "MMT" + } + }, + { + "transition_time": -1604359012, + "record": { + "offset": -2670, + "is_dst": false, + "abbr": "MMT" + } + }, + { + "transition_time": 63593070, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-nairobi.json b/crates/zoneinfo/tests/data/africa-nairobi.json new file mode 100644 index 000000000..43b02e25c --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-nairobi.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": 8836, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1946168836, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1309746600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + }, + { + "transition_time": -1261969200, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1041388200, + "record": { + "offset": 9900, + "is_dst": false, + "abbr": "+0245" + } + }, + { + "transition_time": -865305900, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-ndjamena.json b/crates/zoneinfo/tests/data/africa-ndjamena.json new file mode 100644 index 000000000..410561543 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-ndjamena.json @@ -0,0 +1,33 @@ +{ + "first_record": { + "offset": 3612, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830387612, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "WAT" + } + }, + { + "transition_time": 308703600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "WAST" + } + }, + { + "transition_time": 321314400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "WAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-niamey.json b/crates/zoneinfo/tests/data/africa-niamey.json new file mode 100644 index 000000000..985bbf860 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-niamey.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2035584815, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1940889600, + "record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1767226415, + "record": { + "offset": 1800, + "is_dst": false, + "abbr": "+0030" + } + }, + { + "transition_time": -1588465800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "WAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-nouakchott.json b/crates/zoneinfo/tests/data/africa-nouakchott.json new file mode 100644 index 000000000..bc95c005f --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-nouakchott.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -968, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830383032, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-ouagadougou.json b/crates/zoneinfo/tests/data/africa-ouagadougou.json new file mode 100644 index 000000000..bc95c005f --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-ouagadougou.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -968, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830383032, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-porto-novo.json b/crates/zoneinfo/tests/data/africa-porto-novo.json new file mode 100644 index 000000000..985bbf860 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-porto-novo.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2035584815, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1940889600, + "record": { + "offset": 815, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1767226415, + "record": { + "offset": 1800, + "is_dst": false, + "abbr": "+0030" + } + }, + { + "transition_time": -1588465800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "WAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-sao_tome.json b/crates/zoneinfo/tests/data/africa-sao_tome.json new file mode 100644 index 000000000..40642ab03 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-sao_tome.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 1616, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713912016, + "record": { + "offset": -2205, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1830384000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 1514768400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "WAT" + } + }, + { + "transition_time": 1546304400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-tripoli.json b/crates/zoneinfo/tests/data/africa-tripoli.json new file mode 100644 index 000000000..7928a17ae --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-tripoli.json @@ -0,0 +1,265 @@ +{ + "first_record": { + "offset": 3164, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1577926364, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -574902000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -568087200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -512175600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -504928800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -449888400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -441856800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -347158800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 378684000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386463600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 402271200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417999600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433807200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449622000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465429600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481590000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496965600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512953200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528674400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 544230000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 560037600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575852400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591660000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 607388400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 623196000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 641775600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 844034400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 860108400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 875916000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1352505600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 1364515200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 1382659200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-tunis.json b/crates/zoneinfo/tests/data/africa-tunis.json new file mode 100644 index 000000000..15f2fdc30 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-tunis.json @@ -0,0 +1,281 @@ +{ + "first_record": { + "offset": 2444, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2797202444, + "record": { + "offset": 561, + "is_dst": false, + "abbr": "PMT" + } + }, + { + "transition_time": -1855958961, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -969242400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -950493600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -941940000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -891136800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -877827600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -842918400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -842223600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828230400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796269600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766634400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 231202800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 243903600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 262825200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 276044400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 581122800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591145200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606870000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622594800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 641516400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654649200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 1114902000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 1128038400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 1143334800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 1162083600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 1174784400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 1193533200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 1206838800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 1224982800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/africa-windhoek.json b/crates/zoneinfo/tests/data/africa-windhoek.json new file mode 100644 index 000000000..1682d7db2 --- /dev/null +++ b/crates/zoneinfo/tests/data/africa-windhoek.json @@ -0,0 +1,433 @@ +{ + "first_record": { + "offset": 4104, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2458170504, + "record": { + "offset": 5400, + "is_dst": false, + "abbr": "+0130" + } + }, + { + "transition_time": -2109288600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "SAST" + } + }, + { + "transition_time": -860976000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "SAST" + } + }, + { + "transition_time": -845254800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "SAST" + } + }, + { + "transition_time": 637970400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 764200800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 778640400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 796780800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 810090000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 828835200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 841539600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 860284800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 873594000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 891734400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 905043600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 923184000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 936493200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 954633600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 967942800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 986083200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 999392400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1018137600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1030842000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1049587200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1062896400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1081036800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1094346000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1112486400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1125795600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1143936000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1157245200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1175385600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1188694800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1207440000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1220749200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1238889600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1252198800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1270339200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1283648400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1301788800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1315098000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1333238400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1346547600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1365292800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1377997200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1396742400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1410051600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1428192000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1441501200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1459641600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1472950800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + }, + { + "transition_time": 1491091200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WAT" + } + }, + { + "transition_time": 1504400400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "CAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-adak.json b/crates/zoneinfo/tests/data/america-adak.json new file mode 100644 index 000000000..2c83b0b4e --- /dev/null +++ b/crates/zoneinfo/tests/data/america-adak.json @@ -0,0 +1,681 @@ +{ + "first_record": { + "offset": 44002, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3225223727, + "record": { + "offset": -42398, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -2188944802, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -880196400, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "NWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "NPT" + } + }, + { + "transition_time": -765374400, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -86878800, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": -21466800, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": -5745600, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 9982800, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 25704000, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 41432400, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 57758400, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 73486800, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 89208000, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 104936400, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 120657600, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 126709200, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 152107200, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 162392400, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 183556800, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 199285200, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 215611200, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 230734800, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 247060800, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 262789200, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 278510400, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 294238800, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 309960000, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 325688400, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 341409600, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 357138000, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 372859200, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 388587600, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 404913600, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 420037200, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 436363200, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "AHST" + } + }, + { + "transition_time": 439034400, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 452088000, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 467809200, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 483537600, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 499258800, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 514987200, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 530708400, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 544622400, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 562158000, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 576072000, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 594212400, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 607521600, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 625662000, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 638971200, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 657111600, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 671025600, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 688561200, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 702475200, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 720010800, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 733924800, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 752065200, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 765374400, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 783514800, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 796824000, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 814964400, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 828878400, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 846414000, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 860328000, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 877863600, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 891777600, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 909313200, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 923227200, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 941367600, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 954676800, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 972817200, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 986126400, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 1004266800, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 1018180800, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 1035716400, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 1049630400, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 1067166000, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 1081080000, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 1099220400, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 1112529600, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 1130670000, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 1143979200, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": 1162119600, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": 1173614400, + "record": { + "offset": -32400, + "is_dst": true, + "abbr": "HDT" + } + } + ] +} \ No newline at end of file diff --git a/zoneinfo/tests/data/america-anchorage.json b/crates/zoneinfo/tests/data/america-anchorage.json similarity index 100% rename from zoneinfo/tests/data/america-anchorage.json rename to crates/zoneinfo/tests/data/america-anchorage.json diff --git a/crates/zoneinfo/tests/data/america-anguilla.json b/crates/zoneinfo/tests/data/america-anguilla.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-anguilla.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-antigua.json b/crates/zoneinfo/tests/data/america-antigua.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-antigua.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-araguaina.json b/crates/zoneinfo/tests/data/america-araguaina.json new file mode 100644 index 000000000..72fd18687 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-araguaina.json @@ -0,0 +1,417 @@ +{ + "first_record": { + "offset": -11568, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767214032, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -1206957600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -1191362400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -1175374800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -1159826400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -633819600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -622069200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -602283600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -591832800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -570747600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -560210400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -539125200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -531352800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -191365200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -184197600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -155163600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -150069600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -128898000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -121125600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -99954000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -89589600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -68418000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -57967200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 499748400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 511236000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 530593200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 540266400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 562129200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 571197600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 592974000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 602042400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 634701600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 813726000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 824004000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 844570800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 856058400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 876106800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 888717600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 908074800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 919562400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 951616800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 970974000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 982461600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1003028400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1013911200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1036292400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1045360800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1350788400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1361066400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-argentina-buenos_aires.json b/crates/zoneinfo/tests/data/america-argentina-buenos_aires.json new file mode 100644 index 000000000..8c4df08c0 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-argentina-buenos_aires.json @@ -0,0 +1,497 @@ +{ + "first_record": { + "offset": -14028, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2372097972, + "record": { + "offset": -15408, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1567453392, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1233432000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1222981200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1205956800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1194037200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1172865600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1162501200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1141329600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1130965200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1109793600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1099429200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1078257600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1067806800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1046635200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1036270800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1015099200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1004734800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -983563200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -973198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -952027200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -941576400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -931032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -900882000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -890337600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -833749200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -827265600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -752274000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -733780800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -197326800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -190843200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -164491200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -152658000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -132955200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -101419200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -86821200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -71092800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -54766800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -39038400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23317200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -7588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 128142000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 136605600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 596948400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 605066400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 636516000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 656478000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 667965600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 687927600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 699415200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 719377200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 731469600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952052400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1198983600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1205632800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1224385200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1237082400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-argentina-catamarca.json b/crates/zoneinfo/tests/data/america-argentina-catamarca.json new file mode 100644 index 000000000..38124a1da --- /dev/null +++ b/crates/zoneinfo/tests/data/america-argentina-catamarca.json @@ -0,0 +1,497 @@ +{ + "first_record": { + "offset": -15788, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2372096212, + "record": { + "offset": -15408, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1567453392, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1233432000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1222981200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1205956800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1194037200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1172865600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1162501200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1141329600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1130965200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1109793600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1099429200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1078257600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1067806800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1046635200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1036270800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1015099200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1004734800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -983563200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -973198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -952027200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -941576400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -931032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -900882000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -890337600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -833749200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -827265600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -752274000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -733780800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -197326800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -190843200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -164491200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -152658000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -132955200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -101419200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -86821200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -71092800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -54766800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -39038400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23317200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -7588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 128142000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 136605600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 596948400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 605066400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 636516000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 656478000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 667965600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 687931200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 699415200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 719377200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 731469600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952052400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1086058800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1087704000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1198983600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1205632800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-argentina-cordoba.json b/crates/zoneinfo/tests/data/america-argentina-cordoba.json new file mode 100644 index 000000000..38b9a4c2e --- /dev/null +++ b/crates/zoneinfo/tests/data/america-argentina-cordoba.json @@ -0,0 +1,497 @@ +{ + "first_record": { + "offset": -15408, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2372096592, + "record": { + "offset": -15408, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1567453392, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1233432000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1222981200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1205956800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1194037200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1172865600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1162501200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1141329600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1130965200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1109793600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1099429200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1078257600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1067806800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1046635200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1036270800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1015099200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1004734800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -983563200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -973198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -952027200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -941576400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -931032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -900882000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -890337600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -833749200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -827265600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -752274000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -733780800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -197326800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -190843200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -164491200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -152658000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -132955200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -101419200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -86821200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -71092800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -54766800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -39038400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23317200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -7588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 128142000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 136605600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 596948400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 605066400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 636516000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 656478000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 667965600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 687931200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 699415200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 719377200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 731469600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952052400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1198983600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1205632800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1224385200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1237082400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-argentina-jujuy.json b/crates/zoneinfo/tests/data/america-argentina-jujuy.json new file mode 100644 index 000000000..1564954b4 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-argentina-jujuy.json @@ -0,0 +1,481 @@ +{ + "first_record": { + "offset": -15672, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2372096328, + "record": { + "offset": -15408, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1567453392, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1233432000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1222981200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1205956800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1194037200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1172865600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1162501200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1141329600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1130965200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1109793600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1099429200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1078257600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1067806800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1046635200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1036270800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1015099200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1004734800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -983563200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -973198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -952027200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -941576400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -931032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -900882000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -890337600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -833749200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -827265600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -752274000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -733780800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -197326800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -190843200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -164491200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -152658000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -132955200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -101419200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -86821200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -71092800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -54766800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -39038400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23317200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -7588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 128142000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 136605600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 596948400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 605066400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 636516000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 657086400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 669178800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 686721600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 699415200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 719377200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 731469600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952052400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1198983600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1205632800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-argentina-la_rioja.json b/crates/zoneinfo/tests/data/america-argentina-la_rioja.json new file mode 100644 index 000000000..ed1f144c4 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-argentina-la_rioja.json @@ -0,0 +1,505 @@ +{ + "first_record": { + "offset": -16044, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2372095956, + "record": { + "offset": -15408, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1567453392, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1233432000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1222981200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1205956800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1194037200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1172865600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1162501200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1141329600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1130965200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1109793600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1099429200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1078257600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1067806800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1046635200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1036270800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1015099200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1004734800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -983563200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -973198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -952027200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -941576400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -931032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -900882000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -890337600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -833749200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -827265600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -752274000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -733780800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -197326800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -190843200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -164491200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -152658000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -132955200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -101419200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -86821200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -71092800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -54766800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -39038400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23317200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -7588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 128142000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 136605600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 596948400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 605066400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 636516000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 656478000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 667792800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 673588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 687927600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 699415200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 719377200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 731469600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952052400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1086058800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1087704000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1198983600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1205632800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-argentina-mendoza.json b/crates/zoneinfo/tests/data/america-argentina-mendoza.json new file mode 100644 index 000000000..be53ac8e0 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-argentina-mendoza.json @@ -0,0 +1,497 @@ +{ + "first_record": { + "offset": -16516, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2372095484, + "record": { + "offset": -15408, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1567453392, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1233432000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1222981200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1205956800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1194037200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1172865600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1162501200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1141329600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1130965200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1109793600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1099429200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1078257600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1067806800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1046635200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1036270800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1015099200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1004734800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -983563200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -973198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -952027200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -941576400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -931032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -900882000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -890337600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -833749200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -827265600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -752274000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -733780800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -197326800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -190843200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -164491200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -152658000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -132955200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -101419200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -86821200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -71092800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -54766800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -39038400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23317200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -7588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 128142000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 136605600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 596948400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 605066400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 636516000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 655963200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 667796400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 687499200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 699418800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 719380800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 731469600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952052400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1085281200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1096171200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1198983600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1205632800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-argentina-rio_gallegos.json b/crates/zoneinfo/tests/data/america-argentina-rio_gallegos.json new file mode 100644 index 000000000..3c38f4ec3 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-argentina-rio_gallegos.json @@ -0,0 +1,497 @@ +{ + "first_record": { + "offset": -16612, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2372095388, + "record": { + "offset": -15408, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1567453392, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1233432000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1222981200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1205956800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1194037200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1172865600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1162501200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1141329600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1130965200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1109793600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1099429200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1078257600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1067806800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1046635200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1036270800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1015099200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1004734800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -983563200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -973198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -952027200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -941576400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -931032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -900882000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -890337600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -833749200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -827265600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -752274000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -733780800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -197326800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -190843200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -164491200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -152658000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -132955200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -101419200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -86821200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -71092800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -54766800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -39038400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23317200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -7588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 128142000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 136605600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 596948400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 605066400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 636516000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 656478000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 667965600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 687927600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 699415200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 719377200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 731469600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952052400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1086058800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1087704000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1198983600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1205632800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-argentina-salta.json b/crates/zoneinfo/tests/data/america-argentina-salta.json new file mode 100644 index 000000000..0b9e94f90 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-argentina-salta.json @@ -0,0 +1,481 @@ +{ + "first_record": { + "offset": -15700, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2372096300, + "record": { + "offset": -15408, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1567453392, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1233432000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1222981200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1205956800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1194037200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1172865600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1162501200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1141329600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1130965200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1109793600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1099429200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1078257600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1067806800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1046635200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1036270800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1015099200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1004734800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -983563200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -973198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -952027200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -941576400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -931032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -900882000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -890337600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -833749200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -827265600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -752274000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -733780800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -197326800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -190843200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -164491200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -152658000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -132955200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -101419200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -86821200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -71092800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -54766800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -39038400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23317200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -7588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 128142000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 136605600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 596948400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 605066400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 636516000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 656478000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 667965600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 687931200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 699415200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 719377200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 731469600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952052400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1198983600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1205632800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-argentina-san_juan.json b/crates/zoneinfo/tests/data/america-argentina-san_juan.json new file mode 100644 index 000000000..e6b70fa76 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-argentina-san_juan.json @@ -0,0 +1,505 @@ +{ + "first_record": { + "offset": -16444, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2372095556, + "record": { + "offset": -15408, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1567453392, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1233432000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1222981200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1205956800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1194037200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1172865600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1162501200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1141329600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1130965200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1109793600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1099429200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1078257600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1067806800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1046635200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1036270800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1015099200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1004734800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -983563200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -973198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -952027200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -941576400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -931032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -900882000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -890337600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -833749200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -827265600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -752274000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -733780800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -197326800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -190843200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -164491200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -152658000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -132955200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -101419200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -86821200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -71092800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -54766800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -39038400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23317200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -7588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 128142000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 136605600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 596948400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 605066400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 636516000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 656478000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 667792800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 673588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 687927600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 699415200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 719377200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 731469600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952052400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1085972400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1090728000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1198983600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1205632800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-argentina-san_luis.json b/crates/zoneinfo/tests/data/america-argentina-san_luis.json new file mode 100644 index 000000000..4643b83fa --- /dev/null +++ b/crates/zoneinfo/tests/data/america-argentina-san_luis.json @@ -0,0 +1,505 @@ +{ + "first_record": { + "offset": -15924, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2372096076, + "record": { + "offset": -15408, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1567453392, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1233432000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1222981200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1205956800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1194037200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1172865600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1162501200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1141329600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1130965200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1109793600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1099429200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1078257600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1067806800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1046635200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1036270800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1015099200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1004734800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -983563200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -973198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -952027200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -941576400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -931032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -900882000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -890337600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -833749200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -827265600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -752274000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -733780800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -197326800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -190843200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -164491200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -152658000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -132955200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -101419200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -86821200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -71092800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -54766800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -39038400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23317200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -7588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 128142000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 136605600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 596948400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 605066400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 637380000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 655963200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 667796400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 675748800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952052400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1085972400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1090728000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1198983600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1200880800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1205031600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1223784000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1236481200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1255233600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-argentina-tucuman.json b/crates/zoneinfo/tests/data/america-argentina-tucuman.json new file mode 100644 index 000000000..d1da74c10 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-argentina-tucuman.json @@ -0,0 +1,513 @@ +{ + "first_record": { + "offset": -15652, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2372096348, + "record": { + "offset": -15408, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1567453392, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1233432000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1222981200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1205956800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1194037200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1172865600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1162501200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1141329600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1130965200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1109793600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1099429200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1078257600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1067806800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1046635200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1036270800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1015099200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1004734800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -983563200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -973198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -952027200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -941576400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -931032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -900882000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -890337600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -833749200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -827265600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -752274000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -733780800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -197326800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -190843200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -164491200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -152658000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -132955200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -101419200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -86821200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -71092800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -54766800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -39038400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23317200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -7588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 128142000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 136605600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 596948400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 605066400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 636516000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 656478000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 667965600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 687931200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 699415200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 719377200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 731469600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952052400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1086058800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1087099200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1198983600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1205632800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1224385200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1237082400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-argentina-ushuaia.json b/crates/zoneinfo/tests/data/america-argentina-ushuaia.json new file mode 100644 index 000000000..6bfd5419b --- /dev/null +++ b/crates/zoneinfo/tests/data/america-argentina-ushuaia.json @@ -0,0 +1,497 @@ +{ + "first_record": { + "offset": -16392, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2372095608, + "record": { + "offset": -15408, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1567453392, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1233432000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1222981200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1205956800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1194037200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1172865600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1162501200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1141329600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1130965200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1109793600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1099429200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1078257600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1067806800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1046635200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1036270800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1015099200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1004734800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -983563200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -973198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -952027200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -941576400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -931032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -900882000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -890337600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -833749200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -827265600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -752274000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -733780800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -197326800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -190843200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -164491200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -152658000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -132955200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -101419200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -86821200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -71092800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -54766800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -39038400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23317200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -7588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 128142000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 136605600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 596948400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 605066400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 636516000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 656478000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 667965600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 687927600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 699415200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 719377200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 731469600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952052400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1085886000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1087704000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1198983600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1205632800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-aruba.json b/crates/zoneinfo/tests/data/america-aruba.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-aruba.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-asuncion.json b/crates/zoneinfo/tests/data/america-asuncion.json new file mode 100644 index 000000000..d4fc4a541 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-asuncion.json @@ -0,0 +1,841 @@ +{ + "first_record": { + "offset": -13840, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524507760, + "record": { + "offset": -13840, + "is_dst": false, + "abbr": "AMT" + } + }, + { + "transition_time": -1206389360, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 86760000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 134017200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 181368000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 194497200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 212990400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 226033200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 244526400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 257569200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 276062400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 291783600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 307598400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 323406000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 339220800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 354942000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 370756800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 386478000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 402292800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 418014000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 433828800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 449636400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 465451200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 481172400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 496987200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 512708400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 528523200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 544244400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 560059200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 575866800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 591681600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 607402800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 625032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 638938800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 654753600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 670474800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 686721600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 699418800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 718257600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 733546800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 749448000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 762318000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 780984000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 793767600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 812520000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 825649200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 844574400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 856666800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 876024000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 888721200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 907473600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 920775600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 938923200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952225200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 970372800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 983674800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1002427200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1018148400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1030852800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1049598000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1062907200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1081047600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1097985600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1110682800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1129435200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1142132400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1160884800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1173582000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1192939200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1205031600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1224388800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1236481200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1255838400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1270954800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1286078400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1302404400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1317528000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1333854000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1349582400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1364094000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1381032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1395543600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1412481600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1426993200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1443931200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1459047600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1475380800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1490497200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1506830400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1521946800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1538884800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1553396400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1570334400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1584846000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1601784000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1616900400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1633233600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1648350000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1664683200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1679799600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1696132800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1711249200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1728187200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1728961200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-atikokan.json b/crates/zoneinfo/tests/data/america-atikokan.json new file mode 100644 index 000000000..238f60148 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-atikokan.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": -19088, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524502512, + "record": { + "offset": -19176, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1946918424, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-bahia.json b/crates/zoneinfo/tests/data/america-bahia.json new file mode 100644 index 000000000..ed2953862 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-bahia.json @@ -0,0 +1,497 @@ +{ + "first_record": { + "offset": -9244, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767216356, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -1206957600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -1191362400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -1175374800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -1159826400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -633819600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -622069200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -602283600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -591832800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -570747600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -560210400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -539125200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -531352800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -191365200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -184197600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -155163600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -150069600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -128898000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -121125600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -99954000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -89589600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -68418000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -57967200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 499748400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 511236000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 530593200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 540266400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 562129200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 571197600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 592974000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 602042400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 634701600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 656478000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 666756000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 687927600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 697600800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 719982000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 728445600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 750826800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 761709600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 782276400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 793159200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 813726000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 824004000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 844570800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 856058400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 876106800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 888717600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 908074800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 919562400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 951616800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 970974000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 982461600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1003028400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1013911200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1036292400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1045360800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1318734000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1330221600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-bahia_banderas.json b/crates/zoneinfo/tests/data/america-bahia_banderas.json new file mode 100644 index 000000000..c35baf056 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-bahia_banderas.json @@ -0,0 +1,497 @@ +{ + "first_record": { + "offset": -25260, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1514739600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1343149200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1234807200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1220461200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1207159200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1191344400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -873828000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 828867600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 846403200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 860317200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 877852800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 891766800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 909302400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 923216400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 941356800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 954666000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 972806400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 989139600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1001836800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1018170000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1035705600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1049619600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1067155200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1081069200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1099209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1112518800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1130659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1143968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1162108800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1175418000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1193558400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1207472400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1225008000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1238922000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1256457600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1270371600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1288508400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1301817600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1319958000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1333267200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1351407600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1365321600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1382857200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1396771200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1414306800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1428220800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1445756400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1459670400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1477810800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1491120000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1509260400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1522569600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1540710000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1554624000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1572159600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1586073600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1603609200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1617523200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1635663600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1648972800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1667113200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-barbados.json b/crates/zoneinfo/tests/data/america-barbados.json new file mode 100644 index 000000000..cdfc1a085 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-barbados.json @@ -0,0 +1,129 @@ +{ + "first_record": { + "offset": -14309, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1841256091, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -874263600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -862682400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -841604400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -830714400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -811882800, + "record": { + "offset": -12600, + "is_dst": true, + "abbr": "-0330" + } + }, + { + "transition_time": -798660000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 234943200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 244616400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 261554400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 276066000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 293004000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 307515600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 325058400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 338706000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-belem.json b/crates/zoneinfo/tests/data/america-belem.json new file mode 100644 index 000000000..e79e122e9 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-belem.json @@ -0,0 +1,241 @@ +{ + "first_record": { + "offset": -11636, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767213964, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -1206957600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -1191362400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -1175374800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -1159826400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -633819600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -622069200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -602283600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -591832800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -570747600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -560210400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -539125200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -531352800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -191365200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -184197600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -155163600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -150069600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -128898000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -121125600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -99954000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -89589600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -68418000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -57967200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 499748400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 511236000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 530593200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 540266400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 562129200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 571197600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-belize.json b/crates/zoneinfo/tests/data/america-belize.json new file mode 100644 index 000000000..244bd537a --- /dev/null +++ b/crates/zoneinfo/tests/data/america-belize.json @@ -0,0 +1,793 @@ +{ + "first_record": { + "offset": -21168, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1822500432, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1616954400, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1606069800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1585504800, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1574015400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1554055200, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1542565800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1522605600, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1511116200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1490551200, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1479666600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1459101600, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1448217000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1427652000, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1416162600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1396202400, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1384713000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1364752800, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1353263400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1333303200, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1321813800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1301248800, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1290364200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1269799200, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1258914600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1238349600, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1226860200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1206900000, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1195410600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1175450400, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1163961000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1143396000, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1132511400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1111946400, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1101061800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1080496800, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1069612200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1049047200, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1037557800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1017597600, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -1006108200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -986148000, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -974658600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -954093600, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -943209000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -922644000, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -911759400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -891194400, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -879705000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -868212000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CPT" + } + }, + { + "transition_time": -758746800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -701892000, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -690402600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -670442400, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -658953000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -638992800, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -627503400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -606938400, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -596053800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -575488800, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -564604200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -544039200, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -532549800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -512589600, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -501100200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -481140000, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -469650600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -449690400, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -438201000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -417636000, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -406751400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -386186400, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -375301800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -354736800, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -343247400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -323287200, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -311797800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -291837600, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -280348200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -259783200, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -248898600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -228333600, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -217449000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -196884000, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -185999400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -165434400, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -153945000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -133984800, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -122495400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -102535200, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -91045800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -70480800, + "record": { + "offset": -19800, + "is_dst": true, + "abbr": "-0530" + } + }, + { + "transition_time": -59596200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 123919200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 129618000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 409039200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 413874000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-blanc-sablon.json b/crates/zoneinfo/tests/data/america-blanc-sablon.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-blanc-sablon.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-boa_vista.json b/crates/zoneinfo/tests/data/america-boa_vista.json new file mode 100644 index 000000000..383c8f7b8 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-boa_vista.json @@ -0,0 +1,273 @@ +{ + "first_record": { + "offset": -14560, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767211040, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1206954000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1191358800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1175371200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1159822800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -633816000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -622065600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -602280000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -591829200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -570744000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -560206800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -539121600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -531349200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -191361600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -155160000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -150066000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -128894400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -99950400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -89586000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -68414400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -57963600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 499752000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 511239600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 530596800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 540270000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 562132800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 571201200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 938923200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 951620400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 970977600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 971578800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-bogota.json b/crates/zoneinfo/tests/data/america-bogota.json new file mode 100644 index 000000000..02b202f30 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-bogota.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -17776, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2707671824, + "record": { + "offset": -17776, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -1739041424, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 704782800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": 729057600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-boise.json b/crates/zoneinfo/tests/data/america-boise.json new file mode 100644 index 000000000..1f6c94f7a --- /dev/null +++ b/crates/zoneinfo/tests/data/america-boise.json @@ -0,0 +1,729 @@ +{ + "first_record": { + "offset": -27889, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717640000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -1633269600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -1615129200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -1601820000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -1583679600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -1471788000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -880210800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MPT" + } + }, + { + "transition_time": -765388800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -84380400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -68659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -52930800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -37209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -21481200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -5760000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 9968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 25689600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 41418000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 57744000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 73472400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 89193600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 104922000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 120643200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 129114000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 152092800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 162378000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 183542400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 199270800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 215596800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 230720400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 247046400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 262774800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 278496000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 294224400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 309945600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 325674000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 341395200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 357123600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 372844800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 388573200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 404899200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 420022800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 436348800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 452077200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 467798400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 483526800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 499248000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 514976400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 530697600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 544611600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 562147200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 576061200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 594201600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 607510800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 625651200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 638960400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 657100800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 671014800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 688550400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 702464400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 720000000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 733914000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 752054400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 765363600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 783504000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 796813200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 814953600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 828867600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 846403200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 860317200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 877852800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 891766800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 909302400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 923216400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 941356800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 954666000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 972806400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 986115600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1004256000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1018170000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1035705600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1049619600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1067155200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1081069200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1099209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1112518800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1130659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1143968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1162108800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1173603600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-cambridge_bay.json b/crates/zoneinfo/tests/data/america-cambridge_bay.json new file mode 100644 index 000000000..8b6221895 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-cambridge_bay.json @@ -0,0 +1,617 @@ +{ + "first_record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + }, + "transitions": [ + { + "transition_time": -1577923200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -880210800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MPT" + } + }, + { + "transition_time": -765388800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 73472400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 89193600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 104922000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 120643200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 136371600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 152092800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 167821200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 183542400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 199270800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 215596800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 230720400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 247046400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 262774800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 278496000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 294224400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 309945600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 325674000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 341395200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 357123600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 372844800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 388573200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 404899200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 420022800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 436348800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 452077200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 467798400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 483526800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 499248000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 514976400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 530697600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 544611600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 562147200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 576061200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 594201600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 607510800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 625651200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 638960400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 657100800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 671014800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 688550400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 702464400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 720000000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 733914000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 752054400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 765363600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 783504000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 796813200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 814953600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 828867600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 846403200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 860317200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 877852800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 891766800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 909302400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 923216400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 941356800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 954662400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 972802800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 973400400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 986115600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1004256000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1018170000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1035705600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1049619600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1067155200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1081069200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1099209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1112518800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1130659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1143968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1162108800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1173603600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-campo_grande.json b/crates/zoneinfo/tests/data/america-campo_grande.json new file mode 100644 index 000000000..09d191eaa --- /dev/null +++ b/crates/zoneinfo/tests/data/america-campo_grande.json @@ -0,0 +1,737 @@ +{ + "first_record": { + "offset": -13108, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767212492, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1206954000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1191358800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1175371200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1159822800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -633816000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -622065600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -602280000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -591829200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -570744000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -560206800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -539121600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -531349200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -191361600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -155160000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -150066000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -128894400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -99950400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -89586000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -68414400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -57963600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 499752000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 511239600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 530596800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 540270000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 562132800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 571201200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 592977600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 602046000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 624427200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 634705200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 656481600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 666759600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 687931200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 697604400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 719985600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 728449200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 750830400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 761713200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 782280000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 793162800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 813729600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 824007600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 844574400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 856062000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 876110400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 888721200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 908078400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 919566000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 938923200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 951620400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 970977600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 982465200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1003032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1013914800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1036296000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1045364400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1066536000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1076814000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1099368000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1108868400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1129435200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1140318000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1162699200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1172372400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1192334400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1203217200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1224388800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1234666800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1255838400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1266721200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1287288000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1298170800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1318737600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1330225200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1350792000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1361070000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1382241600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1392519600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1413691200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1424574000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1445140800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1456023600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1476590400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1487473200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1508040000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1518922800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1541304000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1550372400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-cancun.json b/crates/zoneinfo/tests/data/america-cancun.json new file mode 100644 index 000000000..3e61be7bf --- /dev/null +++ b/crates/zoneinfo/tests/data/america-cancun.json @@ -0,0 +1,353 @@ +{ + "first_record": { + "offset": -20824, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1514743200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 378201600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 410504400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828864000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 846399600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860313600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 877849200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 891759600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 902037600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 909298800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 923212800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 941353200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 954662400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 972802800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 989136000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1001833200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1018166400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1035702000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1049616000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1067151600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1081065600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1099206000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1112515200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1130655600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1143964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1175414400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1193554800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1207468800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1225004400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1238918400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1256454000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1270368000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1288508400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1301817600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1319958000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1333267200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1351407600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1365321600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1382857200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1396771200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1414306800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1422777600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-caracas.json b/crates/zoneinfo/tests/data/america-caracas.json new file mode 100644 index 000000000..fc8344a47 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-caracas.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": -16064, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524505536, + "record": { + "offset": -16060, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1826739140, + "record": { + "offset": -16200, + "is_dst": false, + "abbr": "-0430" + } + }, + { + "transition_time": -157750200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1197183600, + "record": { + "offset": -16200, + "is_dst": false, + "abbr": "-0430" + } + }, + { + "transition_time": 1462086000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-cayenne.json b/crates/zoneinfo/tests/data/america-cayenne.json new file mode 100644 index 000000000..096753e78 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-cayenne.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": -12560, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1846269040, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -71092800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-cayman.json b/crates/zoneinfo/tests/data/america-cayman.json new file mode 100644 index 000000000..238f60148 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-cayman.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": -19088, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524502512, + "record": { + "offset": -19176, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1946918424, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + } + ] +} \ No newline at end of file diff --git a/zoneinfo/tests/data/america-chicago.json b/crates/zoneinfo/tests/data/america-chicago.json similarity index 100% rename from zoneinfo/tests/data/america-chicago.json rename to crates/zoneinfo/tests/data/america-chicago.json diff --git a/crates/zoneinfo/tests/data/america-chihuahua.json b/crates/zoneinfo/tests/data/america-chihuahua.json new file mode 100644 index 000000000..76d8cbb9b --- /dev/null +++ b/crates/zoneinfo/tests/data/america-chihuahua.json @@ -0,0 +1,489 @@ +{ + "first_record": { + "offset": -25460, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1514739600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1343149200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1234807200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1220461200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1207159200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1191344400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828864000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 846399600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860313600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 877849200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 891766800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 909302400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 923216400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 941356800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 954666000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 972806400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 989139600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1001836800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1018170000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1035705600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1049619600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1067155200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1081069200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1099209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1112518800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1130659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1143968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1162108800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1175418000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1193558400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1207472400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1225008000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1238922000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1256457600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1270371600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1288512000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1301821200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1319961600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1333270800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1351411200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1365325200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1382860800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1396774800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1414310400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1428224400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1445760000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1459674000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1477814400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1491123600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1509264000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1522573200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1540713600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1554627600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1572163200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1586077200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1603612800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1617526800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1635667200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1648976400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1667116800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-ciudad_juarez.json b/crates/zoneinfo/tests/data/america-ciudad_juarez.json new file mode 100644 index 000000000..8d9539396 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-ciudad_juarez.json @@ -0,0 +1,497 @@ +{ + "first_record": { + "offset": -25556, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1514739600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1343149200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1234807200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1220461200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1207159200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1191344400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828864000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 846399600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860313600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 877849200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 891766800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 909302400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 923216400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 941356800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 954666000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 972806400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 989139600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1001836800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1018170000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1035705600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1049619600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1067155200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1081069200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1099209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1112518800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1130659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1143968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1162108800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1175418000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1193558400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1207472400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1225008000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1238922000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1256457600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1268557200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1289116800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1300006800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1320566400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1331456400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1352016000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1362906000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1383465600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1394355600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1414915200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1425805200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1446364800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1457859600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1478419200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1489309200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1509868800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1520758800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1541318400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1552208400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1572768000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1583658000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1604217600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1615712400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1636272000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1647162000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1667116800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1669788000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-costa_rica.json b/crates/zoneinfo/tests/data/america-costa_rica.json new file mode 100644 index 000000000..0955c799a --- /dev/null +++ b/crates/zoneinfo/tests/data/america-costa_rica.json @@ -0,0 +1,89 @@ +{ + "first_record": { + "offset": -20173, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524501427, + "record": { + "offset": -20173, + "is_dst": false, + "abbr": "SJMT" + } + }, + { + "transition_time": -1545071027, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 288770400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 297234000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 320220000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 328683600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 664264800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 678344400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 695714400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 700635600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-coyhaique.json b/crates/zoneinfo/tests/data/america-coyhaique.json new file mode 100644 index 000000000..93c6d79c1 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-coyhaique.json @@ -0,0 +1,1073 @@ +{ + "first_record": { + "offset": -17296, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524504304, + "record": { + "offset": -16965, + "is_dst": false, + "abbr": "SMT" + } + }, + { + "transition_time": -1892661435, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1688410800, + "record": { + "offset": -16965, + "is_dst": false, + "abbr": "SMT" + } + }, + { + "transition_time": -1619205435, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1593806400, + "record": { + "offset": -16965, + "is_dst": false, + "abbr": "SMT" + } + }, + { + "transition_time": -1335986235, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1317585600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1304362800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1286049600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1272826800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1254513600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1241290800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1222977600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1209754800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1191355200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1178132400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -870552000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -865278000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -736632000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -718056000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -713649600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -36619200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23922000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -3355200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 7527600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 24465600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 37767600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 55915200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 69217200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 87969600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 100666800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 118209600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 132116400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 150868800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 163566000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 182318400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 195620400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 213768000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 227070000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 245217600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 258519600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 277272000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 289969200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 308721600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 321418800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 340171200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 353473200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 371620800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 384922800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 403070400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 416372400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 434520000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 447822000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 466574400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 479271600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 498024000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 510721200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 529473600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 545194800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 560923200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 574225200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 592372800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 605674800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 624427200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 637124400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 653457600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 668574000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 687326400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 700628400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 718776000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 732078000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 750225600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 763527600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 781675200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 794977200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 813729600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 826426800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 845179200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 859690800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 876628800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 889930800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 906868800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 923194800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 939528000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952830000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 971582400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 984279600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1003032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1015729200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1034481600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1047178800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1065931200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1079233200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1097380800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1110682800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1128830400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1142132400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1160884800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1173582000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1192334400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1206846000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1223784000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1237086000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1255233600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1270350000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1286683200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1304823600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1313899200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1335668400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1346558400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1367118000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1378612800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1398567600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1410062400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1463281200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1471147200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1494730800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1502596800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1526180400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1534046400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1554606000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1567915200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1586055600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1599364800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1617505200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1630814400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1648954800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1662868800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1680404400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1693713600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1712458800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1725768000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1742439600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-creston.json b/crates/zoneinfo/tests/data/america-creston.json new file mode 100644 index 000000000..c2a7492d4 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-creston.json @@ -0,0 +1,97 @@ +{ + "first_record": { + "offset": -26898, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717643600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1633273200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1615132800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1601823600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1583683200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -880210800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MWT" + } + }, + { + "transition_time": -820519140, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -812653140, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MWT" + } + }, + { + "transition_time": -796845540, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -84380400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -68659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-cuiaba.json b/crates/zoneinfo/tests/data/america-cuiaba.json new file mode 100644 index 000000000..ffda2d645 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-cuiaba.json @@ -0,0 +1,721 @@ +{ + "first_record": { + "offset": -13460, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767212140, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1206954000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1191358800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1175371200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1159822800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -633816000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -622065600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -602280000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -591829200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -570744000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -560206800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -539121600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -531349200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -191361600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -155160000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -150066000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -128894400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -99950400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -89586000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -68414400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -57963600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 499752000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 511239600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 530596800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 540270000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 562132800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 571201200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 592977600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 602046000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 624427200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 634705200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 656481600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 666759600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 687931200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 697604400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 719985600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 728449200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 750830400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 761713200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 782280000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 793162800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 813729600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 824007600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 844574400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 856062000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 876110400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 888721200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 908078400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 919566000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 938923200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 951620400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 970977600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 982465200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1003032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1013914800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1036296000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1045364400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1099368000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1108868400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1129435200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1140318000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1162699200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1172372400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1192334400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1203217200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1224388800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1234666800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1255838400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1266721200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1287288000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1298170800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1318737600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1330225200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1350792000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1361070000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1382241600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1392519600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1413691200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1424574000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1445140800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1456023600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1476590400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1487473200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1508040000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1518922800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1541304000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1550372400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-curacao.json b/crates/zoneinfo/tests/data/america-curacao.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-curacao.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-danmarkshavn.json b/crates/zoneinfo/tests/data/america-danmarkshavn.json new file mode 100644 index 000000000..6b42881ce --- /dev/null +++ b/crates/zoneinfo/tests/data/america-danmarkshavn.json @@ -0,0 +1,281 @@ +{ + "first_record": { + "offset": -4480, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1686091520, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 323845200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 820465200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-dawson.json b/crates/zoneinfo/tests/data/america-dawson.json new file mode 100644 index 000000000..18f3c870b --- /dev/null +++ b/crates/zoneinfo/tests/data/america-dawson.json @@ -0,0 +1,753 @@ +{ + "first_record": { + "offset": -33460, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2188996940, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": -1632056400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": -1615125600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": -1596978000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": -1583164800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": -880203600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YPT" + } + }, + { + "transition_time": -765381600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": -147884400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "YDDT" + } + }, + { + "transition_time": -131554800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 120646800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 325677600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 341398800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 357127200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 372848400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 388576800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 404902800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 420026400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 436352400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 452080800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 467802000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 483530400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 499251600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 514980000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 530701200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 544615200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 562150800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 576064800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 594205200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 607514400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 625654800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 638964000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 657104400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 671018400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 688554000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 702468000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 720003600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 733917600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 752058000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 765367200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 783507600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 796816800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 814957200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 828871200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 846406800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 860320800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 877856400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 891770400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 909306000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 923220000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 941360400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 954669600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 972810000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 986119200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1004259600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1018173600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1035709200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1049623200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1067158800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1081072800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1099213200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1112522400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1130662800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1143972000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1162112400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1173607200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1194166800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1205056800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1225616400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1236506400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1257066000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1268560800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1289120400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1300010400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1320570000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1331460000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1352019600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1362909600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1383469200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1394359200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1414918800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1425808800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1446368400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1457863200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1478422800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1489312800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1509872400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1520762400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1541322000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1552212000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1572771600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1583661600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1604214000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-dawson_creek.json b/crates/zoneinfo/tests/data/america-dawson_creek.json new file mode 100644 index 000000000..902d5ecbb --- /dev/null +++ b/crates/zoneinfo/tests/data/america-dawson_creek.json @@ -0,0 +1,473 @@ +{ + "first_record": { + "offset": -28856, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713881544, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -1632060000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -1615129200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -880207200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PPT" + } + }, + { + "transition_time": -765385200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -715788000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -702486000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -684338400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -671036400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -652888800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -639586800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -620834400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -608137200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -589384800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -576082800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -557935200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -544633200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -526485600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -513183600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -495036000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -481734000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -463586400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -450284400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -431532000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -418230000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -400082400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -386780400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -368632800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -355330800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -337183200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -323881200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -305733600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -292431600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -273679200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -260982000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -242229600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -226508400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -210780000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -195058800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -179330400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -163609200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -147880800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -131554800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -116431200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -100105200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -84376800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -68655600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -52927200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -37206000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -21477600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -5756400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 9972000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 25693200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 41421600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 57747600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 73476000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 84013200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-denver.json b/crates/zoneinfo/tests/data/america-denver.json new file mode 100644 index 000000000..08aa47a36 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-denver.json @@ -0,0 +1,785 @@ +{ + "first_record": { + "offset": -25196, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717643600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1633273200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1615132800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1601823600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1583683200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1570374000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1551628800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1538924400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1534089600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -880210800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MPT" + } + }, + { + "transition_time": -765388800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -147884400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -131558400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -116434800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -100108800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -84380400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -68659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -52930800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -37209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -21481200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -5760000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 9968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 25689600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 41418000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 57744000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 73472400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 89193600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 104922000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 120643200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 126694800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 152092800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 162378000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 183542400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 199270800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 215596800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 230720400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 247046400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 262774800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 278496000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 294224400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 309945600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 325674000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 341395200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 357123600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 372844800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 388573200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 404899200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 420022800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 436348800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 452077200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 467798400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 483526800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 499248000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 514976400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 530697600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 544611600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 562147200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 576061200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 594201600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 607510800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 625651200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 638960400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 657100800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 671014800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 688550400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 702464400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 720000000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 733914000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 752054400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 765363600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 783504000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 796813200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 814953600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 828867600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 846403200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 860317200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 877852800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 891766800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 909302400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 923216400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 941356800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 954666000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 972806400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 986115600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1004256000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1018170000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1035705600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1049619600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1067155200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1081069200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1099209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1112518800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1130659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1143968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1162108800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1173603600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-detroit.json b/crates/zoneinfo/tests/data/america-detroit.json new file mode 100644 index 000000000..d22ebddfb --- /dev/null +++ b/crates/zoneinfo/tests/data/america-detroit.json @@ -0,0 +1,649 @@ +{ + "first_record": { + "offset": -19931, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2051202469, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1724083200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -880218000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EPT" + } + }, + { + "transition_time": -765396000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -684349200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -671047200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -80506740, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -68666400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -52938000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -37216800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 104914800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 120636000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 126687600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 152085600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 167814000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 183535200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 199263600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 215589600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 230713200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 247039200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 262767600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 278488800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 294217200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 309938400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 325666800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 341388000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 357116400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 372837600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 388566000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 404892000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 420015600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 436341600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 452070000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 467791200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 483519600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 499240800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 514969200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 530690400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 544604400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 562140000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 576054000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 594194400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 607503600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 625644000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 638953200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 657093600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 671007600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 688543200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 702457200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 719992800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 733906800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 752047200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 765356400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 783496800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 796806000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 814946400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 828860400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 846396000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 860310000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 877845600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 891759600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 909295200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 923209200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 941349600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 954658800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 972799200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 986108400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1004248800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1018162800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1035698400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1049612400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1067148000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1081062000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1099202400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1112511600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1130652000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1162101600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1173596400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-dominica.json b/crates/zoneinfo/tests/data/america-dominica.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-dominica.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-edmonton.json b/crates/zoneinfo/tests/data/america-edmonton.json new file mode 100644 index 000000000..96640ad76 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-edmonton.json @@ -0,0 +1,1033 @@ +{ + "first_record": { + "offset": -27232, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1998663968, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1632063600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1615132800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1600614000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1596816000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1567954800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1551628800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1536505200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1523203200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1504450800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1491753600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1473001200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1459699200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -880210800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MPT" + } + }, + { + "transition_time": -765388800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -715791600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -702489600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 73472400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 89193600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 104922000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 120643200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 136371600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 152092800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 167821200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 183542400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 199270800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 215596800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 230720400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 247046400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 262774800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 278496000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 294224400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 309945600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 325674000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 341395200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 357123600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 372844800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 388573200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 404899200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 420022800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 436348800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 452077200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 467798400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 483526800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 499248000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 514976400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 530697600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 544611600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 562147200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 576061200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 594201600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 607510800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 625651200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 638960400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 657100800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 671014800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 688550400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 702464400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 720000000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 733914000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 752054400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 765363600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 783504000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 796813200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 814953600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 828867600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 846403200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 860317200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 877852800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 891766800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 909302400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 923216400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 941356800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 954666000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 972806400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 986115600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1004256000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1018170000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1035705600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1049619600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1067155200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1081069200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1099209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1112518800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1130659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1143968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1162108800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1173603600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1194163200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1205053200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1225612800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1236502800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1257062400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1268557200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1289116800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1300006800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1320566400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1331456400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1352016000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1362906000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1383465600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1394355600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1414915200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1425805200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1446364800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1457859600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1478419200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1489309200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1509868800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1520758800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1541318400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1552208400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1572768000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1583658000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1604217600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1615712400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1636272000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1647162000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1667721600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1678611600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1699171200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1710061200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1730620800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1741510800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1762070400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1772960400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1793520000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-eirunepe.json b/crates/zoneinfo/tests/data/america-eirunepe.json new file mode 100644 index 000000000..720aa7b26 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-eirunepe.json @@ -0,0 +1,273 @@ +{ + "first_record": { + "offset": -16768, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767208832, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1206950400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1191355200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1175367600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1159819200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -633812400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -622062000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -602276400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -591825600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -570740400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -560203200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -539118000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -531345600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -191358000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -184190400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -155156400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -150062400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -128890800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -121118400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -99946800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -89582400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -68410800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -57960000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 499755600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": 511243200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 530600400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": 540273600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 562136400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": 571204800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 750834000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": 761716800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 1214283600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1384056000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-el_salvador.json b/crates/zoneinfo/tests/data/america-el_salvador.json new file mode 100644 index 000000000..84e1e427f --- /dev/null +++ b/crates/zoneinfo/tests/data/america-el_salvador.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": -21408, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1546279392, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 547020000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 559717200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 578469600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 591166800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-fort_nelson.json b/crates/zoneinfo/tests/data/america-fort_nelson.json new file mode 100644 index 000000000..d2bb66610 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-fort_nelson.json @@ -0,0 +1,1153 @@ +{ + "first_record": { + "offset": -29447, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713880953, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -1632060000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -1615129200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -880207200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PPT" + } + }, + { + "transition_time": -765385200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -715788000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -702486000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -684338400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -671036400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -652888800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -639586800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -620834400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -608137200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -589384800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -576082800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -557935200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -544633200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -526485600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -513183600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -495036000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -481734000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -463586400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -450284400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -431532000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -418230000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -400082400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -386780400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -368632800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -355330800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -337183200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -323881200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -305733600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -292431600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -273679200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -260982000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -242229600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -226508400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -210780000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -195058800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -179330400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -163609200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -147880800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -131554800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -116431200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -100105200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -84376800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -68655600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -52927200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -37206000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -21477600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -5756400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 9972000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 25693200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 41421600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 57747600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 73476000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 89197200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 104925600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 120646800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 136375200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 152096400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 167824800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 183546000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 199274400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 215600400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 230724000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 247050000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 262778400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 278499600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 294228000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 309949200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 325677600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 341398800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 357127200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 372848400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 388576800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 404902800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 420026400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 436352400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 452080800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 467802000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 483530400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 499251600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 514980000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 530701200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 544615200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 562150800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 576064800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 594205200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 607514400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 625654800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 638964000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 657104400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 671018400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 688554000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 702468000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 720003600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 733917600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 752058000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 765367200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 783507600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 796816800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 814957200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 828871200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 846406800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 860320800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 877856400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 891770400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 909306000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 923220000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 941360400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 954669600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 972810000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 986119200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1004259600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1018173600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1035709200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1049623200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1067158800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1081072800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1099213200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1112522400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1130662800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1143972000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1162112400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1173607200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1194166800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1205056800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1225616400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1236506400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1257066000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1268560800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1289120400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1300010400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1320570000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1331460000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1352019600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1362909600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1383469200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1394359200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1414918800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1425808800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-fortaleza.json b/crates/zoneinfo/tests/data/america-fortaleza.json new file mode 100644 index 000000000..1dfc04dcb --- /dev/null +++ b/crates/zoneinfo/tests/data/america-fortaleza.json @@ -0,0 +1,321 @@ +{ + "first_record": { + "offset": -9240, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767216360, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -1206957600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -1191362400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -1175374800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -1159826400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -633819600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -622069200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -602283600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -591832800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -570747600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -560210400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -539125200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -531352800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -191365200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -184197600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -155163600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -150069600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -128898000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -121125600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -99954000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -89589600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -68418000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -57967200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 499748400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 511236000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 530593200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 540266400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 562129200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 571197600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 592974000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 602042400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 634701600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 951616800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 970974000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 972180000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1003028400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1013911200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-glace_bay.json b/crates/zoneinfo/tests/data/america-glace_bay.json new file mode 100644 index 000000000..5e4f8d9fe --- /dev/null +++ b/crates/zoneinfo/tests/data/america-glace_bay.json @@ -0,0 +1,641 @@ +{ + "first_record": { + "offset": -14388, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2131646412, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1632074400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1615143600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -880221600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -526500000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -513198000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 73461600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 89182800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 104911200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 120632400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 136360800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 152082000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 167810400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 183531600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 199260000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 215586000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 230709600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 247035600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 262764000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 278485200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 294213600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 309934800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 325663200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 341384400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 357112800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 372834000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 388562400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 404888400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 420012000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 436338000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 452066400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 467787600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 483516000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 499237200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 514965600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 530686800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 544600800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 562136400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 576050400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 594190800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 607500000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 625640400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 638949600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 657090000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 671004000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 688539600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 702453600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 719989200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 733903200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 752043600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 765352800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 783493200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 796802400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 814942800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 828856800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 846392400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 860306400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 877842000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 891756000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 909291600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 923205600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 941346000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 954655200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 972795600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 986104800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1004245200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1018159200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1035694800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1049608800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1067144400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1081058400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1099198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1112508000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1130648400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1143957600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1162098000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1173592800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-godthab.json b/crates/zoneinfo/tests/data/america-godthab.json new file mode 100644 index 000000000..06c4fb966 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-godthab.json @@ -0,0 +1,721 @@ +{ + "first_record": { + "offset": -12416, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1686083584, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 323845200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 846378000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 859683600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 877827600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 891133200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 909277200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 922582800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 941331600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 954032400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 972781200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 985482000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1004230800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1017536400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1035680400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1048986000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1067130000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1080435600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1099184400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1111885200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1130634000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1143334800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1162083600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1174784400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1193533200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1206838800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1224982800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1238288400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1256432400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1269738000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1288486800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1301187600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1319936400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1332637200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1351386000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1364691600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1382835600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1396141200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1414285200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1427590800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1445734800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1459040400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1477789200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1490490000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1509238800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1521939600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1540688400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1553994000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1572138000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1585443600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1603587600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1616893200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1635642000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1648342800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1667091600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1679792400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": 1698541200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-goose_bay.json b/crates/zoneinfo/tests/data/america-goose_bay.json new file mode 100644 index 000000000..3db058894 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-goose_bay.json @@ -0,0 +1,1225 @@ +{ + "first_record": { + "offset": -14500, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713895900, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1632076148, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1615145348, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1096921748, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1061670600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1048973400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1030221000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1017523800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -998771400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -986074200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -966717000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -954624600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -935267400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -922570200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -903817800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -891120600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -872368200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NPT" + } + }, + { + "transition_time": -765401400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -746044200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -733347000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -714594600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -701897400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -683145000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -670447800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -651695400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -638998200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -619641000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -606943800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -589401000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -576099000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -557951400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -544649400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -526501800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -513199800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -495052200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -481750200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -463602600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -450300600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -431548200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -418246200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -400098600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -386796600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -368649000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -355347000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -337199400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -323897400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -305749800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -289423800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -273695400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -257974200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -242245800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -226524600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -210796200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -195075000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -179346600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -163625400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -147897000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -131571000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -119903400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -116445600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -100119600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -84391200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -68670000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -52941600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -37220400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -21492000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -5770800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 9957600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 25678800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 41407200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 57733200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 73461600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 89182800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 104911200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 120632400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 136360800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 152082000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 167810400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 183531600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 199260000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 215586000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 230709600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 247035600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 262764000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 278485200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 294213600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 309934800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 325663200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 341384400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 357112800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 372834000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 388562400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 404888400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 420012000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 436338000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 452066400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 467787600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 483516000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 499237200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 514965600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 530686800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 544593660, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 562129260, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 576043260, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "ADDT" + } + }, + { + "transition_time": 594180060, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 607492860, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 625633260, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 638942460, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 657082860, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 670996860, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 688532460, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 702446460, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 719982060, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 733896060, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 752036460, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 765345660, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 783486060, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 796795260, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 814935660, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 828849660, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 846385260, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 860299260, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 877834860, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 891748860, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 909284460, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 923198460, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 941338860, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 954648060, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 972788460, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 986097660, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1004238060, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1018152060, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1035687660, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1049601660, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1067137260, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1081051260, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1099191660, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1112500860, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1130641260, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1143950460, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1162090860, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1173585660, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1194145260, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1205035260, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1225594860, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1236484860, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1257044460, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1268539260, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1289098860, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1299988860, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1320555600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-grand_turk.json b/crates/zoneinfo/tests/data/america-grand_turk.json new file mode 100644 index 000000000..1a2e53f57 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-grand_turk.json @@ -0,0 +1,617 @@ +{ + "first_record": { + "offset": -17072, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524504528, + "record": { + "offset": -18430, + "is_dst": false, + "abbr": "KMT" + } + }, + { + "transition_time": -1827687170, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 294217200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 309938400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 325666800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 341388000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 357116400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 372837600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 388566000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 404892000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 420015600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 436341600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 452070000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 467791200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 483519600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 499240800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 514969200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 530690400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 544604400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 562140000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 576054000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 594194400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 607503600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 625644000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 638953200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 657093600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 671007600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 688543200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 702457200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 719992800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 733906800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 752047200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 765356400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 783496800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 796806000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 814946400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 828860400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 846396000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 860310000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 877845600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 891759600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 909295200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 923209200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 941349600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 954658800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 972799200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 986108400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1004248800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1018162800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1035698400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1049612400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1067148000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1081062000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1099202400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1112511600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1130652000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1162101600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1173596400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1194156000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1205046000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1225605600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1236495600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1257055200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1268550000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1289109600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1299999600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1320559200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1331449200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1352008800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1362898800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1383458400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1394348400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1414908000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1425798000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1520751600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-grenada.json b/crates/zoneinfo/tests/data/america-grenada.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-grenada.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-guadeloupe.json b/crates/zoneinfo/tests/data/america-guadeloupe.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-guadeloupe.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-guatemala.json b/crates/zoneinfo/tests/data/america-guatemala.json new file mode 100644 index 000000000..4b51d01dc --- /dev/null +++ b/crates/zoneinfo/tests/data/america-guatemala.json @@ -0,0 +1,81 @@ +{ + "first_record": { + "offset": -21724, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1617040676, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 123055200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 130914000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 422344800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 433054800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 669708000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 684219600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1146376800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1159678800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-guayaquil.json b/crates/zoneinfo/tests/data/america-guayaquil.json new file mode 100644 index 000000000..7a3867322 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-guayaquil.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -19160, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524502440, + "record": { + "offset": -18840, + "is_dst": false, + "abbr": "QMT" + } + }, + { + "transition_time": -1230749160, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 722926800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": 728884800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-guyana.json b/crates/zoneinfo/tests/data/america-guyana.json new file mode 100644 index 000000000..8ef6f2b3e --- /dev/null +++ b/crates/zoneinfo/tests/data/america-guyana.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -13959, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1843589241, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1730577600, + "record": { + "offset": -13500, + "is_dst": false, + "abbr": "-0345" + } + }, + { + "transition_time": 176096700, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 701841600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-halifax.json b/crates/zoneinfo/tests/data/america-halifax.json new file mode 100644 index 000000000..37c596152 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-halifax.json @@ -0,0 +1,1345 @@ +{ + "first_record": { + "offset": -15264, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2131645536, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1696276800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1680469200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1632074400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1615143600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1566763200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1557090000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1535486400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1524949200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1504468800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1493413200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1472414400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1461963600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1440964800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1429390800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1409515200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1396731600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1376856000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1366491600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1346616000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1333832400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1313956800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1303678800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1282507200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1272661200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1251057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1240088400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1219608000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1207429200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1188763200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1175979600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1157313600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1143925200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1124049600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1113771600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1091390400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1081026000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1059854400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1050786000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1030910400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1018126800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -999460800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -986677200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -965592000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -955227600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -935956800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -923173200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -904507200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -891723600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -880221600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -747252000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -733950000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -715802400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -702500400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -684352800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -671050800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -652903200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -639601200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -589399200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -576097200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -557949600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -544647600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -526500000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -513198000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -495050400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -481748400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -431546400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -418244400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -400096800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -386794800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -368647200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -355345200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -337197600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -323895600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -242244000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -226522800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -210794400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -195073200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -179344800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -163623600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -147895200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -131569200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -116445600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -100119600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -84391200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -68670000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -52941600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -37220400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -21492000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -5770800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 9957600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 25678800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 41407200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 57733200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 73461600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 89182800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 104911200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 120632400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 136360800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 152082000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 167810400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 183531600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 199260000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 215586000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 230709600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 247035600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 262764000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 278485200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 294213600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 309934800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 325663200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 341384400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 357112800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 372834000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 388562400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 404888400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 420012000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 436338000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 452066400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 467787600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 483516000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 499237200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 514965600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 530686800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 544600800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 562136400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 576050400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 594190800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 607500000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 625640400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 638949600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 657090000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 671004000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 688539600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 702453600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 719989200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 733903200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 752043600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 765352800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 783493200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 796802400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 814942800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 828856800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 846392400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 860306400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 877842000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 891756000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 909291600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 923205600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 941346000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 954655200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 972795600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 986104800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1004245200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1018159200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1035694800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1049608800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1067144400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1081058400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1099198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1112508000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1130648400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1143957600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1162098000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1173592800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-havana.json b/crates/zoneinfo/tests/data/america-havana.json new file mode 100644 index 000000000..0ae4c78b9 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-havana.json @@ -0,0 +1,857 @@ +{ + "first_record": { + "offset": -19768, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524501832, + "record": { + "offset": -19776, + "is_dst": false, + "abbr": "HMT" + } + }, + { + "transition_time": -1402813824, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1311534000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1300996800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -933534000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -925675200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -902084400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -893620800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -870030000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -862171200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -775681200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -767822400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -744231600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -736372800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -144702000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -134251200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -113425200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -102542400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -86295600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -72907200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -54154800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -41457600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -21495600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -5774400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 9954000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 25675200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 41403600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 57729600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 73458000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 87364800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 104907600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 118900800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 136357200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 150436800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 167806800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 183528000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 199256400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 215582400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 230706000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 247032000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 263365200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 276667200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 290581200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 308721600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 322030800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 340171200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 358318800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 371620800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 389768400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 403070400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 421218000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 434520000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 452667600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 466574400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 484117200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 498024000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 511333200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 529473600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 542782800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 560923200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 574837200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 592372800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 606286800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 623822400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 638946000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 655876800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 671000400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 687330000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 702450000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 718779600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 733899600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 750229200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 765349200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 781678800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 796798800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 813128400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828853200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 844578000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860302800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 876632400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 891147600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 909291600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 922597200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 941346000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 954651600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 972795600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 986101200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1004245200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1018155600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1035694800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1049605200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1067144400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1080450000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162098000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1173589200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1193547600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1205643600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1224997200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1236488400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1256446800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1268542800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1288501200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1300597200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1321160400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1333256400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1352005200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-hermosillo.json b/crates/zoneinfo/tests/data/america-hermosillo.json new file mode 100644 index 000000000..cb428815b --- /dev/null +++ b/crates/zoneinfo/tests/data/america-hermosillo.json @@ -0,0 +1,113 @@ +{ + "first_record": { + "offset": -26632, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1514739600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1343149200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1234807200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1220461200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1207159200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1191344400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -873828000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 828867600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 846403200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 860317200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 877852800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 891766800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 909302400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-indiana-indianapolis.json b/crates/zoneinfo/tests/data/america-indiana-indianapolis.json new file mode 100644 index 000000000..6fa44a907 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-indiana-indianapolis.json @@ -0,0 +1,313 @@ +{ + "first_record": { + "offset": -20678, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717647200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1633276800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1615136400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1601827200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1583686800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -900259200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -891795600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -880214400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CPT" + } + }, + { + "transition_time": -765392400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -747244800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -733942800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -715795200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -702493200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -684345600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -671043600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -652896000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -639594000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -620841600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -608144400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -589392000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -576090000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -557942400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -544640400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -526492800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -513190800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -495043200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -481741200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -463593600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -386787600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -368640000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -21488400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -5767200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 9961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 25682400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1162101600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1173596400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-indiana-knox.json b/crates/zoneinfo/tests/data/america-indiana-knox.json new file mode 100644 index 000000000..73a02a82c --- /dev/null +++ b/crates/zoneinfo/tests/data/america-indiana-knox.json @@ -0,0 +1,753 @@ +{ + "first_record": { + "offset": -20790, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717647200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1633276800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1615136400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1601827200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1583686800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -880214400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CPT" + } + }, + { + "transition_time": -765392400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -715795200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -702493200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -684345600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -671043600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -652896000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -639594000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -620841600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -608144400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -589392000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -576090000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -557942400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -544640400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -526492800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -513190800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -495043200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -481741200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -463593600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -447267600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -431539200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -415818000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -400089600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -386787600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -368640000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -355338000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -337190400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -321469200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -305740800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -289414800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -273686400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -257965200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -242236800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -195066000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -84384000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -68662800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -52934400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -37213200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -21484800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -5763600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 9964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 25686000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 41414400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 57740400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 73468800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 89190000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 104918400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 120639600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 126691200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 152089200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 162374400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 183538800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 199267200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 215593200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 230716800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 247042800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 262771200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 278492400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 294220800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 309942000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 325670400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 341391600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 357120000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 372841200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 388569600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 404895600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 420019200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 436345200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 452073600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 467794800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 483523200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 499244400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 514972800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 530694000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 544608000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 562143600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 576057600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 594198000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 607507200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 625647600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 638956800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 657097200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 671011200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 688546800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1173600000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-indiana-marengo.json b/crates/zoneinfo/tests/data/america-indiana-marengo.json new file mode 100644 index 000000000..df51c4569 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-indiana-marengo.json @@ -0,0 +1,345 @@ +{ + "first_record": { + "offset": -20723, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717647200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1633276800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1615136400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1601827200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1583686800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -880214400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CPT" + } + }, + { + "transition_time": -765392400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -589392000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -576090000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -495043200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -481741200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -463593600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -450291600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -431539200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -418237200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -400089600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -386787600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -368640000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -355338000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -337190400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -323888400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -305740800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -292438800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -273686400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -21488400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -5767200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 9961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 25682400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 41410800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 57736800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 73465200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 89186400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 104914800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 120636000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 126687600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 152089200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 162370800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 183535200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1162101600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1173596400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-indiana-petersburg.json b/crates/zoneinfo/tests/data/america-indiana-petersburg.json new file mode 100644 index 000000000..695d7041b --- /dev/null +++ b/crates/zoneinfo/tests/data/america-indiana-petersburg.json @@ -0,0 +1,457 @@ +{ + "first_record": { + "offset": -20947, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717647200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1633276800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1615136400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1601827200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1583686800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -880214400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CPT" + } + }, + { + "transition_time": -765392400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -462996000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -450291600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -431539200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -418237200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -400089600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -386787600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -368640000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -355338000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -337190400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -323888400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -305740800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -292438800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -273686400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -257965200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -242236800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -226515600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -210787200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -195066000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -179337600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -163616400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -147888000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -100112400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -84384000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -68662800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -52934400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -37213200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -21484800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -5763600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 9964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 25686000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 41414400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 57740400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 73468800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 89190000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 104918400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 120639600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 126691200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 152089200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 162374400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 183538800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 199267200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 215593200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 230716800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 247042800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1173600000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1194159600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-indiana-tell_city.json b/crates/zoneinfo/tests/data/america-indiana-tell_city.json new file mode 100644 index 000000000..17a540bec --- /dev/null +++ b/crates/zoneinfo/tests/data/america-indiana-tell_city.json @@ -0,0 +1,305 @@ +{ + "first_record": { + "offset": -20823, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717647200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1633276800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1615136400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1601827200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1583686800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -880214400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CPT" + } + }, + { + "transition_time": -765392400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -462996000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -450291600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -431539200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -418237200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -400089600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -386787600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -368640000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -355338000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -337190400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -323888400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -305740800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -292438800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -273686400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -257965200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -242236800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -226515600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -210787200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -195066000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -179337600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -68662800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -52934400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -37213200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -21484800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -5767200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 9961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 25682400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1173600000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-indiana-vevay.json b/crates/zoneinfo/tests/data/america-indiana-vevay.json new file mode 100644 index 000000000..35060be56 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-indiana-vevay.json @@ -0,0 +1,169 @@ +{ + "first_record": { + "offset": -20416, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717647200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1633276800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1615136400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1601827200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1583686800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -880214400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CPT" + } + }, + { + "transition_time": -765392400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -495043200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -21488400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -5767200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 9961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 25682400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 41410800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 57736800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 73465200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 89186400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1162101600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1173596400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-indiana-vincennes.json b/crates/zoneinfo/tests/data/america-indiana-vincennes.json new file mode 100644 index 000000000..f7ceca6f1 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-indiana-vincennes.json @@ -0,0 +1,337 @@ +{ + "first_record": { + "offset": -21007, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717647200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1633276800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1615136400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1601827200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1583686800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -880214400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CPT" + } + }, + { + "transition_time": -765392400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -747244800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -733942800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -526492800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -513190800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -495043200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -481741200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -462996000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -450291600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -431539200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -418237200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -400089600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -386787600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -368640000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -355338000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -337190400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -323888400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -305740800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -289414800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -273686400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -260989200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -242236800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -226515600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -210787200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -195066000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -179337600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -21488400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -5767200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 9961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 25682400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1173600000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1194159600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-indiana-winamac.json b/crates/zoneinfo/tests/data/america-indiana-winamac.json new file mode 100644 index 000000000..8b791fe3b --- /dev/null +++ b/crates/zoneinfo/tests/data/america-indiana-winamac.json @@ -0,0 +1,385 @@ +{ + "first_record": { + "offset": -20785, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717647200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1633276800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1615136400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1601827200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1583686800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -880214400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CPT" + } + }, + { + "transition_time": -765392400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -747244800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -733942800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -715795200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -702493200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -684345600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -671043600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -652896000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -639594000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -620841600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -608144400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -589392000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -576090000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -557942400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -544640400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -526492800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -513190800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -495043200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -481741200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -463593600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -447267600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -431539200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -415818000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -400089600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -386787600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -368640000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -355338000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -337190400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -323888400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -305740800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -292438800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -273686400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -21488400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -5767200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 9961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 25682400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1173600000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1194156000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-inuvik.json b/crates/zoneinfo/tests/data/america-inuvik.json new file mode 100644 index 000000000..5f6721d91 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-inuvik.json @@ -0,0 +1,897 @@ +{ + "first_record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + }, + "transitions": [ + { + "transition_time": -536457600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 73476000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 89197200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 104925600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 120646800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 136375200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 152096400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 167824800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 183546000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 199274400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 215600400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 230724000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 247050000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 262778400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 278499600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 294228000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 309945600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 325674000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 341395200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 357123600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 372844800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 388573200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 404899200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 420022800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 436348800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 452077200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 467798400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 483526800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 499248000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 514976400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 530697600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 544611600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 562147200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 576061200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 594201600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 607510800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 625651200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 638960400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 657100800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 671014800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 688550400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 702464400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 720000000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 733914000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 752054400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 765363600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 783504000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 796813200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 814953600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 828867600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 846403200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 860317200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 877852800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 891766800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 909302400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 923216400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 941356800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 954666000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 972806400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 986115600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1004256000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1018170000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1035705600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1049619600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1067155200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1081069200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1099209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1112518800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1130659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1143968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1162108800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1173603600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1194163200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1205053200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1225612800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1236502800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1257062400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1268557200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1289116800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1300006800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1320566400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1331456400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1352016000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1362906000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1383465600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1394355600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1414915200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1425805200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1446364800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1457859600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1478419200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1489309200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1509868800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1520758800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1541318400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1552208400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1572768000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1583658000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1604217600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1615712400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1636272000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1647162000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1667721600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1678611600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1699171200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1710061200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1730620800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1741510800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1762070400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1772960400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1793520000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-iqaluit.json b/crates/zoneinfo/tests/data/america-iqaluit.json new file mode 100644 index 000000000..201d99977 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-iqaluit.json @@ -0,0 +1,601 @@ +{ + "first_record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + }, + "transitions": [ + { + "transition_time": -865296000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EPT" + } + }, + { + "transition_time": -765396000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 73465200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 89186400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 104914800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 120636000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 136364400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 152085600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 167814000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 183535200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 199263600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 215589600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 230713200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 247039200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 262767600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 278488800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 294217200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 309938400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 325666800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 341388000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 357116400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 372837600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 388566000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 404892000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 420015600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 436341600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 452070000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 467791200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 483519600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 499240800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 514969200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 530690400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 544604400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 562140000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 576054000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 594194400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 607503600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 625644000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 638953200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 657093600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 671007600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 688543200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 702457200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 719992800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 733906800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 752047200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 765356400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 783496800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 796806000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 814946400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 828860400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 846396000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 860310000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 877845600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 891759600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 909295200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 923209200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 941349600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 954662400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 972802800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 986108400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1004248800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1018162800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1035698400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1049612400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1067148000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1081062000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1099202400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1112511600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1130652000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1162101600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1173596400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-jamaica.json b/crates/zoneinfo/tests/data/america-jamaica.json new file mode 100644 index 000000000..c8f495481 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-jamaica.json @@ -0,0 +1,185 @@ +{ + "first_record": { + "offset": -18430, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524503170, + "record": { + "offset": -18430, + "is_dst": false, + "abbr": "KMT" + } + }, + { + "transition_time": -1827687170, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 126687600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 152085600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 162370800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 183535200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 199263600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 215589600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 230713200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 247039200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 262767600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 278488800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 294217200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 309938400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 325666800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 341388000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 357116400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 372837600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 388566000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 404892000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 420015600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 436341600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-juneau.json b/crates/zoneinfo/tests/data/america-juneau.json new file mode 100644 index 000000000..113b2202b --- /dev/null +++ b/crates/zoneinfo/tests/data/america-juneau.json @@ -0,0 +1,673 @@ +{ + "first_record": { + "offset": 54139, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3225223727, + "record": { + "offset": -32261, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -2188954939, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -880207200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PPT" + } + }, + { + "transition_time": -765385200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -21477600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -5756400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 9972000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 25693200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 41421600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 57747600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 73476000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 89197200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 104925600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 120646800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 126698400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 152096400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 162381600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 183546000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 199274400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 215600400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 230724000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 247050000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 262778400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 278499600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 294228000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 309949200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 325677600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 341402400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 357127200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 372848400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 388576800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 404902800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 420026400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 436352400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 439030800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 452084400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 467805600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 483534000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 499255200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 514983600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 530704800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 544618800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 562154400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 576068400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 594208800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 607518000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 625658400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 638967600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 657108000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 671022000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 688557600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 702471600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 720007200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 733921200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 752061600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 765370800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 783511200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 796820400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 814960800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 828874800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 846410400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 860324400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 877860000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 891774000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 909309600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 923223600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 941364000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 954673200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 972813600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 986122800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1004263200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1018177200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1035712800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1049626800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1067162400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1081076400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1099216800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1112526000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1130666400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1143975600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1162116000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1173610800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-kentucky-louisville.json b/crates/zoneinfo/tests/data/america-kentucky-louisville.json new file mode 100644 index 000000000..69813d0a9 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-kentucky-louisville.json @@ -0,0 +1,945 @@ +{ + "first_record": { + "offset": -20582, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717647200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1633276800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1615136400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1601827200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1583686800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1535904000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1525280400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -905097600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -891795600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -880214400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CPT" + } + }, + { + "transition_time": -765392400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -747251940, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -744224400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -620841600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -608144400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -589392000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -576090000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -557942400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -544640400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -526492800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -513190800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -495043200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -481741200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -463593600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -450291600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -431539200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -415818000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -400089600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -384368400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -368640000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -352918800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -337190400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -321469200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -305740800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -289414800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -273686400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -266432400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -52938000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -37216800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -21488400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -5767200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 9961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 25682400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 41410800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 57736800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 73465200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 89186400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 104914800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 120636000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 126687600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 152089200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 162370800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 183535200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 199263600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 215589600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 230713200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 247039200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 262767600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 278488800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 294217200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 309938400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 325666800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 341388000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 357116400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 372837600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 388566000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 404892000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 420015600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 436341600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 452070000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 467791200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 483519600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 499240800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 514969200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 530690400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 544604400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 562140000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 576054000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 594194400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 607503600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 625644000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 638953200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 657093600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 671007600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 688543200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 702457200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 719992800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 733906800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 752047200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 765356400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 783496800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 796806000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 814946400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 828860400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 846396000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 860310000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 877845600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 891759600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 909295200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 923209200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 941349600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 954658800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 972799200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 986108400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1004248800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1018162800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1035698400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1049612400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1067148000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1081062000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1099202400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1112511600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1130652000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1162101600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1173596400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-kentucky-monticello.json b/crates/zoneinfo/tests/data/america-kentucky-monticello.json new file mode 100644 index 000000000..6c74745a1 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-kentucky-monticello.json @@ -0,0 +1,705 @@ +{ + "first_record": { + "offset": -20364, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717647200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1633276800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1615136400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1601827200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1583686800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -880214400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CPT" + } + }, + { + "transition_time": -765392400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -52934400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -37213200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -21484800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -5763600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 9964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 25686000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 41414400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 57740400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 73468800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 89190000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 104918400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 120639600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 126691200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 152089200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 162374400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 183538800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 199267200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 215593200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 230716800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 247042800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 262771200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 278492400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 294220800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 309942000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 325670400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 341391600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 357120000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 372841200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 388569600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 404895600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 420019200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 436345200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 452073600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 467794800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 483523200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 499244400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 514972800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 530694000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 544608000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 562143600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 576057600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 594198000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 607507200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 625647600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 638956800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 657097200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 671011200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 688546800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 702460800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 719996400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 733910400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 752050800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 765360000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 783500400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 796809600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 814950000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828864000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 846399600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860313600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 877849200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 891763200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 909298800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 923212800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 941353200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 954662400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 972802800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 986108400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1004248800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1018162800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1035698400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1049612400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1067148000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1081062000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1099202400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1112511600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1130652000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1162101600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1173596400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-kralendijk.json b/crates/zoneinfo/tests/data/america-kralendijk.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-kralendijk.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-la_paz.json b/crates/zoneinfo/tests/data/america-la_paz.json new file mode 100644 index 000000000..7fb82ef4a --- /dev/null +++ b/crates/zoneinfo/tests/data/america-la_paz.json @@ -0,0 +1,33 @@ +{ + "first_record": { + "offset": -16356, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524505244, + "record": { + "offset": -16356, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1205954844, + "record": { + "offset": -12756, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1192307244, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-lima.json b/crates/zoneinfo/tests/data/america-lima.json new file mode 100644 index 000000000..5ab9cd9f6 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-lima.json @@ -0,0 +1,137 @@ +{ + "first_record": { + "offset": -18492, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524503108, + "record": { + "offset": -18516, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1938538284, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1009825200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1002052800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -986756400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -971035200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -955306800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -939585600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 504939600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": 512712000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 536475600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": 544248000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 631170000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": 638942400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 757400400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": 765172800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-los_angeles.json b/crates/zoneinfo/tests/data/america-los_angeles.json new file mode 100644 index 000000000..036d445bb --- /dev/null +++ b/crates/zoneinfo/tests/data/america-los_angeles.json @@ -0,0 +1,1009 @@ +{ + "first_record": { + "offset": -28378, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717640000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -1633269600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -1615129200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -1601820000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -1583679600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -880207200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PPT" + } + }, + { + "transition_time": -765385200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -687967140, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -662655600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -620838000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -608137200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -589388400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -576082800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -557938800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -544633200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -526489200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -513183600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -495039600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -481734000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -463590000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -450284400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -431535600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -418230000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -400086000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -386780400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -368636400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -355330800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -337186800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -323881200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -305737200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -292431600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -273682800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -260982000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -242233200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -226508400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -210783600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -195058800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -179334000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -163609200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -147884400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -131554800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -116434800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -100105200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -84376800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -68655600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -52927200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -37206000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -21477600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -5756400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 9972000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 25693200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 41421600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 57747600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 73476000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 89197200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 104925600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 120646800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 126698400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 152096400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 162381600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 183546000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 199274400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 215600400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 230724000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 247050000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 262778400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 278499600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 294228000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 309949200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 325677600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 341398800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 357127200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 372848400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 388576800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 404902800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 420026400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 436352400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 452080800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 467802000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 483530400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 499251600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 514980000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 530701200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 544615200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 562150800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 576064800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 594205200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 607514400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 625654800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 638964000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 657104400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 671018400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 688554000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 702468000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 720003600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 733917600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 752058000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 765367200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 783507600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 796816800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 814957200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 828871200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 846406800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 860320800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 877856400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 891770400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 909306000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 923220000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 941360400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 954669600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 972810000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 986119200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1004259600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1018173600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1035709200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1049623200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1067158800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1081072800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1099213200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1112522400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1130662800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1143972000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1162112400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1173607200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-lower_princes.json b/crates/zoneinfo/tests/data/america-lower_princes.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-lower_princes.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-maceio.json b/crates/zoneinfo/tests/data/america-maceio.json new file mode 100644 index 000000000..434568632 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-maceio.json @@ -0,0 +1,337 @@ +{ + "first_record": { + "offset": -8572, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767217028, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -1206957600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -1191362400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -1175374800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -1159826400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -633819600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -622069200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -602283600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -591832800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -570747600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -560210400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -539125200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -531352800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -191365200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -184197600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -155163600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -150069600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -128898000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -121125600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -99954000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -89589600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -68418000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -57967200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 499748400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 511236000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 530593200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 540266400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 562129200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 571197600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 592974000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 602042400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 634701600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 813726000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 824004000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 951616800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 970974000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 972180000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1003028400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1013911200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-managua.json b/crates/zoneinfo/tests/data/america-managua.json new file mode 100644 index 000000000..d515cec0a --- /dev/null +++ b/crates/zoneinfo/tests/data/america-managua.json @@ -0,0 +1,137 @@ +{ + "first_record": { + "offset": -20708, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524500892, + "record": { + "offset": -20712, + "is_dst": false, + "abbr": "MMT" + } + }, + { + "transition_time": -1121105688, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 105084000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 161758800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 290584800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 299134800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 322034400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 330584400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 694260000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 717310800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 725868000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 852094800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1113112800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1128229200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1146384000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1159682400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-manaus.json b/crates/zoneinfo/tests/data/america-manaus.json new file mode 100644 index 000000000..2c06a8e60 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-manaus.json @@ -0,0 +1,257 @@ +{ + "first_record": { + "offset": -14404, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767211196, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1206954000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1191358800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1175371200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1159822800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -633816000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -622065600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -602280000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -591829200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -570744000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -560206800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -539121600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -531349200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -191361600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -155160000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -150066000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -128894400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -99950400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -89586000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -68414400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -57963600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 499752000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 511239600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 530596800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 540270000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 562132800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 571201200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 750830400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 761713200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-marigot.json b/crates/zoneinfo/tests/data/america-marigot.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-marigot.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-martinique.json b/crates/zoneinfo/tests/data/america-martinique.json new file mode 100644 index 000000000..f50d2177c --- /dev/null +++ b/crates/zoneinfo/tests/data/america-martinique.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -14660, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524506940, + "record": { + "offset": -14660, + "is_dst": false, + "abbr": "FFMT" + } + }, + { + "transition_time": -1851537340, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 323841600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 338958000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-matamoros.json b/crates/zoneinfo/tests/data/america-matamoros.json new file mode 100644 index 000000000..ba5692f2e --- /dev/null +++ b/crates/zoneinfo/tests/data/america-matamoros.json @@ -0,0 +1,265 @@ +{ + "first_record": { + "offset": -23400, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1514743200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 576057600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 594198000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828864000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 846399600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860313600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 877849200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 891763200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 909298800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 923212800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 941353200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 954662400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 972802800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 989136000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1001833200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1018166400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1035702000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1049616000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1067151600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1081065600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1099206000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1112515200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1130655600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1143964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1175414400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1193554800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1207468800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1225004400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1238918400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1256454000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1268553600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-mazatlan.json b/crates/zoneinfo/tests/data/america-mazatlan.json new file mode 100644 index 000000000..8217cf336 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-mazatlan.json @@ -0,0 +1,497 @@ +{ + "first_record": { + "offset": -25540, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1514739600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1343149200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1234807200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1220461200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1207159200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1191344400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -873828000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 828867600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 846403200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 860317200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 877852800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 891766800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 909302400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 923216400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 941356800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 954666000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 972806400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 989139600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1001836800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1018170000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1035705600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1049619600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1067155200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1081069200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1099209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1112518800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1130659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1143968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1162108800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1175418000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1193558400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1207472400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1225008000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1238922000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1256457600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1270371600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1288512000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1301821200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1319961600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1333270800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1351411200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1365325200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1382860800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1396774800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1414310400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1428224400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1445760000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1459674000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1477814400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1491123600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1509264000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1522573200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1540713600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1554627600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1572163200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1586077200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1603612800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1617526800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1635667200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1648976400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1667116800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-menominee.json b/crates/zoneinfo/tests/data/america-menominee.json new file mode 100644 index 000000000..d132a529d --- /dev/null +++ b/crates/zoneinfo/tests/data/america-menominee.json @@ -0,0 +1,665 @@ +{ + "first_record": { + "offset": -21027, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2659759773, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1633276800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1615136400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1601827200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1583686800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -880214400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CPT" + } + }, + { + "transition_time": -765392400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -747244800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -733942800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -116438400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -100112400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -21484800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 104914800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 120639600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 126691200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 152089200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 162374400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 183538800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 199267200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 215593200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 230716800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 247042800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 262771200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 278492400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 294220800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 309942000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 325670400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 341391600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 357120000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 372841200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 388569600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 404895600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 420019200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 436345200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 452073600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 467794800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 483523200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 499244400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 514972800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 530694000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 544608000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 562143600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 576057600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 594198000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 607507200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 625647600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 638956800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 657097200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 671011200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 688546800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 702460800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 719996400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 733910400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 752050800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 765360000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 783500400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 796809600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 814950000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828864000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 846399600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860313600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 877849200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 891763200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 909298800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 923212800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 941353200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 954662400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 972802800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 986112000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1004252400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1018166400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1035702000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1049616000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1067151600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1081065600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1099206000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1112515200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1130655600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1143964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1173600000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-merida.json b/crates/zoneinfo/tests/data/america-merida.json new file mode 100644 index 000000000..fc7786492 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-merida.json @@ -0,0 +1,465 @@ +{ + "first_record": { + "offset": -21508, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1514743200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 378201600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 405068400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828864000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 846399600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860313600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 877849200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 891763200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 909298800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 923212800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 941353200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 954662400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 972802800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 989136000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1001833200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1018166400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1035702000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1049616000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1067151600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1081065600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1099206000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1112515200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1130655600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1143964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1175414400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1193554800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1207468800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1225004400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1238918400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1256454000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1270368000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1288508400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1301817600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1319958000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1333267200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1351407600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1365321600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1382857200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1396771200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1414306800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1428220800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1445756400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1459670400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1477810800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1491120000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1509260400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1522569600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1540710000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1554624000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1572159600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1586073600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1603609200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1617523200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1635663600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1648972800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1667113200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-metlakatla.json b/crates/zoneinfo/tests/data/america-metlakatla.json new file mode 100644 index 000000000..52891abcd --- /dev/null +++ b/crates/zoneinfo/tests/data/america-metlakatla.json @@ -0,0 +1,361 @@ +{ + "first_record": { + "offset": 54822, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3225223727, + "record": { + "offset": -31578, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -2188955622, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -880207200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PPT" + } + }, + { + "transition_time": -765385200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -21477600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -5756400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 9972000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 25693200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 41421600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 57747600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 73476000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 89197200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 104925600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 120646800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 126698400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 152096400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 162381600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 183546000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 199274400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 215600400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 230724000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 247050000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 262778400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 278499600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 294228000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 309949200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 325677600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 341398800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 357127200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 372848400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 388576800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 404902800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 420026400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 436352400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1446372000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1457866800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1478426400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1489316400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1509876000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1520766000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1541325600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1547978400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1552215600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-mexico_city.json b/crates/zoneinfo/tests/data/america-mexico_city.json new file mode 100644 index 000000000..799036f23 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-mexico_city.json @@ -0,0 +1,553 @@ +{ + "first_record": { + "offset": -23796, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1514739600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1343149200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1234807200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1220461200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1207159200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1191344400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -975261600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -963169200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -917114400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -907354800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -821901600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CWT" + } + }, + { + "transition_time": -810068400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -627501600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -612990000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828864000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 846399600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860313600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 877849200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 891763200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 909298800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 923212800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 941353200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 954662400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 972802800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 989136000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1001833200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1018166400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1035702000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1049616000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1067151600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1081065600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1099206000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1112515200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1130655600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1143964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1175414400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1193554800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1207468800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1225004400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1238918400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1256454000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1270368000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1288508400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1301817600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1319958000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1333267200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1351407600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1365321600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1382857200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1396771200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1414306800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1428220800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1445756400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1459670400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1477810800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1491120000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1509260400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1522569600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1540710000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1554624000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1572159600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1586073600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1603609200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1617523200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1635663600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1648972800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1667113200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-miquelon.json b/crates/zoneinfo/tests/data/america-miquelon.json new file mode 100644 index 000000000..94e4d2224 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-miquelon.json @@ -0,0 +1,353 @@ +{ + "first_record": { + "offset": -13480, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1847650520, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 326001600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 544597200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 562132800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 576046800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 594187200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 607496400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 625636800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 638946000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 657086400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 671000400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 688536000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 702450000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 719985600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 733899600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 752040000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 765349200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 783489600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 796798800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 814939200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 828853200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 846388800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 860302800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 877838400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 891752400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 909288000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 923202000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 941342400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 954651600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 972792000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 986101200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1004241600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1018155600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1035691200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1049605200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1067140800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1081054800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1099195200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1112504400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1130644800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1143954000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1162094400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1173589200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-moncton.json b/crates/zoneinfo/tests/data/america-moncton.json new file mode 100644 index 000000000..7cf1b559d --- /dev/null +++ b/crates/zoneinfo/tests/data/america-moncton.json @@ -0,0 +1,1177 @@ +{ + "first_record": { + "offset": -15548, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2715882052, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -2131642800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1632074400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1615143600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1153681200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1145822400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1122231600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1114372800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1090782000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1082923200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1059332400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1051473600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -1027882800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -1020024000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -996433200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -988574400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -965674800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -955396800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -934743600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -923947200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -904503600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -891892800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -880221600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -747252000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -733950000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -715802400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -702500400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -684352800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -671050800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -652903200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -639601200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -620848800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -608151600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -589399200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -576097200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -557949600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -544647600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -526500000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -513198000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -495050400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -481748400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -463600800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -450298800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -431546400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -418244400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -400096800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -384375600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -368647200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -352926000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -337197600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -321476400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -305748000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -289422000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -273693600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -257972400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -242244000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -226522800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -210794400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -195073200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -179344800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -163623600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -147895200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -131569200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -116445600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -100119600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -84391200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -68670000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -52941600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -37220400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -21492000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -5770800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 9957600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 25678800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 41407200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 57733200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 73461600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 89182800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 136360800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 152082000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 167810400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 183531600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 199260000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 215586000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 230709600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 247035600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 262764000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 278485200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 294213600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 309934800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 325663200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 341384400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 357112800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 372834000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 388562400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 404888400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 420012000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 436338000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 452066400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 467787600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 483516000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 499237200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 514965600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 530686800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 544600800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 562136400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 576050400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 594190800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 607500000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 625640400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 638949600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 657090000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 671004000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 688539600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 702453600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 719989200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 733896060, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 752036460, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 765345660, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 783486060, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 796795260, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 814935660, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 828849660, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 846385260, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 860299260, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 877834860, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 891748860, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 909284460, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 923198460, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 941338860, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 954648060, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 972788460, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 986097660, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1004238060, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1018152060, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1035687660, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1049601660, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1067137260, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1081051260, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1099191660, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1112500860, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1130641260, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1143950460, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1162090860, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1173592800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-monterrey.json b/crates/zoneinfo/tests/data/america-monterrey.json new file mode 100644 index 000000000..337c02e62 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-monterrey.json @@ -0,0 +1,505 @@ +{ + "first_record": { + "offset": -24076, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1514743200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1343149200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1234807200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1220461200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1207159200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1191344400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 576057600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 594198000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828864000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 846399600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860313600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 877849200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 891763200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 909298800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 923212800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 941353200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 954662400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 972802800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 989136000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1001833200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1018166400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1035702000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1049616000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1067151600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1081065600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1099206000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1112515200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1130655600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1143964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1175414400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1193554800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1207468800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1225004400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1238918400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1256454000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1270368000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1288508400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1301817600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1319958000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1333267200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1351407600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1365321600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1382857200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1396771200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1414306800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1428220800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1445756400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1459670400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1477810800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1491120000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1509260400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1522569600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1540710000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1554624000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1572159600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1586073600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1603609200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1617523200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1635663600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1648972800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1667113200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-montevideo.json b/crates/zoneinfo/tests/data/america-montevideo.json new file mode 100644 index 000000000..5b2bdcebd --- /dev/null +++ b/crates/zoneinfo/tests/data/america-montevideo.json @@ -0,0 +1,697 @@ +{ + "first_record": { + "offset": -13491, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1942690509, + "record": { + "offset": -13491, + "is_dst": false, + "abbr": "MMT" + } + }, + { + "transition_time": -1567455309, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1459627200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1443819600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "-0330" + } + }, + { + "transition_time": -1428006600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1412283600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "-0330" + } + }, + { + "transition_time": -1396470600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1380747600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "-0330" + } + }, + { + "transition_time": -1141590600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1128286800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "-0330" + } + }, + { + "transition_time": -1110141000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1096837200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "-0330" + } + }, + { + "transition_time": -1078691400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1065387600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "-0330" + } + }, + { + "transition_time": -1047241800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1033938000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "-0330" + } + }, + { + "transition_time": -1015187400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1002488400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "-0330" + } + }, + { + "transition_time": -983737800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -971038800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "-0330" + } + }, + { + "transition_time": -954707400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -938984400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "-0330" + } + }, + { + "transition_time": -920838600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -907534800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "-0330" + } + }, + { + "transition_time": -896819400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -853621200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "-0230" + } + }, + { + "transition_time": -845847000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -334789200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "-0230" + } + }, + { + "transition_time": -319671000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -314226000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -309996000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -149720400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -134604000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -50446800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "-0230" + } + }, + { + "transition_time": -34205400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 9860400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 14176800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 72846000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 80100000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 127278000, + "record": { + "offset": -5400, + "is_dst": true, + "abbr": "-0130" + } + }, + { + "transition_time": 132111000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "-0230" + } + }, + { + "transition_time": 147234600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 156913200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 165376800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 219812400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 226461600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 250052400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 257911200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 282711600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 289360800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 294202800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 322020000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 566449200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 573012000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 597812400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 605066400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 625633200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 635911200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 656478000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 667965600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 688532400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 699415200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 719377200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 730864800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1095562800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1111896000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1128834000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1142136000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1159678800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1173585600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1191733200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1205035200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1223182800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1236484800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1254632400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1268539200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1286082000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1299988800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1317531600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1331438400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1349586000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1362888000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1381035600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1394337600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1412485200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1425787200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-montserrat.json b/crates/zoneinfo/tests/data/america-montserrat.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-montserrat.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-nassau.json b/crates/zoneinfo/tests/data/america-nassau.json new file mode 100644 index 000000000..bb4b201a1 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-nassau.json @@ -0,0 +1,1385 @@ +{ + "first_record": { + "offset": -19052, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2366736148, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1632070800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1615140000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1601753400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1583697600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1567357200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1554667200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1534698000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1524074400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1503248400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1492365600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1471798800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1460916000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1440954000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1428861600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1409504400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1397412000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1378054800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1365962400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1346605200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1333908000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1315155600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1301853600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1283706000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1270404000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1252256400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1238954400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1220806800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1207504800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1188752400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1176055200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1157302800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1144000800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1125853200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1112551200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1094403600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1081101600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1062954000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1049652000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1031504400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1018202400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1000054800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -986752800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -968000400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -955303200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -936550800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -880218000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EPT" + } + }, + { + "transition_time": -765396000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -747248400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -733946400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -715798800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -702496800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -684349200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -671047200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -652899600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -634154400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -620845200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -602704800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -589395600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -576093600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -557946000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -544644000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -526496400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -513194400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -495046800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -481744800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -463597200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -450295200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -431542800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -418240800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -400093200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -384372000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -368643600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -352922400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -337194000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -321472800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -305744400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -289418400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -273690000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -257968800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -242240400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -226519200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -210790800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -195069600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -179341200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -163620000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -147891600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -131565600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -116442000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -100116000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -84387600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -68666400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -52938000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -37216800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -21488400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -5767200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 9961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 25682400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 41410800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 57736800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 73465200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 89186400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 104914800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 120636000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 136364400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 152085600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 167814000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 183535200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 199263600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 215589600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 230713200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 247039200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 262767600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 278488800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 294217200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 309938400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 325666800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 341388000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 357116400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 372837600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 388566000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 404892000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 420015600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 436341600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 452070000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 467791200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 483519600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 499240800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 514969200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 530690400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 544604400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 562140000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 576054000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 594194400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 607503600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 625644000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 638953200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 657093600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 671007600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 688543200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 702457200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 719992800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 733906800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 752047200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 765356400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 783496800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 796806000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 814946400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 828860400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 846396000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 860310000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 877845600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 891759600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 909295200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 923209200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 941349600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 954658800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 972799200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 986108400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1004248800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1018162800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1035698400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1049612400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1067148000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1081062000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1099202400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1112511600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1130652000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1162101600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1173596400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + } + ] +} \ No newline at end of file diff --git a/zoneinfo/tests/data/america-new_york.json b/crates/zoneinfo/tests/data/america-new_york.json similarity index 100% rename from zoneinfo/tests/data/america-new_york.json rename to crates/zoneinfo/tests/data/america-new_york.json diff --git a/crates/zoneinfo/tests/data/america-nome.json b/crates/zoneinfo/tests/data/america-nome.json new file mode 100644 index 000000000..6abd2896f --- /dev/null +++ b/crates/zoneinfo/tests/data/america-nome.json @@ -0,0 +1,681 @@ +{ + "first_record": { + "offset": 46702, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3225223727, + "record": { + "offset": -39698, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -2188947502, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -880196400, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "NWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "NPT" + } + }, + { + "transition_time": -765374400, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -86878800, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": -21466800, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": -5745600, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 9982800, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 25704000, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 41432400, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 57758400, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 73486800, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 89208000, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 104936400, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 120657600, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 126709200, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 152107200, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 162392400, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 183556800, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 199285200, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 215611200, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 230734800, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 247060800, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 262789200, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 278510400, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 294238800, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 309960000, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 325688400, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 341409600, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 357138000, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 372859200, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 388587600, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 404913600, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 420037200, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "BDT" + } + }, + { + "transition_time": 436363200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 439030800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 452084400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 467805600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 483534000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 499255200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 514983600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 530704800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 544618800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 562154400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 576068400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 594208800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 607518000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 625658400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 638967600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 657108000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 671022000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 688557600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 702471600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 720007200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 733921200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 752061600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 765370800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 783511200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 796820400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 814960800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 828874800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 846410400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 860324400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 877860000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 891774000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 909309600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 923223600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 941364000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 954673200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 972813600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 986122800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1004263200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1018177200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1035712800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1049626800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1067162400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1081076400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1099216800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1112526000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1130666400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1143975600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1162116000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1173610800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-noronha.json b/crates/zoneinfo/tests/data/america-noronha.json new file mode 100644 index 000000000..e8cb960e0 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-noronha.json @@ -0,0 +1,321 @@ +{ + "first_record": { + "offset": -7780, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767217820, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1206961200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1191366000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1175378400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1159830000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -633823200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -622072800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -602287200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -591836400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -570751200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -560214000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -539128800, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -531356400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -191368800, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -184201200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -155167200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -150073200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -128901600, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -121129200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -99957600, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -89593200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -68421600, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -57970800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": 499744800, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": 511232400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": 530589600, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": 540262800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": 562125600, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": 571194000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": 592970400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": 602038800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": 624420000, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": 634698000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": 938916000, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": 951613200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": 970970400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": 971571600, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": 1003024800, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": 1013907600, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-north_dakota-beulah.json b/crates/zoneinfo/tests/data/america-north_dakota-beulah.json new file mode 100644 index 000000000..1e7e850bc --- /dev/null +++ b/crates/zoneinfo/tests/data/america-north_dakota-beulah.json @@ -0,0 +1,777 @@ +{ + "first_record": { + "offset": -24427, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717643600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1633273200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1615132800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1601823600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1583683200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -880210800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MPT" + } + }, + { + "transition_time": -765388800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -84380400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -68659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -52930800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -37209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -21481200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -5760000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 9968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 25689600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 41418000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 57744000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 73472400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 89193600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 104922000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 120643200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 126694800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 152092800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 162378000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 183542400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 199270800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 215596800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 230720400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 247046400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 262774800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 278496000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 294224400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 309945600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 325674000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 341395200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 357123600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 372844800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 388573200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 404899200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 420022800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 436348800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 452077200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 467798400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 483526800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 499248000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 514976400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 530697600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 544611600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 562147200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 576061200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 594201600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 607510800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 625651200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 638960400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 657100800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 671014800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 688550400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 702464400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 720000000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 733914000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 752054400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 765363600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 783504000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 796813200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 814953600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 828867600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 846403200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 860317200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 877852800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 891766800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 909302400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 923216400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 941356800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 954666000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 972806400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 986115600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1004256000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1018170000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1035705600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1049619600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1067155200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1081069200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1099209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1112518800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1130659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1143968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1162108800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1173603600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1194163200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1205053200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1225612800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1236502800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1257062400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1268557200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1289116800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-north_dakota-center.json b/crates/zoneinfo/tests/data/america-north_dakota-center.json new file mode 100644 index 000000000..8789b9f9b --- /dev/null +++ b/crates/zoneinfo/tests/data/america-north_dakota-center.json @@ -0,0 +1,721 @@ +{ + "first_record": { + "offset": -24312, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717643600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1633273200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1615132800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1601823600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1583683200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -880210800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MPT" + } + }, + { + "transition_time": -765388800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -84380400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -68659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -52930800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -37209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -21481200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -5760000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 9968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 25689600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 41418000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 57744000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 73472400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 89193600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 104922000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 120643200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 126694800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 152092800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 162378000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 183542400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 199270800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 215596800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 230720400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 247046400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 262774800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 278496000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 294224400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 309945600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 325674000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 341395200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 357123600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 372844800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 388573200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 404899200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 420022800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 436348800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 452077200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 467798400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 483526800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 499248000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 514976400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 530697600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 544611600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 562147200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 576061200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 594201600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 607510800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 625651200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 638960400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 657100800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 671014800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 688550400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 702464400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 720000000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 733910400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 752050800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 765360000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 783500400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 796809600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 814950000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828864000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 846399600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860313600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 877849200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 891763200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 909298800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 923212800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 941353200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 954662400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 972802800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 986112000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1004252400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1018166400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1035702000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1049616000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1067151600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1081065600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1099206000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1112515200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1130655600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1143964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1173600000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-north_dakota-new_salem.json b/crates/zoneinfo/tests/data/america-north_dakota-new_salem.json new file mode 100644 index 000000000..0cb619846 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-north_dakota-new_salem.json @@ -0,0 +1,721 @@ +{ + "first_record": { + "offset": -24339, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717643600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1633273200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1615132800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1601823600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1583683200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -880210800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MPT" + } + }, + { + "transition_time": -765388800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -84380400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -68659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -52930800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -37209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -21481200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -5760000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 9968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 25689600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 41418000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 57744000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 73472400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 89193600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 104922000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 120643200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 126694800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 152092800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 162378000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 183542400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 199270800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 215596800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 230720400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 247046400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 262774800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 278496000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 294224400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 309945600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 325674000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 341395200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 357123600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 372844800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 388573200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 404899200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 420022800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 436348800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 452077200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 467798400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 483526800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 499248000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 514976400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 530697600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 544611600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 562147200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 576061200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 594201600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 607510800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 625651200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 638960400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 657100800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 671014800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 688550400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 702464400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 720000000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 733914000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 752054400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 765363600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 783504000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 796813200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 814953600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 828867600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 846403200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 860317200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 877852800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 891766800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 909302400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 923216400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 941356800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 954666000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 972806400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 986115600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1004256000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1018170000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1035705600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1049619600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1067155200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1081065600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1099206000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1112515200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1130655600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1143964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1173600000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-nuuk.json b/crates/zoneinfo/tests/data/america-nuuk.json new file mode 100644 index 000000000..06c4fb966 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-nuuk.json @@ -0,0 +1,721 @@ +{ + "first_record": { + "offset": -12416, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1686083584, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 323845200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 846378000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 859683600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 877827600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 891133200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 909277200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 922582800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 941331600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 954032400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 972781200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 985482000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1004230800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1017536400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1035680400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1048986000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1067130000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1080435600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1099184400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1111885200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1130634000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1143334800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1162083600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1174784400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1193533200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1206838800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1224982800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1238288400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1256432400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1269738000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1288486800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1301187600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1319936400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1332637200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1351386000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1364691600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1382835600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1396141200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1414285200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1427590800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1445734800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1459040400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1477789200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1490490000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1509238800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1521939600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1540688400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1553994000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1572138000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1585443600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1603587600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1616893200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1635642000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1648342800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1667091600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1679792400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": 1698541200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-ojinaga.json b/crates/zoneinfo/tests/data/america-ojinaga.json new file mode 100644 index 000000000..439174a94 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-ojinaga.json @@ -0,0 +1,489 @@ +{ + "first_record": { + "offset": -25060, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1514739600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1343149200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1234807200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1220461200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1207159200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1191344400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828864000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 846399600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860313600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 877849200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 891766800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 909302400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 923216400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 941356800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 954666000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 972806400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 989139600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1001836800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1018170000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1035705600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1049619600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1067155200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1081069200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1099209600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1112518800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1130659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1143968400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1162108800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1175418000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1193558400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1207472400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1225008000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1238922000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1256457600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1268557200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1289116800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1300006800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1320566400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1331456400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1352016000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1362906000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1383465600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1394355600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1414915200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1425805200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1446364800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1457859600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1478419200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1489309200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1509868800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1520758800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1541318400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1552208400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1572768000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1583658000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1604217600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1615712400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1636272000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 1647162000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": 1667116800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-panama.json b/crates/zoneinfo/tests/data/america-panama.json new file mode 100644 index 000000000..238f60148 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-panama.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": -19088, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524502512, + "record": { + "offset": -19176, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1946918424, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-paramaribo.json b/crates/zoneinfo/tests/data/america-paramaribo.json new file mode 100644 index 000000000..eb5c2b890 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-paramaribo.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -13240, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1861906760, + "record": { + "offset": -13252, + "is_dst": false, + "abbr": "PMT" + } + }, + { + "transition_time": -1104524348, + "record": { + "offset": -13236, + "is_dst": false, + "abbr": "PMT" + } + }, + { + "transition_time": -765317964, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "-0330" + } + }, + { + "transition_time": 465449400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-phoenix.json b/crates/zoneinfo/tests/data/america-phoenix.json new file mode 100644 index 000000000..c2a7492d4 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-phoenix.json @@ -0,0 +1,97 @@ +{ + "first_record": { + "offset": -26898, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2717643600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1633273200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1615132800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1601823600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1583683200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -880210800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MWT" + } + }, + { + "transition_time": -820519140, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -812653140, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MWT" + } + }, + { + "transition_time": -796845540, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -84380400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -68659200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-port-au-prince.json b/crates/zoneinfo/tests/data/america-port-au-prince.json new file mode 100644 index 000000000..5d9de1038 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-port-au-prince.json @@ -0,0 +1,369 @@ +{ + "first_record": { + "offset": -17360, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524504240, + "record": { + "offset": -17340, + "is_dst": false, + "abbr": "PPMT" + } + }, + { + "transition_time": -1670483460, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 421218000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 436334400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 452062800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 467784000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 483512400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 499233600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 514962000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 530683200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 546411600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 562132800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 576050400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 594194400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 607500000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 625644000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 638949600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 657093600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 671004000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 688543200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 702453600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 719992800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 733903200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 752047200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 765352800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 783496800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 796802400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 814946400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 828856800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 846396000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 860306400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 877845600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1112504400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1130644800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143954000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1162094400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1331449200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1352008800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1362898800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1383458400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1394348400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1414908000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1425798000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1446357600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1489302000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-port_of_spain.json b/crates/zoneinfo/tests/data/america-port_of_spain.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-port_of_spain.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-porto_velho.json b/crates/zoneinfo/tests/data/america-porto_velho.json new file mode 100644 index 000000000..8beed037a --- /dev/null +++ b/crates/zoneinfo/tests/data/america-porto_velho.json @@ -0,0 +1,241 @@ +{ + "first_record": { + "offset": -15336, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767210264, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1206954000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1191358800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1175371200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1159822800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -633816000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -622065600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -602280000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -591829200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -570744000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -560206800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -539121600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -531349200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -191361600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -155160000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -150066000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -128894400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -99950400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -89586000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -68414400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -57963600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 499752000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 511239600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 530596800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 540270000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 562132800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 571201200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-puerto_rico.json b/crates/zoneinfo/tests/data/america-puerto_rico.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-puerto_rico.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-punta_arenas.json b/crates/zoneinfo/tests/data/america-punta_arenas.json new file mode 100644 index 000000000..ffc54be6c --- /dev/null +++ b/crates/zoneinfo/tests/data/america-punta_arenas.json @@ -0,0 +1,945 @@ +{ + "first_record": { + "offset": -17020, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524504580, + "record": { + "offset": -16965, + "is_dst": false, + "abbr": "SMT" + } + }, + { + "transition_time": -1892661435, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1688410800, + "record": { + "offset": -16965, + "is_dst": false, + "abbr": "SMT" + } + }, + { + "transition_time": -1619205435, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1593806400, + "record": { + "offset": -16965, + "is_dst": false, + "abbr": "SMT" + } + }, + { + "transition_time": -1335986235, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1317585600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1304362800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1286049600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1272826800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1254513600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1241290800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1222977600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1209754800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1191355200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1178132400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -870552000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -865278000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -736632000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -718056000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -713649600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -36619200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23922000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -3355200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 7527600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 24465600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 37767600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 55915200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 69217200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 87969600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 100666800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 118209600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 132116400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 150868800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 163566000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 182318400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 195620400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 213768000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 227070000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 245217600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 258519600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 277272000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 289969200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 308721600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 321418800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 340171200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 353473200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 371620800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 384922800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 403070400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 416372400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 434520000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 447822000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 466574400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 479271600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 498024000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 510721200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 529473600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 545194800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 560923200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 574225200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 592372800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 605674800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 624427200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 637124400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 653457600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 668574000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 687326400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 700628400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 718776000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 732078000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 750225600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 763527600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 781675200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 794977200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 813729600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 826426800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 845179200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 859690800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 876628800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 889930800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 906868800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 923194800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 939528000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952830000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 971582400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 984279600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1003032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1015729200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1034481600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1047178800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1065931200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1079233200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1097380800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1110682800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1128830400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1142132400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1160884800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1173582000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1192334400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1206846000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1223784000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1237086000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1255233600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1270350000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1286683200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1304823600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1313899200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1335668400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1346558400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1367118000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1378612800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1398567600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1410062400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1463281200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1471147200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1480820400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-rankin_inlet.json b/crates/zoneinfo/tests/data/america-rankin_inlet.json new file mode 100644 index 000000000..c31ca9761 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-rankin_inlet.json @@ -0,0 +1,585 @@ +{ + "first_record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + }, + "transitions": [ + { + "transition_time": -410227200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 73468800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 89190000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 104918400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 120639600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 136368000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 152089200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 167817600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 183538800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 199267200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 215593200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 230716800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 247042800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 262771200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 278492400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 294220800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 309942000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 325670400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 341391600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 357120000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 372841200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 388569600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 404895600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 420019200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 436345200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 452073600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 467794800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 483523200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 499244400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 514972800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 530694000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 544608000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 562143600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 576057600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 594198000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 607507200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 625647600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 638956800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 657097200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 671011200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 688546800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 702460800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 719996400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 733910400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 752050800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 765360000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 783500400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 796809600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 814950000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828864000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 846399600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860313600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 877849200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 891763200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 909298800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 923212800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 941353200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 954662400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 972802800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 986112000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1004252400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1018166400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1035702000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1049616000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1067151600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1081065600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1099206000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1112515200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1130655600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1143964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1173600000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-recife.json b/crates/zoneinfo/tests/data/america-recife.json new file mode 100644 index 000000000..3091c6b7d --- /dev/null +++ b/crates/zoneinfo/tests/data/america-recife.json @@ -0,0 +1,321 @@ +{ + "first_record": { + "offset": -8376, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767217224, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -1206957600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -1191362400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -1175374800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -1159826400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -633819600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -622069200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -602283600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -591832800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -570747600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -560210400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -539125200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -531352800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -191365200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -184197600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -155163600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -150069600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -128898000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -121125600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -99954000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -89589600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": -68418000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": -57967200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 499748400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 511236000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 530593200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 540266400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 562129200, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 571197600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 592974000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 602042400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 624423600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 634701600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 938919600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 951616800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 970974000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 971575200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 1003028400, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 1013911200, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-regina.json b/crates/zoneinfo/tests/data/america-regina.json new file mode 100644 index 000000000..0d4760e57 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-regina.json @@ -0,0 +1,433 @@ +{ + "first_record": { + "offset": -25116, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2030202084, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1632063600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1615132800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1251651600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1238349600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1220202000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1206900000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1188752400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1175450400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1156698000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1144000800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1125248400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1111946400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1032714000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1016992800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1001264400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -986148000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -969814800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -954093600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -937760400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -922039200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -906310800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -890589600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -880210800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MPT" + } + }, + { + "transition_time": -765388800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -748450800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -732729600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -715791600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -702489600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -684342000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -671040000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -652892400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -639590400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -620838000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -608140800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -589388400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -576086400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -557938800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -544636800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -526489200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -513187200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -495039600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -481737600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -463590000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -450288000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -431535600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -418233600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -400086000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -386784000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -337186800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -321465600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -305737200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-resolute.json b/crates/zoneinfo/tests/data/america-resolute.json new file mode 100644 index 000000000..e5653badd --- /dev/null +++ b/crates/zoneinfo/tests/data/america-resolute.json @@ -0,0 +1,585 @@ +{ + "first_record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + }, + "transitions": [ + { + "transition_time": -704937600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 73468800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 89190000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 104918400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 120639600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 136368000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 152089200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 167817600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 183538800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 199267200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 215593200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 230716800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 247042800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 262771200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 278492400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 294220800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 309942000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 325670400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 341391600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 357120000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 372841200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 388569600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 404895600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 420019200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 436345200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 452073600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 467794800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 483523200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 499244400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 514972800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 530694000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 544608000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 562143600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 576057600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 594198000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 607507200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 625647600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 638956800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 657097200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 671011200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 688546800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 702460800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 719996400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 733910400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 752050800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 765360000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 783500400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 796809600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 814950000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828864000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 846399600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860313600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 877849200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 891763200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 909298800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 923212800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 941353200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 954662400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 972802800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 986112000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1004252400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1018166400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1035702000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1049616000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1067151600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1081065600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1099206000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1112515200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1130655600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1143964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1173600000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-rio_branco.json b/crates/zoneinfo/tests/data/america-rio_branco.json new file mode 100644 index 000000000..63fdd6127 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-rio_branco.json @@ -0,0 +1,257 @@ +{ + "first_record": { + "offset": -16272, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767209328, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1206950400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1191355200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1175367600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1159819200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -633812400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -622062000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -602276400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -591825600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -570740400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -560203200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -539118000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -531345600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -191358000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -184190400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -155156400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -150062400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -128890800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -121118400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -99946800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -89582400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -68410800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -57960000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 499755600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": 511243200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 530600400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": 540273600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 562136400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": 571204800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 1214283600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1384056000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-santarem.json b/crates/zoneinfo/tests/data/america-santarem.json new file mode 100644 index 000000000..cacd70612 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-santarem.json @@ -0,0 +1,249 @@ +{ + "first_record": { + "offset": -13128, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767212472, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1206954000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1191358800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1175371200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1159822800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -633816000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -622065600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -602280000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -591829200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -570744000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -560206800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -539121600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -531349200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -191361600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -184194000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -155160000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -150066000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -128894400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -99950400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -89586000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -68414400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -57963600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 499752000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 511239600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 530596800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 540270000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 562132800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 571201200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1214280000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-santiago.json b/crates/zoneinfo/tests/data/america-santiago.json new file mode 100644 index 000000000..6607951cf --- /dev/null +++ b/crates/zoneinfo/tests/data/america-santiago.json @@ -0,0 +1,1049 @@ +{ + "first_record": { + "offset": -16965, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524504635, + "record": { + "offset": -16965, + "is_dst": false, + "abbr": "SMT" + } + }, + { + "transition_time": -1892661435, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1688410800, + "record": { + "offset": -16965, + "is_dst": false, + "abbr": "SMT" + } + }, + { + "transition_time": -1619205435, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1593806400, + "record": { + "offset": -16965, + "is_dst": false, + "abbr": "SMT" + } + }, + { + "transition_time": -1335986235, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1317585600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1304362800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1286049600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1272826800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1254513600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1241290800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1222977600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1209754800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -1191355200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -1178132400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -870552000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -865278000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -740520000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -736635600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "-04" + } + }, + { + "transition_time": -718056000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": -713649600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -36619200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23922000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -3355200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 7527600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 24465600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 37767600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 55915200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 69217200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 87969600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 100666800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 118209600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 132116400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 150868800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 163566000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 182318400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 195620400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 213768000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 227070000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 245217600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 258519600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 277272000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 289969200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 308721600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 321418800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 340171200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 353473200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 371620800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 384922800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 403070400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 416372400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 434520000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 447822000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 466574400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 479271600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 498024000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 510721200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 529473600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 545194800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 560923200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 574225200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 592372800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 605674800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 624427200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 637124400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 653457600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 668574000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 687326400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 700628400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 718776000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 732078000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 750225600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 763527600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 781675200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 794977200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 813729600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 826426800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 845179200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 859690800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 876628800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 889930800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 906868800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 923194800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 939528000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952830000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 971582400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 984279600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1003032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1015729200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1034481600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1047178800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1065931200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1079233200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1097380800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1110682800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1128830400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1142132400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1160884800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1173582000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1192334400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1206846000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1223784000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1237086000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1255233600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1270350000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1286683200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1304823600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1313899200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1335668400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1346558400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1367118000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1378612800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1398567600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1410062400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1463281200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1471147200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1494730800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1502596800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1526180400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1534046400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1554606000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1567915200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1586055600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1599364800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1617505200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1630814400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1648954800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1662868800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1680404400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-santo_domingo.json b/crates/zoneinfo/tests/data/america-santo_domingo.json new file mode 100644 index 000000000..7e13e29b4 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-santo_domingo.json @@ -0,0 +1,145 @@ +{ + "first_record": { + "offset": -16776, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524504824, + "record": { + "offset": -16800, + "is_dst": false, + "abbr": "SDMT" + } + }, + { + "transition_time": -1159773600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -100119600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -89668800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -5770800, + "record": { + "offset": -16200, + "is_dst": true, + "abbr": "-0430" + } + }, + { + "transition_time": 4422600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 25678800, + "record": { + "offset": -16200, + "is_dst": true, + "abbr": "-0430" + } + }, + { + "transition_time": 33193800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 57733200, + "record": { + "offset": -16200, + "is_dst": true, + "abbr": "-0430" + } + }, + { + "transition_time": 64816200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 89182800, + "record": { + "offset": -16200, + "is_dst": true, + "abbr": "-0430" + } + }, + { + "transition_time": 96438600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 120632400, + "record": { + "offset": -16200, + "is_dst": true, + "abbr": "-0430" + } + }, + { + "transition_time": 127974600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 152082000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 972799200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 975823200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/zoneinfo/tests/data/america-sao_paulo.json b/crates/zoneinfo/tests/data/america-sao_paulo.json similarity index 100% rename from zoneinfo/tests/data/america-sao_paulo.json rename to crates/zoneinfo/tests/data/america-sao_paulo.json diff --git a/crates/zoneinfo/tests/data/america-scoresbysund.json b/crates/zoneinfo/tests/data/america-scoresbysund.json new file mode 100644 index 000000000..8076e4802 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-scoresbysund.json @@ -0,0 +1,729 @@ +{ + "first_record": { + "offset": -5272, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1686090728, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": 323841600, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": 338961600, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": 354679200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 846378000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 859683600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 877827600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 891133200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 909277200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 922582800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 941331600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 954032400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 972781200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 985482000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1004230800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1017536400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1035680400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1048986000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1067130000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1080435600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1099184400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1111885200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1130634000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1143334800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1162083600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1174784400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1193533200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1206838800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1224982800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1238288400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1256432400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1269738000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1288486800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1301187600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1319936400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1332637200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1351386000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1364691600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1382835600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1396141200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1414285200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1427590800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1445734800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1459040400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1477789200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1490490000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1509238800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1521939600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1540688400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1553994000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1572138000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1585443600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1603587600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1616893200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1635642000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1648342800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1667091600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1679792400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 1698541200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 1711846800, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-sitka.json b/crates/zoneinfo/tests/data/america-sitka.json new file mode 100644 index 000000000..ca5b8731e --- /dev/null +++ b/crates/zoneinfo/tests/data/america-sitka.json @@ -0,0 +1,673 @@ +{ + "first_record": { + "offset": 53927, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3225223727, + "record": { + "offset": -32473, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -2188954727, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -880207200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PPT" + } + }, + { + "transition_time": -765385200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -21477600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -5756400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 9972000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 25693200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 41421600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 57747600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 73476000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 89197200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 104925600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 120646800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 126698400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 152096400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 162381600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 183546000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 199274400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 215600400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 230724000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 247050000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 262778400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 278499600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 294228000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 309949200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 325677600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 341398800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 357127200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 372848400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 388576800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 404902800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 420026400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 436352400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 439030800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 452084400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 467805600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 483534000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 499255200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 514983600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 530704800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 544618800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 562154400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 576068400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 594208800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 607518000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 625658400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 638967600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 657108000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 671022000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 688557600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 702471600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 720007200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 733921200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 752061600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 765370800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 783511200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 796820400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 814960800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 828874800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 846410400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 860324400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 877860000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 891774000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 909309600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 923223600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 941364000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 954673200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 972813600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 986122800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1004263200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1018177200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1035712800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1049626800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1067162400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1081076400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1099216800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1112526000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1130666400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1143975600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1162116000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1173610800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-st_barthelemy.json b/crates/zoneinfo/tests/data/america-st_barthelemy.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-st_barthelemy.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-st_johns.json b/crates/zoneinfo/tests/data/america-st_johns.json new file mode 100644 index 000000000..b8e58c4b3 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-st_johns.json @@ -0,0 +1,1505 @@ +{ + "first_record": { + "offset": -12652, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713897748, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1664130548, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1650137348, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1632076148, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1615145348, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1598650148, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1590100148, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1567286948, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1551565748, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1535837348, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1520116148, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1503782948, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1488666548, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1472333348, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1457216948, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1440883748, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1425767348, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1409434148, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1394317748, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1377984548, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1362263348, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1346534948, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1330813748, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1314480548, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1299364148, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1283030948, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1267914548, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1251581348, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1236464948, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1220131748, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1205015348, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1188682148, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1172960948, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1156627748, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1141511348, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1125178148, + "record": { + "offset": -9052, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1110061748, + "record": { + "offset": -12652, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1096921748, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1093728600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1078612200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1061670600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1048973400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -1030221000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -1017523800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -998771400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -986074200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -966717000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -954624600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -935267400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -922570200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -903817800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -891120600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -872368200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NPT" + } + }, + { + "transition_time": -765401400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -746044200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -733347000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -714594600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -701897400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -683145000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -670447800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -651695400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -638998200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -619641000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -606943800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -589401000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -576099000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -557951400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -544649400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -526501800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -513199800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -495052200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -481750200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -463602600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -450300600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -431548200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -418246200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -400098600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -386796600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -368649000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -355347000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -337199400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -323897400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -305749800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -289423800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -273695400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -257974200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -242245800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -226524600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -210796200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -195075000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -179346600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -163625400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -147897000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -131571000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -116447400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -100121400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -84393000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -68671800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -52943400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -37222200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": -21493800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": -5772600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 9955800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 25677000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 41405400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 57731400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 73459800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 89181000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 104909400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 120630600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 136359000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 152080200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 167808600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 183529800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 199258200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 215584200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 230707800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 247033800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 262762200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 278483400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 294211800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 309933000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 325661400, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 341382600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 357111000, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 372832200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 388560600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 404886600, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 420010200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 436336200, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 452064600, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 467785800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 483514200, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 499235400, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 514963800, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 530685000, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 544591860, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 562127460, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 576041460, + "record": { + "offset": -5400, + "is_dst": true, + "abbr": "NDDT" + } + }, + { + "transition_time": 594178260, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 607491060, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 625631460, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 638940660, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 657081060, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 670995060, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 688530660, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 702444660, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 719980260, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 733894260, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 752034660, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 765343860, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 783484260, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 796793460, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 814933860, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 828847860, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 846383460, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 860297460, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 877833060, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 891747060, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 909282660, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 923196660, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 941337060, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 954646260, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 972786660, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 986095860, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 1004236260, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 1018150260, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 1035685860, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 1049599860, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 1067135460, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 1081049460, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 1099189860, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 1112499060, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 1130639460, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 1143948660, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 1162089060, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 1173583860, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 1194143460, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 1205033460, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 1225593060, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 1236483060, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 1257042660, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 1268537460, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 1289097060, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + }, + { + "transition_time": 1299987060, + "record": { + "offset": -9000, + "is_dst": true, + "abbr": "NDT" + } + }, + { + "transition_time": 1320553800, + "record": { + "offset": -12600, + "is_dst": false, + "abbr": "NST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-st_kitts.json b/crates/zoneinfo/tests/data/america-st_kitts.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-st_kitts.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-st_lucia.json b/crates/zoneinfo/tests/data/america-st_lucia.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-st_lucia.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-st_thomas.json b/crates/zoneinfo/tests/data/america-st_thomas.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-st_thomas.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-st_vincent.json b/crates/zoneinfo/tests/data/america-st_vincent.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-st_vincent.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-swift_current.json b/crates/zoneinfo/tests/data/america-swift_current.json new file mode 100644 index 000000000..29c4d893d --- /dev/null +++ b/crates/zoneinfo/tests/data/america-swift_current.json @@ -0,0 +1,193 @@ +{ + "first_record": { + "offset": -25880, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2030201320, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1632063600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -1615132800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -880210800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MPT" + } + }, + { + "transition_time": -765388800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -747241200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -732729600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -715791600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -702489600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -684342000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -671040000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -652892400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -639590400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -400086000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -384364800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -337186800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -321465600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -305737200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -292435200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -273682800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "MDT" + } + }, + { + "transition_time": -260985600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": 73472400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-tegucigalpa.json b/crates/zoneinfo/tests/data/america-tegucigalpa.json new file mode 100644 index 000000000..3da1b70a7 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-tegucigalpa.json @@ -0,0 +1,65 @@ +{ + "first_record": { + "offset": -20932, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1538503868, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 547020000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 559717200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 578469600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 591166800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1146981600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1154926800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-thule.json b/crates/zoneinfo/tests/data/america-thule.json new file mode 100644 index 000000000..64a628a13 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-thule.json @@ -0,0 +1,281 @@ +{ + "first_record": { + "offset": -16508, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1686079492, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 670399200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 686120400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 701848800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 717570000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 733903200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 752043600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 765352800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 783493200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 796802400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 814942800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 828856800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 846392400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 860306400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 877842000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 891756000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 909291600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 923205600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 941346000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 954655200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 972795600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 986104800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1004245200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1018159200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1035694800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1049608800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1067144400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1081058400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1099198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1112508000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1130648400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1143957600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1162098000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1173592800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-tijuana.json b/crates/zoneinfo/tests/data/america-tijuana.json new file mode 100644 index 000000000..fbb33d9d3 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-tijuana.json @@ -0,0 +1,1065 @@ +{ + "first_record": { + "offset": -28084, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1514739600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1451667600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -1343145600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + }, + { + "transition_time": -1234803600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -1222963200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -1207242000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -873820800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PPT" + } + }, + { + "transition_time": -761418000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -686073600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -661539600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -620755200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -608144400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -589384800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -576082800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -557935200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -544633200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -526489200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -513183600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -495039600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -481734000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -463590000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -450284400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -431535600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -418230000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -400086000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -386780400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -368636400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -355330800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -337186800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -323881200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -305737200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -292431600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -273682800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -260982000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -242233200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -226508400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -210783600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -195058800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -179334000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -163609200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -147884400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -131554800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -116434800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -100105200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -84376800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -68655600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -52927200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -37206000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -21477600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -5756400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 9972000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 25693200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 41421600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 57747600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 73476000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 89197200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 104925600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 120646800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 126698400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 152096400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 162381600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 183546000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 199274400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 215600400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 230724000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 247050000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 262778400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 278499600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 294228000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 309949200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 325677600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 341398800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 357127200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 372848400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 388576800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 404902800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 420026400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 436352400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 452080800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 467802000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 483530400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 499251600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 514980000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 530701200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 544615200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 562150800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 576064800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 594205200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 607514400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 625654800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 638964000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 657104400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 671018400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 688554000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 702468000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 720003600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 733917600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 752058000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 765367200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 783507600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 796816800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 814957200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 828871200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 846406800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 860320800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 877856400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 891770400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 909306000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 923220000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 941360400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 954669600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 972810000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 986119200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1004259600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1018173600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1035709200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1049623200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1067158800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1081072800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1099213200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1112522400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1130662800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1143972000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1162112400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1175421600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1193562000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1207476000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1225011600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1238925600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1256461200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1268560800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-toronto.json b/crates/zoneinfo/tests/data/america-toronto.json new file mode 100644 index 000000000..bb4b201a1 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-toronto.json @@ -0,0 +1,1385 @@ +{ + "first_record": { + "offset": -19052, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2366736148, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1632070800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1615140000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1601753400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1583697600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1567357200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1554667200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1534698000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1524074400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1503248400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1492365600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1471798800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1460916000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1440954000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1428861600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1409504400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1397412000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1378054800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1365962400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1346605200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1333908000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1315155600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1301853600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1283706000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1270404000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1252256400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1238954400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1220806800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1207504800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1188752400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1176055200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1157302800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1144000800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1125853200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1112551200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1094403600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1081101600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1062954000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1049652000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1031504400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -1018202400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -1000054800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -986752800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -968000400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -955303200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -936550800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -880218000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EPT" + } + }, + { + "transition_time": -765396000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -747248400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -733946400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -715798800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -702496800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -684349200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -671047200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -652899600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -634154400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -620845200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -602704800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -589395600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -576093600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -557946000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -544644000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -526496400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -513194400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -495046800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -481744800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -463597200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -450295200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -431542800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -418240800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -400093200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -384372000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -368643600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -352922400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -337194000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -321472800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -305744400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -289418400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -273690000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -257968800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -242240400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -226519200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -210790800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -195069600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -179341200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -163620000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -147891600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -131565600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -116442000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -100116000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -84387600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -68666400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -52938000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -37216800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": -21488400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": -5767200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 9961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 25682400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 41410800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 57736800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 73465200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 89186400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 104914800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 120636000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 136364400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 152085600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 167814000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 183535200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 199263600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 215589600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 230713200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 247039200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 262767600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 278488800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 294217200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 309938400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 325666800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 341388000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 357116400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 372837600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 388566000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 404892000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 420015600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 436341600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 452070000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 467791200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 483519600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 499240800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 514969200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 530690400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 544604400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 562140000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 576054000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 594194400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 607503600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 625644000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 638953200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 657093600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 671007600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 688543200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 702457200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 719992800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 733906800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 752047200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 765356400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 783496800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 796806000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 814946400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 828860400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 846396000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 860310000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 877845600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 891759600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 909295200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 923209200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 941349600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 954658800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 972799200, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 986108400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1004248800, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1018162800, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1035698400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1049612400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1067148000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1081062000, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1099202400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1112511600, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1130652000, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1143961200, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + }, + { + "transition_time": 1162101600, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + }, + { + "transition_time": 1173596400, + "record": { + "offset": -14400, + "is_dst": true, + "abbr": "EDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-tortola.json b/crates/zoneinfo/tests/data/america-tortola.json new file mode 100644 index 000000000..fec66a7ba --- /dev/null +++ b/crates/zoneinfo/tests/data/america-tortola.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -15865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2233035335, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -873057600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "AWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "APT" + } + }, + { + "transition_time": -765399600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-vancouver.json b/crates/zoneinfo/tests/data/america-vancouver.json new file mode 100644 index 000000000..2d6d5b886 --- /dev/null +++ b/crates/zoneinfo/tests/data/america-vancouver.json @@ -0,0 +1,1353 @@ +{ + "first_record": { + "offset": -29548, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713880852, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -1632060000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -1615129200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -880207200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PPT" + } + }, + { + "transition_time": -765385200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -747237600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -733935600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -715788000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -702486000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -684338400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -671036400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -652888800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -639586800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -620834400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -608137200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -589384800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -576082800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -557935200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -544633200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -526485600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -513183600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -495036000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -481734000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -463586400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -450284400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -431532000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -418230000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -400082400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -386780400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -368632800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -355330800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -337183200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -323881200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -305733600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -292431600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -273679200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -260982000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -242229600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -226508400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -210780000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -195058800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -179330400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -163609200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -147880800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -131554800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -116431200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -100105200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -84376800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -68655600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -52927200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -37206000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -21477600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -5756400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 9972000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 25693200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 41421600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 57747600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 73476000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 89197200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 104925600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 120646800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 136375200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 152096400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 167824800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 183546000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 199274400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 215600400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 230724000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 247050000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 262778400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 278499600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 294228000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 309949200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 325677600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 341398800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 357127200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 372848400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 388576800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 404902800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 420026400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 436352400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 452080800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 467802000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 483530400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 499251600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 514980000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 530701200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 544615200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 562150800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 576064800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 594205200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 607514400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 625654800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 638964000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 657104400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 671018400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 688554000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 702468000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 720003600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 733917600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 752058000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 765367200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 783507600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 796816800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 814957200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 828871200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 846406800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 860320800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 877856400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 891770400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 909306000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 923220000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 941360400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 954669600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 972810000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 986119200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1004259600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1018173600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1035709200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1049623200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1067158800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1081072800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1099213200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1112522400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1130662800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1143972000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1162112400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1173607200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1194166800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1205056800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1225616400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1236506400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1257066000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1268560800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1289120400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1300010400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1320570000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1331460000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1352019600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1362909600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1383469200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1394359200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1414918800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1425808800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1446368400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1457863200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1478422800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1489312800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1509872400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1520762400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1541322000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1552212000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1572771600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1583661600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1604221200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1615716000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1636275600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1647165600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1667725200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1678615200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1699174800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1710064800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1730624400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1741514400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1762074000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1772964000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1793523600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-whitehorse.json b/crates/zoneinfo/tests/data/america-whitehorse.json new file mode 100644 index 000000000..6e4d694af --- /dev/null +++ b/crates/zoneinfo/tests/data/america-whitehorse.json @@ -0,0 +1,753 @@ +{ + "first_record": { + "offset": -32412, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2188997988, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": -1632056400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": -1615125600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": -1596978000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": -1583164800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": -880203600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YPT" + } + }, + { + "transition_time": -765381600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": -147884400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "YDDT" + } + }, + { + "transition_time": -131554800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": -121273200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 325677600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 341398800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 357127200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 372848400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 388576800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 404902800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 420026400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 436352400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 452080800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 467802000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 483530400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 499251600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 514980000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 530701200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 544615200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 562150800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 576064800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 594205200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 607514400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 625654800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 638964000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 657104400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 671018400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 688554000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 702468000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 720003600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 733917600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 752058000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 765367200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 783507600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 796816800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 814957200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 828871200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 846406800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 860320800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 877856400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 891770400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 909306000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 923220000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 941360400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 954669600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 972810000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 986119200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1004259600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1018173600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1035709200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1049623200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1067158800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1081072800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1099213200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1112522400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1130662800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1143972000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1162112400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1173607200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1194166800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1205056800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1225616400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1236506400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1257066000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1268560800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1289120400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1300010400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1320570000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1331460000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1352019600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1362909600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1383469200, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1394359200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1414918800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1425808800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1446368400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1457863200, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1478422800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1489312800, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1509872400, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1520762400, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1541322000, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1552212000, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1572771600, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 1583661600, + "record": { + "offset": -25200, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 1604214000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "MST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-winnipeg.json b/crates/zoneinfo/tests/data/america-winnipeg.json new file mode 100644 index 000000000..12d25a4ae --- /dev/null +++ b/crates/zoneinfo/tests/data/america-winnipeg.json @@ -0,0 +1,1321 @@ +{ + "first_record": { + "offset": -23316, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2602258284, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1694368800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1681671600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1632067200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1615136400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1029686400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1018198800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -880214400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CPT" + } + }, + { + "transition_time": -765392400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -746035200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -732733200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -715795200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -702493200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -684345600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -671043600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -652896000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -639594000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -620755200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -607626000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -589392000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -576090000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -557942400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -544640400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -526492800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -513190800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -495043200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -481741200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -463593600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -450291600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -431539200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -418237200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -400089600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -386787600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -368640000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -355338000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -337190400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -321469200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -305740800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -292438800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -210787200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -198090000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -116438400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -100108800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -84384000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -68659200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -52934400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -37209600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -21484800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -5760000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 9964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 25689600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 41414400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 57744000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 73468800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 89193600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 104918400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 120643200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 136368000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 152092800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 167817600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 183542400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 199267200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 215596800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 230716800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 247046400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 262771200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 278496000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 294220800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 309945600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 325670400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 341395200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 357120000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 372844800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 388569600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 404899200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 420019200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 436348800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 452073600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 467798400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 483523200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 499248000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 514972800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 530697600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 544608000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 562147200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 576057600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 594201600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 607507200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 625651200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 638956800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 657100800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 671011200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 688550400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 702460800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 720000000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 733910400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 752054400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 765360000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 783504000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 796809600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 814953600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 828864000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 846403200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 860313600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 877852800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 891763200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 909302400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 923212800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 941356800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 954662400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 972806400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 986112000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1004256000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1018166400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1035705600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1049616000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1067155200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1081065600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1099209600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1112515200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1130659200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1143964800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1162105200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1173600000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1194159600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1205049600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1225609200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1236499200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1257058800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1268553600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1289113200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1300003200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1320562800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1331452800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1352012400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1362902400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1383462000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1394352000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1414911600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1425801600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1446361200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1457856000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1478415600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1489305600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1509865200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1520755200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1541314800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1552204800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1572764400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1583654400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1604214000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1615708800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1636268400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1647158400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1667718000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1678608000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1699167600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1710057600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1730617200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1741507200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1762066800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 1772956800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 1793516400, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "EST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/america-yakutat.json b/crates/zoneinfo/tests/data/america-yakutat.json new file mode 100644 index 000000000..a543b18bd --- /dev/null +++ b/crates/zoneinfo/tests/data/america-yakutat.json @@ -0,0 +1,673 @@ +{ + "first_record": { + "offset": 52865, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3225223727, + "record": { + "offset": -33535, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -2188953665, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": -880203600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YPT" + } + }, + { + "transition_time": -765381600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": -21474000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": -5752800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 9975600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 25696800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 41425200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 57751200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 73479600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 89200800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 104929200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 120650400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 126702000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 152100000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 162385200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 183549600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 199278000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 215604000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 230727600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 247053600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 262782000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 278503200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 294231600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 309952800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 325681200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 341402400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 357130800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 372852000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 388580400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 404906400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 420030000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "YDT" + } + }, + { + "transition_time": 436356000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "YST" + } + }, + { + "transition_time": 439030800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 452084400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 467805600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 483534000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 499255200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 514983600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 530704800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 544618800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 562154400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 576068400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 594208800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 607518000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 625658400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 638967600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 657108000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 671022000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 688557600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 702471600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 720007200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 733921200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 752061600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 765370800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 783511200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 796820400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 814960800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 828874800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 846410400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 860324400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 877860000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 891774000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 909309600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 923223600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 941364000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 954673200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 972813600, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 986122800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1004263200, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1018177200, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1035712800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1049626800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1067162400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1081076400, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1099216800, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1112526000, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1130666400, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1143975600, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + }, + { + "transition_time": 1162116000, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "AKST" + } + }, + { + "transition_time": 1173610800, + "record": { + "offset": -28800, + "is_dst": true, + "abbr": "AKDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/antarctica-casey.json b/crates/zoneinfo/tests/data/antarctica-casey.json new file mode 100644 index 000000000..4d3da36b8 --- /dev/null +++ b/crates/zoneinfo/tests/data/antarctica-casey.json @@ -0,0 +1,145 @@ +{ + "first_record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + }, + "transitions": [ + { + "transition_time": -31536000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1255802400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1267714800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1319738400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1329843600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1477065600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1520701200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1538856000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1552752000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1570129200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1583596800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1601740860, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1615640400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1633190460, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1647090000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1664640060, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1678291200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/antarctica-davis.json b/crates/zoneinfo/tests/data/antarctica-davis.json new file mode 100644 index 000000000..a20c60f0c --- /dev/null +++ b/crates/zoneinfo/tests/data/antarctica-davis.json @@ -0,0 +1,65 @@ +{ + "first_record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + }, + "transitions": [ + { + "transition_time": -409190400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": -163062000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + } + }, + { + "transition_time": -28857600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1255806000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1268251200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1319742000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1329854400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/antarctica-dumontdurville.json b/crates/zoneinfo/tests/data/antarctica-dumontdurville.json new file mode 100644 index 000000000..ed53312b5 --- /dev/null +++ b/crates/zoneinfo/tests/data/antarctica-dumontdurville.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 35320, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840176120, + "record": { + "offset": 35312, + "is_dst": false, + "abbr": "PMMT" + } + }, + { + "transition_time": -2366790512, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/antarctica-macquarie.json b/crates/zoneinfo/tests/data/antarctica-macquarie.json new file mode 100644 index 000000000..c98a2529d --- /dev/null +++ b/crates/zoneinfo/tests/data/antarctica-macquarie.json @@ -0,0 +1,737 @@ +{ + "first_record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + }, + "transitions": [ + { + "transition_time": -2214259200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -1680508800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -1665388800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -1601719200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + } + }, + { + "transition_time": -687052800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -71136000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -55411200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -37267200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -25776000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -5817600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 5673600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 25632000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 37728000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 57686400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 67968000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 89136000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 100022400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 120585600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 131472000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 152035200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 162921600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 183484800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 194976000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 215539200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 226425600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 246988800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 257875200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 278438400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 289324800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 309888000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 320774400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 341337600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 352224000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 372787200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 386092800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 404841600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 417542400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 436291200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 447177600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 467740800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 478627200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 499190400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 510076800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 530035200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 542736000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 562089600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 574790400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 594144000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 606240000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 625593600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 637689600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 657043200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 670348800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 686678400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 701798400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 718128000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 733248000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 749577600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 764697600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 781027200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 796147200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 812476800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 828201600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 844531200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 859651200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 875980800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 891100800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 907430400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 922550400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 938880000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 954000000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 967305600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 985449600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1002384000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1017504000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1033833600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1048953600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1065283200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1080403200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1096732800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1111852800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1128182400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1143907200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1159632000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1174752000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1191686400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1207411200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1223136000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1238860800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1254585600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1301760000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/antarctica-mawson.json b/crates/zoneinfo/tests/data/antarctica-mawson.json new file mode 100644 index 000000000..dbeafbe2d --- /dev/null +++ b/crates/zoneinfo/tests/data/antarctica-mawson.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + }, + "transitions": [ + { + "transition_time": -501206400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1255809600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/antarctica-mcmurdo.json b/crates/zoneinfo/tests/data/antarctica-mcmurdo.json new file mode 100644 index 000000000..e4e72112b --- /dev/null +++ b/crates/zoneinfo/tests/data/antarctica-mcmurdo.json @@ -0,0 +1,777 @@ +{ + "first_record": { + "offset": 41944, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3192435544, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1330335000, + "record": { + "offset": 45000, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1320057000, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1300699800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1287396000, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1269250200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1255946400, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1237800600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1224496800, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1206351000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1192442400, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1174901400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1160992800, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1143451800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1125914400, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1112607000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1094464800, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1081157400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1063015200, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1049707800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1031565600, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1018258200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1000116000, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -986808600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -968061600, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -955359000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -936612000, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -923304600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -757425600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 152632800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 162309600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 183477600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 194968800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 215532000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 226418400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 246981600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 257868000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 278431200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 289317600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 309880800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 320767200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 341330400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 352216800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 372780000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 384271200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 404834400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 415720800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 436284000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 447170400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 467733600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 478620000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 499183200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 510069600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 530632800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 541519200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 562082400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 573573600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 594136800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 605023200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 623772000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 637682400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 655221600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 669132000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 686671200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 700581600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 718120800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 732636000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 749570400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 764085600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 781020000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 795535200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 812469600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 826984800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 844524000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 858434400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 875973600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 889884000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 907423200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 921938400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 938872800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 953388000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 970322400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 984837600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 1002376800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 1016287200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 1033826400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 1047736800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 1065276000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 1079791200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 1096725600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 1111240800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 1128175200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 1142690400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 1159624800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 1174140000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 1191074400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/antarctica-palmer.json b/crates/zoneinfo/tests/data/antarctica-palmer.json new file mode 100644 index 000000000..9449af5bc --- /dev/null +++ b/crates/zoneinfo/tests/data/antarctica-palmer.json @@ -0,0 +1,665 @@ +{ + "first_record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + }, + "transitions": [ + { + "transition_time": -157766400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -152658000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -132955200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -121122000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -101419200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -86821200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -71092800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -54766800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -39038400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -23317200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -7588800, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 128142000, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 136605600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 389070000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 403070400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 416372400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 434520000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 447822000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 466574400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 479271600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 498024000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 510721200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 529473600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 545194800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 560923200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 574225200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 592372800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 605674800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 624427200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 637124400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 653457600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 668574000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 687326400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 700628400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 718776000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 732078000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 750225600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 763527600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 781675200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 794977200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 813729600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 826426800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 845179200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 859690800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 876628800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 889930800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 906868800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 923194800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 939528000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 952830000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 971582400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 984279600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1003032000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1015729200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1034481600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1047178800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1065931200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1079233200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1097380800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1110682800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1128830400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1142132400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1160884800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1173582000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1192334400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1206846000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1223784000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1237086000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1255233600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1270350000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1286683200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1304823600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1313899200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1335668400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1346558400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1367118000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1378612800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1398567600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1410062400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1463281200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1471147200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1480820400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/antarctica-rothera.json b/crates/zoneinfo/tests/data/antarctica-rothera.json new file mode 100644 index 000000000..b87f90c99 --- /dev/null +++ b/crates/zoneinfo/tests/data/antarctica-rothera.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + }, + "transitions": [ + { + "transition_time": 218246400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/antarctica-syowa.json b/crates/zoneinfo/tests/data/antarctica-syowa.json new file mode 100644 index 000000000..761d8a455 --- /dev/null +++ b/crates/zoneinfo/tests/data/antarctica-syowa.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 11212, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -719636812, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + } + ] +} \ No newline at end of file diff --git a/zoneinfo/tests/data/antarctica-troll.json b/crates/zoneinfo/tests/data/antarctica-troll.json similarity index 100% rename from zoneinfo/tests/data/antarctica-troll.json rename to crates/zoneinfo/tests/data/antarctica-troll.json diff --git a/crates/zoneinfo/tests/data/antarctica-vostok.json b/crates/zoneinfo/tests/data/antarctica-vostok.json new file mode 100644 index 000000000..59d22de14 --- /dev/null +++ b/crates/zoneinfo/tests/data/antarctica-vostok.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + }, + "transitions": [ + { + "transition_time": -380073600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 760035600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + } + }, + { + "transition_time": 783648000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1702839600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/zoneinfo/tests/data/europe-berlin.json b/crates/zoneinfo/tests/data/arctic-longyearbyen.json similarity index 100% rename from zoneinfo/tests/data/europe-berlin.json rename to crates/zoneinfo/tests/data/arctic-longyearbyen.json diff --git a/crates/zoneinfo/tests/data/asia-aden.json b/crates/zoneinfo/tests/data/asia-aden.json new file mode 100644 index 000000000..761d8a455 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-aden.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 11212, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -719636812, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-almaty.json b/crates/zoneinfo/tests/data/asia-almaty.json new file mode 100644 index 000000000..f1e5cf517 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-almaty.json @@ -0,0 +1,425 @@ +{ + "first_record": { + "offset": 18468, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441170468, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": -1247547600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 354909600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 370717200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 386445600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 402253200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 417981600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 433789200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 449604000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 465336000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 481060800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 496785600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 512510400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 528235200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 543960000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 559684800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 575409600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 591134400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 606859200, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 622584000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 638308800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 654638400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 670363200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 686091600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 695768400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 701812800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 717537600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 733262400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 748987200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 764712000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 780436800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 796161600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 811886400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 828216000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 846360000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 859665600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 877809600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 891115200, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 909259200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 922564800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 941313600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 954014400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 972763200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 985464000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1004212800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1017518400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1035662400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1048968000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1067112000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1080417600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1099166400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1709229600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-amman.json b/crates/zoneinfo/tests/data/asia-amman.json new file mode 100644 index 000000000..7523d5847 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-amman.json @@ -0,0 +1,705 @@ +{ + "first_record": { + "offset": 8624, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1230776624, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 108165600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 118270800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 136591200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 149806800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 168127200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 181342800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 199749600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 215643600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 231285600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 244501200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 262735200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 275950800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 481154400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 496962000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 512949600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 528670800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 544399200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 560120400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 575848800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 592174800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 610581600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 623624400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 641167200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 655074000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 671839200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 685918800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 702856800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717973200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733701600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 749422800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 765151200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 779662800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 797205600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811116000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828655200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 843170400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 860104800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 874620000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 891554400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 906069600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 930780000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 938124000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 954367200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 970178400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 985816800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1001628000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1017352800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1033077600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1048802400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1066946400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1080252000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1097791200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1112306400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1128031200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1143756000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1161900000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1175205600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1193349600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1206655200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1225404000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1238104800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1256853600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1269554400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1288303200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1301608800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1319752800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1333058400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1387486800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1395957600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1414706400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1427407200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1446156000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1459461600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1477605600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1490911200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1509055200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1522360800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1540504800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1553810400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1571954400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1585260000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1604008800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1616709600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1635458400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1645740000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1666908000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-anadyr.json b/crates/zoneinfo/tests/data/asia-anadyr.json new file mode 100644 index 000000000..a7eef9f94 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-anadyr.json @@ -0,0 +1,521 @@ +{ + "first_record": { + "offset": 42596, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441194596, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": -1247572800, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 354884400, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 370692000, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 386420400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 402231600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 417960000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 433767600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 449582400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 465314400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 481039200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 496764000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 512488800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 528213600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 543938400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 559663200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 575388000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 591112800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 606837600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 622562400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 638287200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 654616800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 670341600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 686070000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 695746800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 701791200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 717516000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 733240800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 748965600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 764690400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 780415200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 796140000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 811864800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 828194400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 846338400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 859644000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 877788000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 891093600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 909237600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 922543200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 941292000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 953992800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 972741600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 985442400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1004191200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1017496800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1035640800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1048946400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1067090400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1080396000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1099144800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1111845600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1130594400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1143295200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1162044000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1174744800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1193493600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1206799200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1224943200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1238248800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1256392800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1269698400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1288450800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1301151600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-aqtau.json b/crates/zoneinfo/tests/data/asia-aqtau.json new file mode 100644 index 000000000..88c74905f --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-aqtau.json @@ -0,0 +1,409 @@ +{ + "first_record": { + "offset": 12064, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441164064, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": -1247544000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 370724400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 386445600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 402256800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 417985200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 433792800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 449607600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 465339600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 481064400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 496789200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 512514000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 528238800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 543963600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 559688400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 575413200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 591138000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 606862800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 622587600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 638312400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 654642000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 670366800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 686095200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 695772000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 701816400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 717541200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 733266000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 748990800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 764715600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 780440400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 796168800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 811893600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 828223200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 846367200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 859672800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 877816800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 891122400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 909266400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 922572000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 941320800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 954021600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 972770400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 985471200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1004220000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1017525600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1035669600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1048975200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1067119200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1080424800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1099173600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-aqtobe.json b/crates/zoneinfo/tests/data/asia-aqtobe.json new file mode 100644 index 000000000..e65894359 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-aqtobe.json @@ -0,0 +1,417 @@ +{ + "first_record": { + "offset": 13720, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441165720, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": -1247544000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 354913200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 370720800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 386445600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 402256800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 417985200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 433792800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 449607600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 465339600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 481064400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 496789200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 512514000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 528238800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 543963600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 559688400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 575413200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 591138000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 606862800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 622587600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 638312400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 654642000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 670366800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 686095200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 695772000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 701816400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 717541200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 733266000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 748990800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 764715600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 780440400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 796165200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 811890000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 828219600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 846363600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 859669200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 877813200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 891118800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 909262800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 922568400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 941317200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 954018000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 972766800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 985467600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1004216400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1017522000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1035666000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1048971600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1067115600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1080421200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1099170000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-ashgabat.json b/crates/zoneinfo/tests/data/asia-ashgabat.json new file mode 100644 index 000000000..193c470c1 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-ashgabat.json @@ -0,0 +1,209 @@ +{ + "first_record": { + "offset": 14012, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441166012, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": -1247544000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 354913200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 370720800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 386449200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 402256800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 417985200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 433792800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 449607600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 465339600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 481064400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 496789200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 512514000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 528238800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 543963600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 559688400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 575413200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 591138000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 606862800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 622587600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 638312400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 654642000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 670366800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 686095200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 695772000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-atyrau.json b/crates/zoneinfo/tests/data/asia-atyrau.json new file mode 100644 index 000000000..83cae331d --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-atyrau.json @@ -0,0 +1,409 @@ +{ + "first_record": { + "offset": 12464, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441164464, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": -1247540400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 370724400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 386445600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 402256800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 417985200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 433792800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 449607600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 465339600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 481064400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 496789200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 512514000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 528238800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 543963600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 559688400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 575413200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 591138000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 606862800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 622587600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 638312400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 654642000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 670366800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 686095200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 695772000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 701816400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 717541200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 733266000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 748990800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 764715600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 780440400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 796165200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 811890000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 828219600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 846363600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 859669200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 877813200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 891118800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 909262800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 922568400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 941320800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 954021600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 972770400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 985471200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1004220000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1017525600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1035669600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1048975200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1067119200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1080424800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1099173600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-baghdad.json b/crates/zoneinfo/tests/data/asia-baghdad.json new file mode 100644 index 000000000..953099f12 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-baghdad.json @@ -0,0 +1,441 @@ +{ + "first_record": { + "offset": 10660, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524532260, + "record": { + "offset": 10656, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -1641005856, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 389048400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 402264000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 417906000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 433800000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 449614800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 465422400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 481150800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 496792800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 512517600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 528242400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 543967200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 559692000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 575416800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 591141600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 606866400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 622591200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 638316000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 654645600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 670464000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 686275200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 702086400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 717897600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 733622400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 749433600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 765158400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 780969600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 796694400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 812505600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 828316800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 844128000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 859852800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 875664000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 891388800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 907200000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 922924800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 938736000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 954547200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 970358400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 986083200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1001894400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1017619200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1033430400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1049155200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1064966400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1080777600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1096588800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1112313600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1128124800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1143849600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1159660800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1175385600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1191196800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-bahrain.json b/crates/zoneinfo/tests/data/asia-bahrain.json new file mode 100644 index 000000000..682a03cb1 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-bahrain.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 12368, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1577935568, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 76190400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-baku.json b/crates/zoneinfo/tests/data/asia-baku.json new file mode 100644 index 000000000..72486ccd2 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-baku.json @@ -0,0 +1,537 @@ +{ + "first_record": { + "offset": 11964, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441163964, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": -405140400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 354916800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 370724400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 386452800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 402260400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 417988800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 433796400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 449611200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 465343200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 481068000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 496792800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 512517600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 528242400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 543967200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 559692000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 575416800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 591141600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 606866400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 622591200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 638316000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 654645600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 670370400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 686098800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 701823600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 717548400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 846378000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 859680000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 877824000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 891129600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 909273600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 922579200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 941328000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 954028800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 972777600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 985478400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1004227200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1017532800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1035676800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1048982400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1067126400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1080432000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1099180800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1111881600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1130630400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1143331200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1162080000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1174780800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1193529600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1206835200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1224979200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1238284800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1256428800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1269734400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1288483200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1301184000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1319932800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1332633600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1351382400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1364688000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1382832000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1396137600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1414281600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1427587200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1445731200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-bangkok.json b/crates/zoneinfo/tests/data/asia-bangkok.json new file mode 100644 index 000000000..8b30b96b0 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-bangkok.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 24124, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840164924, + "record": { + "offset": 24124, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -1570084924, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-barnaul.json b/crates/zoneinfo/tests/data/asia-barnaul.json new file mode 100644 index 000000000..c85c79682 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-barnaul.json @@ -0,0 +1,545 @@ +{ + "first_record": { + "offset": 20100, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1579844100, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": -1247551200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 354906000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 370713600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 386442000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 402249600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 417978000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 433785600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 449600400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 465332400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 481057200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 496782000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 512506800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 528231600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 543956400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 559681200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 575406000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 591130800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 606855600, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 622580400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 638305200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 654634800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 670359600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 686088000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 695764800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 701809200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 717534000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 733258800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 748983600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 764708400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 780433200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 796158000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 801590400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 811886400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 828216000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 846360000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 859665600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 877809600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 891115200, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 909259200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 922564800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 941313600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 954014400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 972763200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 985464000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1004212800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1017518400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1035662400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1048968000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1067112000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1080417600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1099166400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1111867200, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1130616000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1143316800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1162065600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1174766400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1193515200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1206820800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1224964800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1238270400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1256414400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1269720000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1288468800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1301169600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1414263600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1459022400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-beirut.json b/crates/zoneinfo/tests/data/asia-beirut.json new file mode 100644 index 000000000..c58ca940c --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-beirut.json @@ -0,0 +1,521 @@ +{ + "first_record": { + "offset": 8520, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840149320, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1570413600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1552186800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1538359200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1522551600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1507514400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1490583600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1473645600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1460948400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -399866400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -386650800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -368330400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -355114800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -336794400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -323578800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -305172000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -291956400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -273636000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -260420400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 78012000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 86734800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 105055200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 118270800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 136591200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 149806800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 168127200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 181342800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 199749600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 212965200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 231285600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 244501200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 262735200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 275950800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 452210400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 466722000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 483746400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 498258000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 515282400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 529794000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 546818400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 561330000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 581119200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 592952400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 610754400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 624488400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 641512800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 656024400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 673048800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 687560400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 704671200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 718146000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733269600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 748990800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764719200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780440400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796168800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811890000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828223200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 843944400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 859672800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 875394000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 891122400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 906843600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 922572000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-bishkek.json b/crates/zoneinfo/tests/data/asia-bishkek.json new file mode 100644 index 000000000..cd7f98d98 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-bishkek.json @@ -0,0 +1,425 @@ +{ + "first_record": { + "offset": 17904, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441169904, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": -1247547600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 354909600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 370717200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 386445600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 402253200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 417981600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 433789200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 449604000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 465336000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 481060800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 496785600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 512510400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 528235200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 543960000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 559684800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 575409600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 591134400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 606859200, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 622584000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 638308800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 654638400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 670363200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 683582400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 703018800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 717530400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 734468400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 748980000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 765918000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 780429600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 797367600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 811879200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 828817200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 843933600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 859671000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 877811400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 891120600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 909261000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 922570200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 941315400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 954019800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 972765000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 985469400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1004214600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1017523800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1035664200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1048973400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1067113800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1080423000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1099168200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1111872600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1123783200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-brunei.json b/crates/zoneinfo/tests/data/asia-brunei.json new file mode 100644 index 000000000..8bb3a6280 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-brunei.json @@ -0,0 +1,153 @@ +{ + "first_record": { + "offset": 26480, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1383463280, + "record": { + "offset": 27000, + "is_dst": false, + "abbr": "+0730" + } + }, + { + "transition_time": -1167636600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -1082448000, + "record": { + "offset": 30000, + "is_dst": true, + "abbr": "+0820" + } + }, + { + "transition_time": -1074586800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -1050825600, + "record": { + "offset": 30000, + "is_dst": true, + "abbr": "+0820" + } + }, + { + "transition_time": -1042964400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -1019289600, + "record": { + "offset": 30000, + "is_dst": true, + "abbr": "+0820" + } + }, + { + "transition_time": -1011428400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -987753600, + "record": { + "offset": 30000, + "is_dst": true, + "abbr": "+0820" + } + }, + { + "transition_time": -979892400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -956217600, + "record": { + "offset": 30000, + "is_dst": true, + "abbr": "+0820" + } + }, + { + "transition_time": -948356400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -924595200, + "record": { + "offset": 30000, + "is_dst": true, + "abbr": "+0820" + } + }, + { + "transition_time": -916734000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -893059200, + "record": { + "offset": 30000, + "is_dst": true, + "abbr": "+0820" + } + }, + { + "transition_time": -885198000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -879667200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -767005200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-chita.json b/crates/zoneinfo/tests/data/asia-chita.json new file mode 100644 index 000000000..fbf7acc23 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-chita.json @@ -0,0 +1,537 @@ +{ + "first_record": { + "offset": 27232, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1579419232, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -1247558400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 354898800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 370706400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 386434800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 402242400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 417970800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 433778400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 449593200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 465325200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 481050000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 496774800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 512499600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 528224400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 543949200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 559674000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 575398800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 591123600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 606848400, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 622573200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 638298000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 654627600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 670352400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 686080800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 695757600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 701802000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 717526800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 733251600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 748976400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 764701200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 780426000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 796150800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 811875600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 828205200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 846349200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 859654800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 877798800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 891104400, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 909248400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 922554000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 941302800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 954003600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 972752400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 985453200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1004202000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1017507600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1035651600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1048957200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1067101200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1080406800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1099155600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1111856400, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1130605200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1143306000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1162054800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1174755600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1193504400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1206810000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1224954000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1238259600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1256403600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1269709200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1288458000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1301158800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1414252800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1459015200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-colombo.json b/crates/zoneinfo/tests/data/asia-colombo.json new file mode 100644 index 000000000..93157d851 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-colombo.json @@ -0,0 +1,73 @@ +{ + "first_record": { + "offset": 19164, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840159964, + "record": { + "offset": 19172, + "is_dst": false, + "abbr": "MMT" + } + }, + { + "transition_time": -2019705572, + "record": { + "offset": 19800, + "is_dst": false, + "abbr": "+0530" + } + }, + { + "transition_time": -883287000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": -862639200, + "record": { + "offset": 23400, + "is_dst": true, + "abbr": "+0630" + } + }, + { + "transition_time": -764051400, + "record": { + "offset": 19800, + "is_dst": false, + "abbr": "+0530" + } + }, + { + "transition_time": 832962600, + "record": { + "offset": 23400, + "is_dst": false, + "abbr": "+0630" + } + }, + { + "transition_time": 846266400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1145039400, + "record": { + "offset": 19800, + "is_dst": false, + "abbr": "+0530" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-damascus.json b/crates/zoneinfo/tests/data/asia-damascus.json new file mode 100644 index 000000000..454058c2b --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-damascus.json @@ -0,0 +1,977 @@ +{ + "first_record": { + "offset": 8712, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1577931912, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1568592000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1554080400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1537142400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1522630800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1505692800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1491181200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1474243200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1459126800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -242265600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -228877200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -210556800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -197427600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -178934400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -165718800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -147398400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -134269200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -116467200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -102646800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -84326400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -71110800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -52704000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -39488400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -21168000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -7952400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 10368000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 23583600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 41904000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 55119600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 73526400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 86742000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 105062400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 118278000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 136598400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 149814000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 168134400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 181350000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 199756800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 212972400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 231292800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 241916400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 262828800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 273452400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 418694400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 433810800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 450316800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 465433200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 508896000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 529196400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 541555200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 562633200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 574387200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 594255600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 607305600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 623199600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 638928000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 654649200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 670456800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686264400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 702684000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717886800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733096800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 748904400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 765151200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780958800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796687200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 812494800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828309600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 844117200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 859759200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 875653200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 891208800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 907189200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 922917600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 938725200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 954540000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 970347600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 986076000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1001883600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1017612000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1033419600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1049148000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1064955600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1080770400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1096578000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1112306400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1128114000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1143842400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1158872400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1175205600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1193950800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1207260000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1225486800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1238104800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1256850000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1270159200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1288299600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1301608800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1319749200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1333058400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1351198800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1364508000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1382648400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1395957600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1414702800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1427407200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1446152400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1458856800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1477602000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1490911200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1509051600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1522360800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1540501200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1553810400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1571950800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1585260000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1604005200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1616709600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1635454800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1648159200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1666904400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-dhaka.json b/crates/zoneinfo/tests/data/asia-dhaka.json new file mode 100644 index 000000000..e16fe2ccc --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-dhaka.json @@ -0,0 +1,65 @@ +{ + "first_record": { + "offset": 21700, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524543300, + "record": { + "offset": 21200, + "is_dst": false, + "abbr": "HMT" + } + }, + { + "transition_time": -891582800, + "record": { + "offset": 23400, + "is_dst": false, + "abbr": "+0630" + } + }, + { + "transition_time": -872058600, + "record": { + "offset": 19800, + "is_dst": false, + "abbr": "+0530" + } + }, + { + "transition_time": -862637400, + "record": { + "offset": 23400, + "is_dst": false, + "abbr": "+0630" + } + }, + { + "transition_time": -576138600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1245430800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1262278800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-dili.json b/crates/zoneinfo/tests/data/asia-dili.json new file mode 100644 index 000000000..0c0746f6d --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-dili.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 30140, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830412800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -879152400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 199897200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 969120000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-dubai.json b/crates/zoneinfo/tests/data/asia-dubai.json new file mode 100644 index 000000000..ca0f1f804 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-dubai.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 13272, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1577936472, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-dushanbe.json b/crates/zoneinfo/tests/data/asia-dushanbe.json new file mode 100644 index 000000000..5628a1efd --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-dushanbe.json @@ -0,0 +1,201 @@ +{ + "first_record": { + "offset": 16512, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441168512, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": -1247547600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 354909600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 370717200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 386445600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 402253200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 417981600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 433789200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 449604000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 465336000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 481060800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 496785600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 512510400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 528235200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 543960000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 559684800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 575409600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 591134400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 606859200, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 622584000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 638308800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 654638400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 670363200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 684363600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-famagusta.json b/crates/zoneinfo/tests/data/asia-famagusta.json new file mode 100644 index 000000000..a70f04634 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-famagusta.json @@ -0,0 +1,697 @@ +{ + "first_record": { + "offset": 8148, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1518920148, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 166572000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 182293200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 200959200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 213829200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 228866400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 243982800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 260316000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 276123600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 291765600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 307486800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 323820000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 338936400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 354664800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 370386000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 386114400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 401835600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 417564000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 433285200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 449013600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 465339600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 481068000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 496789200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 512517600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 528238800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 543967200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 559688400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 575416800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 591138000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 606866400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 622587600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 638316000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 654642000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 670370400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686091600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701820000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717541200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733269600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 748990800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764719200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780440400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796168800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811890000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828223200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 843944400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 859672800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 875394000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 891122400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 909277200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 922582800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 941331600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 954032400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 972781200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 985482000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1004230800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1017536400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1035680400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1048986000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1067130000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1080435600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1099184400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1111885200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1130634000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1143334800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1162083600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1174784400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1193533200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1206838800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1224982800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1238288400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1256432400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1269738000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1288486800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1301187600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1319936400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1332637200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1351386000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1364691600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1382835600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1396141200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1414285200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1427590800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1445734800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1459040400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1473282000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1509238800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-gaza.json b/crates/zoneinfo/tests/data/asia-gaza.json new file mode 100644 index 000000000..167c548ab --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-gaza.json @@ -0,0 +1,2025 @@ +{ + "first_record": { + "offset": 8272, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2185409872, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -933638400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -923097600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -919036800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -857347200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -844300800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -825811200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -812678400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -794188800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -779846400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -762652800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -748310400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -731116800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -399088800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -386650800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -368330400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -355114800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -336790800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -323654400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -305168400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -292032000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -273632400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -260496000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -242096400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -228960000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -210560400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -197424000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -178938000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -165801600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -147402000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -134265600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -115866000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -102643200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -84330000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -81313200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 142380000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 150843600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 167176800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 178664400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 334101600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 337730400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 452642400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 462319200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 482277600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 494370000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 516751200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 526424400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 545436000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 558478800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 576626400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 589323600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 609890400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 620773200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 638316000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 651618000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 669765600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 683672400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 701820000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 715726800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 733701600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 747176400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 765151200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 778021200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 796600800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 810075600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 820447200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828655200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 843170400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 860104800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 874620000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 891554400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 906069600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 924213600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 939934800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 956268000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 971989200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 987717600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1003438800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1019167200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1034888400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1050616800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1066338000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1082066400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1096581600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1113516000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1128380400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1143842400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1158872400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1175378400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1189638000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1206655200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1219957200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1238104800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1252015200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1269640860, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1281474000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1301608860, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1312146000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1333058400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1348178400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1364508000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1380229200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1395957600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1414098000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1427493600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1445551200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1458946800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1477692000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1490396400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1509141600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1521846000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1540591200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1553810400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1572037200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1585346400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1603490400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1616796000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1635458400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1648332000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1666998000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1682726400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1698447600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1713571200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1729897200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1744416000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1761346800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1774656000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1792796400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1806105600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1824850800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1837555200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1856300400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1869004800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1887750000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1901059200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1919199600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1932508800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1950649200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1963958400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1982703600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1995408000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2014153200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2026857600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2045602800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2058307200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2077052400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2090361600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2107897200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2121811200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2138742000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2153260800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2168982000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2184710400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2199826800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2216160000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2230066800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2234304000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2234905200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2248214400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2260911600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2264544000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2266354800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2279664000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2291756400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2295388800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2297804400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2311113600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2321996400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2326233600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2329254000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2342563200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2352841200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2356473600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2361308400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2374012800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2383686000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2387318400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2392758000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2405462400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2413926000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2418163200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2424207600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2437516800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2444770800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2448403200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2455657200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2468966400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2475010800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2479248000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2487106800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2500416000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2505855600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2509488000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2519161200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2531865600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2536700400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2540332800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2550610800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2563315200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2566940400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2571177600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2582060400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2595369600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2597785200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2601417600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2613510000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2626819200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2628025200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2632262400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2644959600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2658268800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2658870000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2663107200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2676409200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2693347200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2708463600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2724192000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2739913200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2754432000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2771362800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2785276800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2802812400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2816121600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2834262000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2847571200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2866316400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2879020800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2897766000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2910470400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2929215600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2941920000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2960665200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2973974400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2992114800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3005424000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3023564400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3036873600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3055618800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3068323200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3087068400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3099772800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3117913200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3131827200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3148758000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3163276800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3179602800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3194726400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3209842800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3226176000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3240687600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3244320000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3244921200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-hebron.json b/crates/zoneinfo/tests/data/asia-hebron.json new file mode 100644 index 000000000..3e3beb4ab --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-hebron.json @@ -0,0 +1,2041 @@ +{ + "first_record": { + "offset": 8423, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2185410023, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -933638400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -923097600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -919036800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -857347200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -844300800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -825811200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -812678400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -794188800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -779846400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -762652800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -748310400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -731116800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -399088800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -386650800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -368330400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -355114800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -336790800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -323654400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -305168400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -292032000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -273632400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -260496000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -242096400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -228960000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -210560400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -197424000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -178938000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -165801600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -147402000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -134265600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -115866000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -102643200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -84330000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -81313200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 142380000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 150843600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 167176800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 178664400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 334101600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 337730400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 452642400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 462319200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 482277600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 494370000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 516751200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 526424400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 545436000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 558478800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 576626400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 589323600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 609890400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 620773200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 638316000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 651618000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 669765600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 683672400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 701820000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 715726800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 733701600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 747176400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 765151200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 778021200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 796600800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 810075600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 820447200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828655200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 843170400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 860104800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 874620000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 891554400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 906069600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 924213600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 939934800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 956268000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 971989200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 987717600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1003438800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1019167200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1034888400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1050616800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1066338000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1082066400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1096581600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1113516000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1128380400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1143842400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1158872400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1175378400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1189638000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1206655200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1220216400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1238104800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1252015200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1269554400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1281474000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1301608860, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1312146000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1314655200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1317330000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1333058400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1348178400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1364508000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1380229200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1395957600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1414098000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1427493600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1445551200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1458946800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1477692000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1490396400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1509141600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1521846000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1540591200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1553810400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1572037200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1585346400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1603490400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1616796000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1635458400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1648332000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1666998000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1682726400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1698447600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1713571200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1729897200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1744416000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1761346800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1774656000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1792796400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1806105600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1824850800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1837555200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1856300400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1869004800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1887750000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1901059200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1919199600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1932508800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1950649200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1963958400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1982703600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1995408000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2014153200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2026857600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2045602800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2058307200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2077052400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2090361600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2107897200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2121811200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2138742000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2153260800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2168982000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2184710400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2199826800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2216160000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2230066800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2234304000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2234905200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2248214400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2260911600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2264544000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2266354800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2279664000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2291756400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2295388800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2297804400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2311113600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2321996400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2326233600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2329254000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2342563200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2352841200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2356473600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2361308400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2374012800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2383686000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2387318400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2392758000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2405462400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2413926000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2418163200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2424207600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2437516800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2444770800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2448403200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2455657200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2468966400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2475010800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2479248000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2487106800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2500416000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2505855600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2509488000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2519161200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2531865600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2536700400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2540332800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2550610800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2563315200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2566940400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2571177600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2582060400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2595369600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2597785200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2601417600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2613510000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2626819200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2628025200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2632262400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2644959600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2658268800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2658870000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2663107200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2676409200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2693347200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2708463600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2724192000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2739913200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2754432000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2771362800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2785276800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2802812400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2816121600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2834262000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2847571200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2866316400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2879020800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2897766000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2910470400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2929215600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2941920000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2960665200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 2973974400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 2992114800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3005424000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3023564400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3036873600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3055618800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3068323200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3087068400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3099772800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3117913200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3131827200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3148758000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3163276800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3179602800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3194726400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3209842800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3226176000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3240687600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 3244320000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 3244921200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-ho_chi_minh.json b/crates/zoneinfo/tests/data/asia-ho_chi_minh.json new file mode 100644 index 000000000..0ab14b546 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-ho_chi_minh.json @@ -0,0 +1,81 @@ +{ + "first_record": { + "offset": 25590, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2004073590, + "record": { + "offset": 25590, + "is_dst": false, + "abbr": "PLMT" + } + }, + { + "transition_time": -1851577590, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": -852105600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -782643600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -767869200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": -718095600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -457772400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": -315648000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 171820800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-hong_kong.json b/crates/zoneinfo/tests/data/asia-hong_kong.json new file mode 100644 index 000000000..15ded2476 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-hong_kong.json @@ -0,0 +1,561 @@ +{ + "first_record": { + "offset": 27402, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2056690800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -900910800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -891579600, + "record": { + "offset": 30600, + "is_dst": true, + "abbr": "HKWT" + } + }, + { + "transition_time": -884248200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "JST" + } + }, + { + "transition_time": -761209200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -747907200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -728541000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -717049800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -697091400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -683785800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -668061000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -654755400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -636611400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -623305800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -605161800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -591856200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -573712200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -559801800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -541657800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -528352200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -510211800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -498112200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -478762200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -466662600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -446707800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -435213000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -415258200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -403158600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -383808600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -371709000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -352359000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -340259400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -320909400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -308809800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -288855000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -277360200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -257405400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -245910600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -225955800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -213856200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -194506200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -182406600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -163056600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -148537800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -132816600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -117088200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -101367000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -85638600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -69312600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -53584200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -37863000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": -22134600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": -6413400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": 9315000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": 25036200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": 40764600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": 56485800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": 72214200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": 88540200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": 104268600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": 119989800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": 126041400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": 151439400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": 167167800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": 182889000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": 198617400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": 214338600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + }, + { + "transition_time": 295385400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "HKST" + } + }, + { + "transition_time": 309292200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "HKT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-hovd.json b/crates/zoneinfo/tests/data/asia-hovd.json new file mode 100644 index 000000000..887af1c0c --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-hovd.json @@ -0,0 +1,409 @@ +{ + "first_record": { + "offset": 21996, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2032927596, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 252439200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 417978000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 433785600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 449600400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 465321600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 481050000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 496771200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 512499600, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 528220800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 543949200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 559670400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 575398800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 591120000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 606848400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 622569600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 638298000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 654624000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 670352400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 686073600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 701802000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 717523200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 733251600, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 748972800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 764701200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 780422400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 796150800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 811872000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 828205200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 843926400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 859654800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 875376000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 891104400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 906825600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 988398000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1001700000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1017428400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1033149600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1048878000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1064599200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1080327600, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1096048800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1111777200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1127498400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1143226800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1159552800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1427482800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1443196800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1458932400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1474646400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-irkutsk.json b/crates/zoneinfo/tests/data/asia-irkutsk.json new file mode 100644 index 000000000..2f53abd44 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-irkutsk.json @@ -0,0 +1,537 @@ +{ + "first_record": { + "offset": 25025, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840165825, + "record": { + "offset": 25025, + "is_dst": false, + "abbr": "IMT" + } + }, + { + "transition_time": -1575874625, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": -1247554800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 354902400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 370710000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 386438400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 402246000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 417974400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 433782000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 449596800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 465328800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 481053600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 496778400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 512503200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 528228000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 543952800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 559677600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 575402400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 591127200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 606852000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 622576800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 638301600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 654631200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 670356000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 686084400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 695761200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 701805600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 717530400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 733255200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 748980000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 764704800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 780429600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 796154400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 811879200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 828208800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 846352800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 859658400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 877802400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 891108000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 909252000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 922557600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 941306400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 954007200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 972756000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 985456800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1004205600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1017511200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1035655200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1048960800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1067104800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1080410400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1099159200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1111860000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1130608800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1143309600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1162058400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1174759200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1193508000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1206813600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1224957600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1238263200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1256407200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1269712800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1288461600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1301162400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1414256400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-jakarta.json b/crates/zoneinfo/tests/data/asia-jakarta.json new file mode 100644 index 000000000..f5b60f226 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-jakarta.json @@ -0,0 +1,73 @@ +{ + "first_record": { + "offset": 25632, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3231299232, + "record": { + "offset": 25632, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -1451719200, + "record": { + "offset": 26400, + "is_dst": false, + "abbr": "+0720" + } + }, + { + "transition_time": -1172906400, + "record": { + "offset": 27000, + "is_dst": false, + "abbr": "+0730" + } + }, + { + "transition_time": -876641400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -766054800, + "record": { + "offset": 27000, + "is_dst": false, + "abbr": "+0730" + } + }, + { + "transition_time": -683883000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -620812800, + "record": { + "offset": 27000, + "is_dst": false, + "abbr": "+0730" + } + }, + { + "transition_time": -189415800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "WIB" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-jayapura.json b/crates/zoneinfo/tests/data/asia-jayapura.json new file mode 100644 index 000000000..53ff5b8f7 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-jayapura.json @@ -0,0 +1,33 @@ +{ + "first_record": { + "offset": 33768, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1172913768, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -799491600, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "+0930" + } + }, + { + "transition_time": -189423000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "WIT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-jerusalem.json b/crates/zoneinfo/tests/data/asia-jerusalem.json new file mode 100644 index 000000000..a1a8e0b71 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-jerusalem.json @@ -0,0 +1,809 @@ +{ + "first_record": { + "offset": 8454, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840149254, + "record": { + "offset": 8440, + "is_dst": false, + "abbr": "JMT" + } + }, + { + "transition_time": -1641003640, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -933638400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -923097600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -919036800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -857347200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -844300800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -825811200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -812678400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -794188800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -779846400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -762652800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -748310400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -731116800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -681955200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "IDDT" + } + }, + { + "transition_time": -673228800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -667958400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -652320000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -636422400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -622080000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -608947200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -591840000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -572486400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -558576000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -542851200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -527731200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -514425600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -490838400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -482976000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -459388800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -451526400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -428544000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -418262400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -400118400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": -387417600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 142380000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 150843600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 167176800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 178664400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 334101600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 337730400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 452642400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 462319200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 482277600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 494370000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 516751200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 526424400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 545436000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 558478800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 576626400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 589323600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 609890400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 620773200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 638316000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 651618000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 669765600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 683672400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 701820000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 715726800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 733701600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 747176400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 765151200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 778021200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 796600800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 810075600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 826840800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 842821200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 858895200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 874184400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 890344800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 905029200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 923011200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 936313200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 955670400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 970783200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 986770800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 1001282400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 1017356400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 1033941600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 1048806000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 1065132000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 1081292400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 1095804000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 1112313600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 1128812400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 1143763200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 1159657200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 1175212800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 1189897200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 1206662400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 1223161200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 1238112000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 1254006000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 1269561600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 1284246000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 1301616000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 1317510000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 1333065600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + }, + { + "transition_time": 1348354800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": 1364515200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "IDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-kabul.json b/crates/zoneinfo/tests/data/asia-kabul.json new file mode 100644 index 000000000..68d1a7388 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-kabul.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 16608, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524538208, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": -788932800, + "record": { + "offset": 16200, + "is_dst": false, + "abbr": "+0430" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-kamchatka.json b/crates/zoneinfo/tests/data/asia-kamchatka.json new file mode 100644 index 000000000..4241cf318 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-kamchatka.json @@ -0,0 +1,521 @@ +{ + "first_record": { + "offset": 38076, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1487759676, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": -1247569200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 354888000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 370695600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 386424000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 402231600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 417960000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 433767600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 449582400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 465314400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 481039200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 496764000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 512488800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 528213600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 543938400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 559663200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 575388000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 591112800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 606837600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 622562400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 638287200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 654616800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 670341600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 686070000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 695746800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 701791200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 717516000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 733240800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 748965600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 764690400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 780415200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 796140000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 811864800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 828194400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 846338400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 859644000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 877788000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 891093600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 909237600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 922543200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 941292000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 953992800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 972741600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 985442400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1004191200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1017496800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1035640800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1048946400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1067090400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1080396000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1099144800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1111845600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1130594400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1143295200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1162044000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1174744800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1193493600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1206799200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1224943200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1238248800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1256392800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1269698400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1288450800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1301151600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-karachi.json b/crates/zoneinfo/tests/data/asia-karachi.json new file mode 100644 index 000000000..94f75b89f --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-karachi.json @@ -0,0 +1,97 @@ +{ + "first_record": { + "offset": 16092, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1988166492, + "record": { + "offset": 19800, + "is_dst": false, + "abbr": "+0530" + } + }, + { + "transition_time": -862637400, + "record": { + "offset": 23400, + "is_dst": true, + "abbr": "+0630" + } + }, + { + "transition_time": -764145000, + "record": { + "offset": 19800, + "is_dst": false, + "abbr": "+0530" + } + }, + { + "transition_time": -576135000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 38775600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "PKT" + } + }, + { + "transition_time": 1018119600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "PKST" + } + }, + { + "transition_time": 1033840800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "PKT" + } + }, + { + "transition_time": 1212260400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "PKST" + } + }, + { + "transition_time": 1225476000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "PKT" + } + }, + { + "transition_time": 1239735600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "PKST" + } + }, + { + "transition_time": 1257012000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "PKT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-kathmandu.json b/crates/zoneinfo/tests/data/asia-kathmandu.json new file mode 100644 index 000000000..b9d28343f --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-kathmandu.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 20476, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1577943676, + "record": { + "offset": 19800, + "is_dst": false, + "abbr": "+0530" + } + }, + { + "transition_time": 504901800, + "record": { + "offset": 20700, + "is_dst": false, + "abbr": "+0545" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-khandyga.json b/crates/zoneinfo/tests/data/asia-khandyga.json new file mode 100644 index 000000000..f44a82957 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-khandyga.json @@ -0,0 +1,545 @@ +{ + "first_record": { + "offset": 32533, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1579424533, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -1247558400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 354898800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 370706400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 386434800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 402242400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 417970800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 433778400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 449593200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 465325200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 481050000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 496774800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 512499600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 528224400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 543949200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 559674000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 575398800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 591123600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 606848400, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 622573200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 638298000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 654627600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 670352400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 686080800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 695757600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 701802000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 717526800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 733251600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 748976400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 764701200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 780426000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 796150800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 811875600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 828205200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 846349200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 859654800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 877798800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 891104400, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 909248400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 922554000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 941302800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 954003600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 972752400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 985453200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1004202000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1017507600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1035651600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1048957200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1067101200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1072882800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1080403200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1099152000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1111852800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1130601600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1143302400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1162051200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1174752000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1193500800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1206806400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1224950400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1238256000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1256400000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1269705600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1288454400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1301155200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1315832400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1414252800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-kolkata.json b/crates/zoneinfo/tests/data/asia-kolkata.json new file mode 100644 index 000000000..451b48414 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-kolkata.json @@ -0,0 +1,65 @@ +{ + "first_record": { + "offset": 21208, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3645237208, + "record": { + "offset": 21200, + "is_dst": false, + "abbr": "HMT" + } + }, + { + "transition_time": -3155694800, + "record": { + "offset": 19270, + "is_dst": false, + "abbr": "MMT" + } + }, + { + "transition_time": -2019705670, + "record": { + "offset": 19800, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -891581400, + "record": { + "offset": 23400, + "is_dst": true, + "abbr": "+0630" + } + }, + { + "transition_time": -872058600, + "record": { + "offset": 19800, + "is_dst": false, + "abbr": "IST" + } + }, + { + "transition_time": -862637400, + "record": { + "offset": 23400, + "is_dst": true, + "abbr": "+0630" + } + }, + { + "transition_time": -764145000, + "record": { + "offset": 19800, + "is_dst": false, + "abbr": "IST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-krasnoyarsk.json b/crates/zoneinfo/tests/data/asia-krasnoyarsk.json new file mode 100644 index 000000000..2cd1ee138 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-krasnoyarsk.json @@ -0,0 +1,529 @@ +{ + "first_record": { + "offset": 22286, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1577513486, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": -1247551200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 354906000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 370713600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 386442000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 402249600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 417978000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 433785600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 449600400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 465332400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 481057200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 496782000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 512506800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 528231600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 543956400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 559681200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 575406000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 591130800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 606855600, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 622580400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 638305200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 654634800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 670359600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 686088000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 695764800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 701809200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 717534000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 733258800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 748983600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 764708400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 780433200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 796158000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 811882800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 828212400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 846356400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 859662000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 877806000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 891111600, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 909255600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 922561200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 941310000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 954010800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 972759600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 985460400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1004209200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1017514800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1035658800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1048964400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1067108400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1080414000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1099162800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1111863600, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1130612400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1143313200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1162062000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1174762800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1193511600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1206817200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1224961200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1238266800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1256410800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1269716400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1288465200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1301166000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1414260000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-kuala_lumpur.json b/crates/zoneinfo/tests/data/asia-kuala_lumpur.json new file mode 100644 index 000000000..df69e8ea0 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-kuala_lumpur.json @@ -0,0 +1,73 @@ +{ + "first_record": { + "offset": 24925, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177477725, + "record": { + "offset": 24925, + "is_dst": false, + "abbr": "SMT" + } + }, + { + "transition_time": -2038200925, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": -1167634800, + "record": { + "offset": 26400, + "is_dst": true, + "abbr": "+0720" + } + }, + { + "transition_time": -1073028000, + "record": { + "offset": 26400, + "is_dst": false, + "abbr": "+0720" + } + }, + { + "transition_time": -894180000, + "record": { + "offset": 27000, + "is_dst": false, + "abbr": "+0730" + } + }, + { + "transition_time": -879665400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -767005200, + "record": { + "offset": 27000, + "is_dst": false, + "abbr": "+0730" + } + }, + { + "transition_time": 378662400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-kuching.json b/crates/zoneinfo/tests/data/asia-kuching.json new file mode 100644 index 000000000..8bb3a6280 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-kuching.json @@ -0,0 +1,153 @@ +{ + "first_record": { + "offset": 26480, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1383463280, + "record": { + "offset": 27000, + "is_dst": false, + "abbr": "+0730" + } + }, + { + "transition_time": -1167636600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -1082448000, + "record": { + "offset": 30000, + "is_dst": true, + "abbr": "+0820" + } + }, + { + "transition_time": -1074586800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -1050825600, + "record": { + "offset": 30000, + "is_dst": true, + "abbr": "+0820" + } + }, + { + "transition_time": -1042964400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -1019289600, + "record": { + "offset": 30000, + "is_dst": true, + "abbr": "+0820" + } + }, + { + "transition_time": -1011428400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -987753600, + "record": { + "offset": 30000, + "is_dst": true, + "abbr": "+0820" + } + }, + { + "transition_time": -979892400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -956217600, + "record": { + "offset": 30000, + "is_dst": true, + "abbr": "+0820" + } + }, + { + "transition_time": -948356400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -924595200, + "record": { + "offset": 30000, + "is_dst": true, + "abbr": "+0820" + } + }, + { + "transition_time": -916734000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -893059200, + "record": { + "offset": 30000, + "is_dst": true, + "abbr": "+0820" + } + }, + { + "transition_time": -885198000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -879667200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -767005200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-kuwait.json b/crates/zoneinfo/tests/data/asia-kuwait.json new file mode 100644 index 000000000..761d8a455 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-kuwait.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 11212, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -719636812, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-macau.json b/crates/zoneinfo/tests/data/asia-macau.json new file mode 100644 index 000000000..80b780358 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-macau.json @@ -0,0 +1,577 @@ +{ + "first_record": { + "offset": 27250, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2056692850, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -884509200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -873280800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": -855918000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -841744800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": -828529200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -765363600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -747046800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -733827600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -716461200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -697021200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -683715600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -667990800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -654771600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -636627600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -623322000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -605178000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -591872400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -573642000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -559818000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -541674000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -528368400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -510224400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -498128400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -478774800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -466678800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -446720400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -435229200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -415258200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -403158600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -383808600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -371709000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -352359000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -340259400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -320909400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -308809800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -288855000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -277360200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -257405400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -245910600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -225955800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -213856200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -194506200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -182406600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -163056600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -148537800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -132820200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -117088200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -101370600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -85638600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -69312600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -53584200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -37863000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -22134600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -6413400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 9315000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 25036200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 40764600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 56485800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 72214200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 88540200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 104268600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 119989800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 126041400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 151439400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 167167800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 182889000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 198617400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 214338600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 295385400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 309292200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-magadan.json b/crates/zoneinfo/tests/data/asia-magadan.json new file mode 100644 index 000000000..1ac8a1a36 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-magadan.json @@ -0,0 +1,537 @@ +{ + "first_record": { + "offset": 36192, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441188192, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": -1247565600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 354891600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 370699200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 386427600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 402235200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 417963600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 433771200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 449586000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 465318000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 481042800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 496767600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 512492400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 528217200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 543942000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 559666800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 575391600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 591116400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 606841200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 622566000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 638290800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 654620400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 670345200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 686073600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 695750400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 701794800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 717519600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 733244400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 748969200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 764694000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 780418800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 796143600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 811868400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 828198000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 846342000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 859647600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 877791600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 891097200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 909241200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 922546800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 941295600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 953996400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 972745200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 985446000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1004194800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1017500400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1035644400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1048950000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1067094000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1080399600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1099148400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1111849200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1130598000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1143298800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1162047600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1174748400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1193497200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1206802800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1224946800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1238252400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1256396400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1269702000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1288450800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1301151600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1414245600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1461427200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-makassar.json b/crates/zoneinfo/tests/data/asia-makassar.json new file mode 100644 index 000000000..b73312143 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-makassar.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 28656, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1577951856, + "record": { + "offset": 28656, + "is_dst": false, + "abbr": "MMT" + } + }, + { + "transition_time": -1172908656, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -880272000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -766054800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "WITA" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-manila.json b/crates/zoneinfo/tests/data/asia-manila.json new file mode 100644 index 000000000..f20880a0c --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-manila.json @@ -0,0 +1,121 @@ +{ + "first_record": { + "offset": -57368, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3944621032, + "record": { + "offset": 29032, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -2219083200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -1046678400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -1040115600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -885024000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -880016400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "JST" + } + }, + { + "transition_time": -783594000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -760093200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": -496224000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": -491562000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 228326400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 243702000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "PST" + } + }, + { + "transition_time": 643219200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "PDT" + } + }, + { + "transition_time": 649177200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "PST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-muscat.json b/crates/zoneinfo/tests/data/asia-muscat.json new file mode 100644 index 000000000..ca0f1f804 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-muscat.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 13272, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1577936472, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-nicosia.json b/crates/zoneinfo/tests/data/asia-nicosia.json new file mode 100644 index 000000000..48ff13e54 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-nicosia.json @@ -0,0 +1,401 @@ +{ + "first_record": { + "offset": 8008, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1518920008, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 166572000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 182293200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 200959200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 213829200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 228866400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 243982800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 260316000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 276123600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 291765600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 307486800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 323820000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 338936400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 354664800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 370386000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 386114400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 401835600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 417564000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 433285200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 449013600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 465339600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 481068000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 496789200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 512517600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 528238800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 543967200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 559688400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 575416800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 591138000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 606866400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 622587600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 638316000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 654642000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 670370400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686091600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701820000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717541200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733269600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 748990800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764719200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780440400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796168800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811890000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828223200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 843944400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 859672800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 875394000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 891122400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 909277200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-novokuznetsk.json b/crates/zoneinfo/tests/data/asia-novokuznetsk.json new file mode 100644 index 000000000..60e932ad3 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-novokuznetsk.json @@ -0,0 +1,521 @@ +{ + "first_record": { + "offset": 20928, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441259328, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": -1247551200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 354906000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 370713600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 386442000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 402249600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 417978000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 433785600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 449600400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 465332400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 481057200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 496782000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 512506800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 528231600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 543956400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 559681200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 575406000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 591130800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 606855600, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 622580400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 638305200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 654634800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 670359600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 686088000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 695764800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 701809200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 717534000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 733258800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 748983600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 764708400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 780433200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 796158000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 811882800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 828212400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 846356400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 859662000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 877806000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 891111600, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 909255600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 922561200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 941310000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 954010800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 972759600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 985460400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1004209200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1017514800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1035658800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1048964400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1067108400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1080414000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1099162800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1111863600, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1130612400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1143313200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1162062000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1174762800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1193511600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1206817200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1224961200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1238266800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1256410800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1269716400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1288468800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1301169600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-novosibirsk.json b/crates/zoneinfo/tests/data/asia-novosibirsk.json new file mode 100644 index 000000000..a6081523a --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-novosibirsk.json @@ -0,0 +1,545 @@ +{ + "first_record": { + "offset": 19900, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1579476700, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": -1247551200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 354906000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 370713600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 386442000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 402249600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 417978000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 433785600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 449600400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 465332400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 481057200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 496782000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 512506800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 528231600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 543956400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 559681200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 575406000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 591130800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 606855600, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 622580400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 638305200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 654634800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 670359600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 686088000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 695764800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 701809200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 717534000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 733258800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 738086400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 748987200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 764712000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 780436800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 796161600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 811886400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 828216000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 846360000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 859665600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 877809600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 891115200, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 909259200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 922564800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 941313600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 954014400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 972763200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 985464000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1004212800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1017518400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1035662400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1048968000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1067112000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1080417600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1099166400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1111867200, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1130616000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1143316800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1162065600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1174766400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1193515200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1206820800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1224964800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1238270400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1256414400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1269720000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1288468800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1301169600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1414263600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1469304000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-omsk.json b/crates/zoneinfo/tests/data/asia-omsk.json new file mode 100644 index 000000000..ca6886b94 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-omsk.json @@ -0,0 +1,529 @@ +{ + "first_record": { + "offset": 17610, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1582088010, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": -1247547600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 354909600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 370717200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 386445600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 402253200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 417981600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 433789200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 449604000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 465336000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 481060800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 496785600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 512510400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 528235200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 543960000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 559684800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 575409600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 591134400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 606859200, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 622584000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 638308800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 654638400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 670363200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 686091600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 695768400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 701812800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 717537600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 733262400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 748987200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 764712000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 780436800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 796161600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 811886400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 828216000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 846360000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 859665600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 877809600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 891115200, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 909259200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 922564800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 941313600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 954014400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 972763200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 985464000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1004212800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1017518400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1035662400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1048968000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1067112000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1080417600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1099166400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1111867200, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1130616000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1143316800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1162065600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1174766400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1193515200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1206820800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1224964800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1238270400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1256414400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1269720000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1288468800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1301169600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1414263600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-oral.json b/crates/zoneinfo/tests/data/asia-oral.json new file mode 100644 index 000000000..e7004ce67 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-oral.json @@ -0,0 +1,417 @@ +{ + "first_record": { + "offset": 12324, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441164324, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": -1247540400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 354913200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 370720800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 386445600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 402256800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 417985200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 433792800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 449607600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 465339600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 481064400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 496789200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 512514000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 528238800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 543963600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 559688400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 575413200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 591138000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 606862800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 622591200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 638316000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 654645600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 670370400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 686095200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 695772000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 701816400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 717544800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 733269600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 748994400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 764719200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 780444000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 796168800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 811893600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 828223200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 846367200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 859672800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 877816800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 891122400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 909266400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 922572000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 941320800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 954021600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 972770400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 985471200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1004220000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1017525600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1035669600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1048975200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1067119200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1080424800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1099173600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-phnom_penh.json b/crates/zoneinfo/tests/data/asia-phnom_penh.json new file mode 100644 index 000000000..8b30b96b0 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-phnom_penh.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 24124, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840164924, + "record": { + "offset": 24124, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -1570084924, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-pontianak.json b/crates/zoneinfo/tests/data/asia-pontianak.json new file mode 100644 index 000000000..9d9659efa --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-pontianak.json @@ -0,0 +1,73 @@ +{ + "first_record": { + "offset": 26240, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1946186240, + "record": { + "offset": 26240, + "is_dst": false, + "abbr": "PMT" + } + }, + { + "transition_time": -1172906240, + "record": { + "offset": 27000, + "is_dst": false, + "abbr": "+0730" + } + }, + { + "transition_time": -881220600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -766054800, + "record": { + "offset": 27000, + "is_dst": false, + "abbr": "+0730" + } + }, + { + "transition_time": -683883000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -620812800, + "record": { + "offset": 27000, + "is_dst": false, + "abbr": "+0730" + } + }, + { + "transition_time": -189415800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "WITA" + } + }, + { + "transition_time": 567964800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "WIB" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-pyongyang.json b/crates/zoneinfo/tests/data/asia-pyongyang.json new file mode 100644 index 000000000..0ebaf1e4a --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-pyongyang.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": 30180, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1948782180, + "record": { + "offset": 30600, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": -1830414600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "JST" + } + }, + { + "transition_time": -768646800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": 1439564400, + "record": { + "offset": 30600, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": 1525446000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "KST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-qatar.json b/crates/zoneinfo/tests/data/asia-qatar.json new file mode 100644 index 000000000..682a03cb1 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-qatar.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 12368, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1577935568, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 76190400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-qostanay.json b/crates/zoneinfo/tests/data/asia-qostanay.json new file mode 100644 index 000000000..dbd2ab7c7 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-qostanay.json @@ -0,0 +1,425 @@ +{ + "first_record": { + "offset": 15268, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441167268, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": -1247544000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 354913200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 370720800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 386445600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 402256800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 417985200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 433792800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 449607600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 465339600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 481064400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 496789200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 512514000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 528238800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 543963600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 559688400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 575413200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 591138000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 606862800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 622587600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 638312400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 654642000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 670366800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 686095200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 695772000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 701816400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 717541200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 733266000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 748990800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 764715600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 780440400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 796165200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 811890000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 828219600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 846363600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 859669200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 877813200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 891118800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 909262800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 922568400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 941317200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 954018000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 972766800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 985467600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1004216400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1017522000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1035666000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1048971600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1067115600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1080421200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1099170000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1709229600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-qyzylorda.json b/crates/zoneinfo/tests/data/asia-qyzylorda.json new file mode 100644 index 000000000..606316e25 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-qyzylorda.json @@ -0,0 +1,425 @@ +{ + "first_record": { + "offset": 15712, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441167712, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": -1247544000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 354913200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 370720800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 386445600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 402256800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 417985200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 433792800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 449607600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 465339600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 481064400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 496789200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 512514000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 528238800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 543963600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 559688400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 575413200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 591138000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 606862800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 622587600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 638312400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 654642000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 670366800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 686095200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 695768400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 701812800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 717541200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 733266000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 748990800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 764715600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 780440400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 796165200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 811890000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 828219600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 846363600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 859669200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 877813200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 891118800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 909262800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 922568400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 941317200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 954018000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 972766800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 985467600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1004216400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1017522000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1035666000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1048971600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1067115600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1080421200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1099170000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1545328800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-riyadh.json b/crates/zoneinfo/tests/data/asia-riyadh.json new file mode 100644 index 000000000..761d8a455 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-riyadh.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 11212, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -719636812, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-sakhalin.json b/crates/zoneinfo/tests/data/asia-sakhalin.json new file mode 100644 index 000000000..8f1b1636f --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-sakhalin.json @@ -0,0 +1,537 @@ +{ + "first_record": { + "offset": 34248, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2031039048, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -768560400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 354891600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 370699200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 386427600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 402235200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 417963600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 433771200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 449586000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 465318000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 481042800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 496767600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 512492400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 528217200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 543942000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 559666800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 575391600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 591116400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 606841200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 622566000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 638290800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 654620400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 670345200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 686073600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 695750400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 701794800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 717519600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 733244400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 748969200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 764694000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 780418800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 796143600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 811868400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 828198000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 846342000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 859647600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 877795200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 891100800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 909244800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 922550400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 941299200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 954000000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 972748800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 985449600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1004198400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1017504000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1035648000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1048953600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1067097600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1080403200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1099152000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1111852800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1130601600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1143302400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1162051200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1174752000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1193500800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1206806400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1224950400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1238256000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1256400000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1269705600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1288454400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1301155200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1414249200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1459008000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-samarkand.json b/crates/zoneinfo/tests/data/asia-samarkand.json new file mode 100644 index 000000000..6a2c83d81 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-samarkand.json @@ -0,0 +1,201 @@ +{ + "first_record": { + "offset": 16073, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441168073, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": -1247544000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 354913200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 370720800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 386445600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 402256800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 417985200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 433792800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 449607600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 465339600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 481064400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 496789200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 512514000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 528238800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 543963600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 559688400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 575413200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 591138000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 606862800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 622587600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 638312400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 654642000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 670366800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 686091600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-seoul.json b/crates/zoneinfo/tests/data/asia-seoul.json new file mode 100644 index 000000000..4fadb7add --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-seoul.json @@ -0,0 +1,241 @@ +{ + "first_record": { + "offset": 30472, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1948782472, + "record": { + "offset": 30600, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": -1830414600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "JST" + } + }, + { + "transition_time": -767350800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": -681210000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "KDT" + } + }, + { + "transition_time": -672228000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": -654771600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "KDT" + } + }, + { + "transition_time": -640864800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": -623408400, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "KDT" + } + }, + { + "transition_time": -609415200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": -588848400, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "KDT" + } + }, + { + "transition_time": -577965600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": -498128400, + "record": { + "offset": 30600, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": -462702600, + "record": { + "offset": 34200, + "is_dst": true, + "abbr": "KDT" + } + }, + { + "transition_time": -451733400, + "record": { + "offset": 30600, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": -429784200, + "record": { + "offset": 34200, + "is_dst": true, + "abbr": "KDT" + } + }, + { + "transition_time": -418296600, + "record": { + "offset": 30600, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": -399544200, + "record": { + "offset": 34200, + "is_dst": true, + "abbr": "KDT" + } + }, + { + "transition_time": -387451800, + "record": { + "offset": 30600, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": -368094600, + "record": { + "offset": 34200, + "is_dst": true, + "abbr": "KDT" + } + }, + { + "transition_time": -356002200, + "record": { + "offset": 30600, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": -336645000, + "record": { + "offset": 34200, + "is_dst": true, + "abbr": "KDT" + } + }, + { + "transition_time": -324552600, + "record": { + "offset": 30600, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": -305195400, + "record": { + "offset": 34200, + "is_dst": true, + "abbr": "KDT" + } + }, + { + "transition_time": -293103000, + "record": { + "offset": 30600, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": -264933000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": 547578000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "KDT" + } + }, + { + "transition_time": 560883600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "KST" + } + }, + { + "transition_time": 579027600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "KDT" + } + }, + { + "transition_time": 592333200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "KST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-shanghai.json b/crates/zoneinfo/tests/data/asia-shanghai.json new file mode 100644 index 000000000..62045e101 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-shanghai.json @@ -0,0 +1,241 @@ +{ + "first_record": { + "offset": 29143, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177481943, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1600675200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -1585904400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -933667200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -922093200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -908870400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -888829200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -881049600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -767869200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -745833600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -733827600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -716889600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -699613200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -683884800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -670669200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -652348800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -650019600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 515527200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 527014800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 545162400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 558464400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 577216800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 589914000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 608666400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 621968400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 640116000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 653418000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 671565600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 684867600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-singapore.json b/crates/zoneinfo/tests/data/asia-singapore.json new file mode 100644 index 000000000..df69e8ea0 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-singapore.json @@ -0,0 +1,73 @@ +{ + "first_record": { + "offset": 24925, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177477725, + "record": { + "offset": 24925, + "is_dst": false, + "abbr": "SMT" + } + }, + { + "transition_time": -2038200925, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": -1167634800, + "record": { + "offset": 26400, + "is_dst": true, + "abbr": "+0720" + } + }, + { + "transition_time": -1073028000, + "record": { + "offset": 26400, + "is_dst": false, + "abbr": "+0720" + } + }, + { + "transition_time": -894180000, + "record": { + "offset": 27000, + "is_dst": false, + "abbr": "+0730" + } + }, + { + "transition_time": -879665400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -767005200, + "record": { + "offset": 27000, + "is_dst": false, + "abbr": "+0730" + } + }, + { + "transition_time": 378662400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-srednekolymsk.json b/crates/zoneinfo/tests/data/asia-srednekolymsk.json new file mode 100644 index 000000000..f13db2746 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-srednekolymsk.json @@ -0,0 +1,529 @@ +{ + "first_record": { + "offset": 36892, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441188892, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": -1247565600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 354891600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 370699200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 386427600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 402235200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 417963600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 433771200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 449586000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 465318000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 481042800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 496767600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 512492400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 528217200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 543942000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 559666800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 575391600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 591116400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 606841200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 622566000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 638290800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 654620400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 670345200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 686073600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 695750400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 701794800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 717519600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 733244400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 748969200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 764694000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 780418800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 796143600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 811868400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 828198000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 846342000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 859647600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 877791600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 891097200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 909241200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 922546800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 941295600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 953996400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 972745200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 985446000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1004194800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1017500400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1035644400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1048950000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1067094000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1080399600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1099148400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1111849200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1130598000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1143298800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1162047600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1174748400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1193497200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1206802800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1224946800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1238252400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1256396400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1269702000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1288450800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1301151600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1414245600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-taipei.json b/crates/zoneinfo/tests/data/asia-taipei.json new file mode 100644 index 000000000..dcad4f3fe --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-taipei.json @@ -0,0 +1,337 @@ +{ + "first_record": { + "offset": 29160, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2335248360, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -1017820800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "JST" + } + }, + { + "transition_time": -766224000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -745833600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -733827600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -716889600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -699613200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -683884800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -670669200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -652348800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -639133200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -620812800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -607597200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -589276800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -576061200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -562924800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -541760400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -528710400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -510224400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -497174400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -478688400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -465638400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -449830800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -434016000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -418208400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -402480000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -386672400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -370944000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -355136400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -339408000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -323600400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -302515200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -291978000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": -270979200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": -260442000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 133977600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 149785200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 165513600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 181321200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + }, + { + "transition_time": 299606400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "CDT" + } + }, + { + "transition_time": 307551600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "CST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-tashkent.json b/crates/zoneinfo/tests/data/asia-tashkent.json new file mode 100644 index 000000000..220a2a966 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-tashkent.json @@ -0,0 +1,201 @@ +{ + "first_record": { + "offset": 16631, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441168631, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": -1247547600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 354909600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 370717200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 386445600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 402253200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 417981600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 433789200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 449604000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 465336000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 481060800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 496785600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 512510400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 528235200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 543960000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 559684800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 575409600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 591134400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 606859200, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 622584000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 638308800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 654638400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 670363200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 686091600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-tbilisi.json b/crates/zoneinfo/tests/data/asia-tbilisi.json new file mode 100644 index 000000000..18bbe66f6 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-tbilisi.json @@ -0,0 +1,425 @@ +{ + "first_record": { + "offset": 10751, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840151551, + "record": { + "offset": 10751, + "is_dst": false, + "abbr": "TBMT" + } + }, + { + "transition_time": -1441162751, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": -405140400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 354916800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 370724400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 386452800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 402260400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 417988800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 433796400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 449611200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 465343200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 481068000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 496792800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 512517600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 528242400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 543967200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 559692000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 575416800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 591141600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 606866400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 622591200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 638316000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 654645600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 670370400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 686098800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 701816400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 717537600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 733266000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 748987200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 764715600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 780436800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 796161600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 811882800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 828216000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 859662000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 877806000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 891115200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 909255600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 922564800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 941310000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 954014400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 972759600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 985464000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1004209200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1017518400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1035658800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1048968000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1067108400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1080417600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1088276400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1099177200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1111878000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-tehran.json b/crates/zoneinfo/tests/data/asia-tehran.json new file mode 100644 index 000000000..adbc9f0f0 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-tehran.json @@ -0,0 +1,577 @@ +{ + "first_record": { + "offset": 12344, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1704165944, + "record": { + "offset": 12344, + "is_dst": false, + "abbr": "TMT" + } + }, + { + "transition_time": -1090466744, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 227820600, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 246223800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 259617600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 271108800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 279576000, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 296512200, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 306531000, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 322432200, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 338499000, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 673216200, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 685481400, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 701209800, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 717103800, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 732745800, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 748639800, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 764281800, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 780175800, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 795817800, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 811711800, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 827353800, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 843247800, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 858976200, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 874870200, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 890512200, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 906406200, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 922048200, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 937942200, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 953584200, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 969478200, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 985206600, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1001100600, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1016742600, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1032636600, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1048278600, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1064172600, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1079814600, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1095708600, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1111437000, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1127331000, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1206045000, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1221939000, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1237667400, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1253561400, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1269203400, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1285097400, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1300739400, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1316633400, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1332275400, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1348169400, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1363897800, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1379791800, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1395433800, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1411327800, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1426969800, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1442863800, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1458505800, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1474399800, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1490128200, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1506022200, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1521664200, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1537558200, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1553200200, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1569094200, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1584736200, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1600630200, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1616358600, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1632252600, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + }, + { + "transition_time": 1647894600, + "record": { + "offset": 16200, + "is_dst": true, + "abbr": "+0430" + } + }, + { + "transition_time": 1663788600, + "record": { + "offset": 12600, + "is_dst": false, + "abbr": "+0330" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-thimphu.json b/crates/zoneinfo/tests/data/asia-thimphu.json new file mode 100644 index 000000000..9ed5b48e8 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-thimphu.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 21516, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -706341516, + "record": { + "offset": 19800, + "is_dst": false, + "abbr": "+0530" + } + }, + { + "transition_time": 560025000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-tokyo.json b/crates/zoneinfo/tests/data/asia-tokyo.json new file mode 100644 index 000000000..7d413a99a --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-tokyo.json @@ -0,0 +1,81 @@ +{ + "first_record": { + "offset": 33539, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2587712400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "JST" + } + }, + { + "transition_time": -683802000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "JDT" + } + }, + { + "transition_time": -672310800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "JST" + } + }, + { + "transition_time": -654771600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "JDT" + } + }, + { + "transition_time": -640861200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "JST" + } + }, + { + "transition_time": -620298000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "JDT" + } + }, + { + "transition_time": -609411600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "JST" + } + }, + { + "transition_time": -588848400, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "JDT" + } + }, + { + "transition_time": -577962000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "JST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-tomsk.json b/crates/zoneinfo/tests/data/asia-tomsk.json new file mode 100644 index 000000000..fa4b01cd3 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-tomsk.json @@ -0,0 +1,545 @@ +{ + "first_record": { + "offset": 20391, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1578807591, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": -1247551200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 354906000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 370713600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 386442000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 402249600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 417978000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 433785600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 449600400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 465332400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 481057200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 496782000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 512506800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 528231600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 543956400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 559681200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 575406000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 591130800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 606855600, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 622580400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 638305200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 654634800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 670359600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 686088000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 695764800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 701809200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 717534000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 733258800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 748983600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 764708400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 780433200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 796158000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 811882800, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 828212400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 846356400, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 859662000, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 877806000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 891111600, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 909255600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 922561200, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 941310000, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 954010800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 972759600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 985460400, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1004209200, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1017514800, + "record": { + "offset": 28800, + "is_dst": true, + "abbr": "+08" + } + }, + { + "transition_time": 1020193200, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1035662400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1048968000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1067112000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1080417600, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1099166400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1111867200, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1130616000, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1143316800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1162065600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1174766400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1193515200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1206820800, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1224964800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1238270400, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1256414400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1269720000, + "record": { + "offset": 25200, + "is_dst": true, + "abbr": "+07" + } + }, + { + "transition_time": 1288468800, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1301169600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 1414263600, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1464465600, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-ulaanbaatar.json b/crates/zoneinfo/tests/data/asia-ulaanbaatar.json new file mode 100644 index 000000000..2d854506c --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-ulaanbaatar.json @@ -0,0 +1,409 @@ +{ + "first_record": { + "offset": 25652, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2032931252, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + }, + { + "transition_time": 252435600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 417974400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 433782000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 449596800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 465318000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 481046400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 496767600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 512496000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 528217200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 543945600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 559666800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 575395200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 591116400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 606844800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 622566000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 638294400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 654620400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 670348800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 686070000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 701798400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 717519600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 733248000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 748969200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 764697600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 780418800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 796147200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 811868400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 828201600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 843922800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 859651200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 875372400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 891100800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 906822000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 988394400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1001696400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1017424800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1033146000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1048874400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1064595600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1080324000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1096045200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1111773600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1127494800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1143223200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1159549200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1427479200, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1443193200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 1458928800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 1474642800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-urumqi.json b/crates/zoneinfo/tests/data/asia-urumqi.json new file mode 100644 index 000000000..51aa23b0b --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-urumqi.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 21020, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1325483420, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-ust-nera.json b/crates/zoneinfo/tests/data/asia-ust-nera.json new file mode 100644 index 000000000..6a5c62b70 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-ust-nera.json @@ -0,0 +1,537 @@ +{ + "first_record": { + "offset": 34374, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1579426374, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -1247558400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 354898800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 370699200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 386427600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 402235200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 417963600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 433771200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 449586000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 465318000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 481042800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 496767600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 512492400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 528217200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 543942000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 559666800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 575391600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 591116400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 606841200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 622566000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 638290800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 654620400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 670345200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 686073600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 695750400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 701794800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 717519600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 733244400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 748969200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 764694000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 780418800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 796143600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 811868400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 828198000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 846342000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 859647600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 877791600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 891097200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 909241200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 922546800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 941295600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 953996400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 972745200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 985446000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1004194800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1017500400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1035644400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1048950000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1067094000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1080399600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1099148400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1111849200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1130598000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1143298800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1162047600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1174748400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1193497200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1206802800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1224946800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1238252400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1256396400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1269702000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 1288450800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1301151600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1315828800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1414249200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-vientiane.json b/crates/zoneinfo/tests/data/asia-vientiane.json new file mode 100644 index 000000000..8b30b96b0 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-vientiane.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 24124, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840164924, + "record": { + "offset": 24124, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -1570084924, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-vladivostok.json b/crates/zoneinfo/tests/data/asia-vladivostok.json new file mode 100644 index 000000000..77a31ca40 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-vladivostok.json @@ -0,0 +1,529 @@ +{ + "first_record": { + "offset": 31651, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1487321251, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -1247562000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 354895200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 370702800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 386431200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 402238800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 417967200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 433774800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 449589600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 465321600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 481046400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 496771200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 512496000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 528220800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 543945600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 559670400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 575395200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 591120000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 606844800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 622569600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 638294400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 654624000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 670348800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 686077200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 695754000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 701798400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 717523200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 733248000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 748972800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 764697600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 780422400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 796147200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 811872000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 828201600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 846345600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 859651200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 877795200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 891100800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 909244800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 922550400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 941299200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 954000000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 972748800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 985449600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1004198400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1017504000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1035648000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1048953600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1067097600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1080403200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1099152000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1111852800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1130601600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1143302400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1162051200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1174752000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1193500800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1206806400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1224950400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1238256000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1256400000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1269705600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "+11" + } + }, + { + "transition_time": 1288454400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1301155200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1414249200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-yakutsk.json b/crates/zoneinfo/tests/data/asia-yakutsk.json new file mode 100644 index 000000000..678eea008 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-yakutsk.json @@ -0,0 +1,529 @@ +{ + "first_record": { + "offset": 31138, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1579423138, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": -1247558400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 354898800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 370706400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 386434800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 402242400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 417970800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 433778400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 449593200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 465325200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 481050000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 496774800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 512499600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 528224400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 543949200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 559674000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 575398800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 591123600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 606848400, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 622573200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 638298000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 654627600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 670352400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "+09" + } + }, + { + "transition_time": 686080800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "+08" + } + }, + { + "transition_time": 695757600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 701802000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 717526800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 733251600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 748976400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 764701200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 780426000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 796150800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 811875600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 828205200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 846349200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 859654800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 877798800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 891104400, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 909248400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 922554000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 941302800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 954003600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 972752400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 985453200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1004202000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1017507600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1035651600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1048957200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1067101200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1080406800, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1099155600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1111856400, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1130605200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1143306000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1162054800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1174755600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1193504400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1206810000, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1224954000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1238259600, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1256403600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1269709200, + "record": { + "offset": 36000, + "is_dst": true, + "abbr": "+10" + } + }, + { + "transition_time": 1288458000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": 1301158800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1414252800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-yangon.json b/crates/zoneinfo/tests/data/asia-yangon.json new file mode 100644 index 000000000..df47c7475 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-yangon.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 23087, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840163887, + "record": { + "offset": 23087, + "is_dst": false, + "abbr": "RMT" + } + }, + { + "transition_time": -1577946287, + "record": { + "offset": 23400, + "is_dst": false, + "abbr": "+0630" + } + }, + { + "transition_time": -873268200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -778410000, + "record": { + "offset": 23400, + "is_dst": false, + "abbr": "+0630" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-yekaterinburg.json b/crates/zoneinfo/tests/data/asia-yekaterinburg.json new file mode 100644 index 000000000..39fd2be39 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-yekaterinburg.json @@ -0,0 +1,537 @@ +{ + "first_record": { + "offset": 14553, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1688270553, + "record": { + "offset": 13505, + "is_dst": false, + "abbr": "PMT" + } + }, + { + "transition_time": -1592610305, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": -1247544000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 354913200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 370720800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 386449200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 402256800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 417985200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 433792800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 449607600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 465339600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 481064400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 496789200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 512514000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 528238800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 543963600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 559688400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 575413200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 591138000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 606862800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 622587600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 638312400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 654642000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 670366800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 686095200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 695772000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 701816400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 717541200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 733266000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 748990800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 764715600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 780440400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 796165200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 811890000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 828219600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 846363600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 859669200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 877813200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 891118800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 909262800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 922568400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 941317200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 954018000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 972766800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 985467600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1004216400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1017522000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1035666000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1048971600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1067115600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1080421200, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1099170000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1111870800, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1130619600, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1143320400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1162069200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1174770000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1193518800, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1206824400, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1224968400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1238274000, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1256418000, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1269723600, + "record": { + "offset": 21600, + "is_dst": true, + "abbr": "+06" + } + }, + { + "transition_time": 1288472400, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 1301173200, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + }, + { + "transition_time": 1414267200, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/asia-yerevan.json b/crates/zoneinfo/tests/data/asia-yerevan.json new file mode 100644 index 000000000..8e39446d1 --- /dev/null +++ b/crates/zoneinfo/tests/data/asia-yerevan.json @@ -0,0 +1,505 @@ +{ + "first_record": { + "offset": 10680, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441162680, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": -405140400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 354916800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 370724400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 386452800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 402260400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 417988800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 433796400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 449611200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 465343200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 481068000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 496792800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 512517600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 528242400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 543967200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 559692000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 575416800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 591141600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 606866400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 622591200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 638316000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 654645600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 670370400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 686098800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 701823600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 717548400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 733273200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 748998000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 764722800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 780447600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 796172400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 811897200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 859672800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 877816800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 891122400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 909266400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 922572000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 941320800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 954021600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 972770400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 985471200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1004220000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1017525600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1035669600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1048975200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1067119200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1080424800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1099173600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1111874400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1130623200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1143324000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1162072800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1174773600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1193522400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1206828000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1224972000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1238277600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1256421600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1269727200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1288476000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1301176800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1319925600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/atlantic-azores.json b/crates/zoneinfo/tests/data/atlantic-azores.json new file mode 100644 index 000000000..f13bc12dd --- /dev/null +++ b/crates/zoneinfo/tests/data/atlantic-azores.json @@ -0,0 +1,1073 @@ +{ + "first_record": { + "offset": -6160, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713904240, + "record": { + "offset": -6872, + "is_dst": false, + "abbr": "HMT" + } + }, + { + "transition_time": -1830376800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1689548400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1677794400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1667426400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1647730800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1635890400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1616194800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1604354400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1584658800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1572732000, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1553036400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1541196000, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1521500400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1442444400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1427670000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1379286000, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1364770800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1348441200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1333321200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1316386800, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1301266800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1284332400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1269817200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1221433200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1206918000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1191193200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1175468400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1127689200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1111964400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1096844400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1080514800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1063580400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1049065200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1033340400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -1017615600, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -1002495600, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -986166000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -969231600, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -950482800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -942015600, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -922489200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -906937200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -891126000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -877302000, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -873676800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -864000000, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -857948400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -845852400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -842832000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -831340800, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -825894000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -814402800, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -810777600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -799891200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -794444400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -782953200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -779328000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -768441600, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -762994800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -749084400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -733359600, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -717624000, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -701899200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -686174400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -670449600, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -654724800, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -639000000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -623275200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -607550400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -591825600, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -575496000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -559771200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -544046400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -528321600, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -512596800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -496872000, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -481147200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -465422400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -449697600, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -433972800, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -417643200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -401918400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -386193600, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -370468800, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -354744000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -339019200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -323294400, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -307569600, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -291844800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -276120000, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -260395200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -244670400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -228340800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -212616000, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -196891200, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -181166400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -165441600, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -149716800, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -133992000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -118267200, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -102542400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 725421600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 740278800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/atlantic-bermuda.json b/crates/zoneinfo/tests/data/atlantic-bermuda.json new file mode 100644 index 000000000..7f5d538a1 --- /dev/null +++ b/crates/zoneinfo/tests/data/atlantic-bermuda.json @@ -0,0 +1,769 @@ +{ + "first_record": { + "offset": -15558, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524506042, + "record": { + "offset": -15558, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -1664307642, + "record": { + "offset": -11958, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1648932042, + "record": { + "offset": -15558, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -1632080442, + "record": { + "offset": -11958, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1618692042, + "record": { + "offset": -15558, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -1262281242, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -882727200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -858538800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -845229600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -825879600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -814384800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -793825200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -782935200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -762375600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -713988000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -703710000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -681933600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -672865200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -650484000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -641415600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -618429600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -609966000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -586980000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -578516400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -555530400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -546462000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": -429127200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": -415825200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 136360800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 152082000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 167810400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 183531600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 199260000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 215586000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 230709600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 247035600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 262764000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 278485200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 294213600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 309934800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 325663200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 341384400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 357112800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 372834000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 388562400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 404888400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 420012000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 436338000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 452066400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 467787600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 483516000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 499237200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 514965600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 530686800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 544600800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 562136400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 576050400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 594190800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 607500000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 625640400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 638949600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 657090000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 671004000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 688539600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 702453600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 719989200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 733903200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 752043600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 765352800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 783493200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 796802400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 814942800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 828856800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 846392400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 860306400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 877842000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 891756000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 909291600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 923205600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 941346000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 954655200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 972795600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 986104800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1004245200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1018159200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1035694800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1049608800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1067144400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1081058400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1099198800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1112508000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1130648400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1143957600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + }, + { + "transition_time": 1162098000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "AST" + } + }, + { + "transition_time": 1173592800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "ADT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/atlantic-canary.json b/crates/zoneinfo/tests/data/atlantic-canary.json new file mode 100644 index 000000000..9e1c3299d --- /dev/null +++ b/crates/zoneinfo/tests/data/atlantic-canary.json @@ -0,0 +1,289 @@ +{ + "first_record": { + "offset": -3696, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1509663504, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -733874400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 323827200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/atlantic-cape_verde.json b/crates/zoneinfo/tests/data/atlantic-cape_verde.json new file mode 100644 index 000000000..e40bec0a0 --- /dev/null +++ b/crates/zoneinfo/tests/data/atlantic-cape_verde.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -5644, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830376800, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": -862610400, + "record": { + "offset": -3600, + "is_dst": true, + "abbr": "-01" + } + }, + { + "transition_time": -764118000, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + }, + { + "transition_time": 186120000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/atlantic-faroe.json b/crates/zoneinfo/tests/data/atlantic-faroe.json new file mode 100644 index 000000000..ac2e5ef2b --- /dev/null +++ b/crates/zoneinfo/tests/data/atlantic-faroe.json @@ -0,0 +1,265 @@ +{ + "first_record": { + "offset": -1624, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1955748776, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/atlantic-madeira.json b/crates/zoneinfo/tests/data/atlantic-madeira.json new file mode 100644 index 000000000..89c69aeab --- /dev/null +++ b/crates/zoneinfo/tests/data/atlantic-madeira.json @@ -0,0 +1,1057 @@ +{ + "first_record": { + "offset": -4056, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713906344, + "record": { + "offset": -4056, + "is_dst": false, + "abbr": "FMT" + } + }, + { + "transition_time": -1830380400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1689552000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1677798000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1667430000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1647734400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1635894000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1616198400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1604358000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1584662400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1572735600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1553040000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1541199600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1521504000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1442448000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1427673600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1379289600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1364774400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1348444800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1333324800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1316390400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1301270400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1284336000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1269820800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1221436800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1206921600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1191196800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1175472000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1127692800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1111968000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1096848000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1080518400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1063584000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1049068800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1033344000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -1017619200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -1002499200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -986169600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -969235200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -950486400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -942019200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -922492800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -906940800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -891129600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -877305600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -873680400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": -864003600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -857952000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -845856000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -842835600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": -831344400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -825897600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -814406400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -810781200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": -799894800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -794448000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -782956800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -779331600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "+01" + } + }, + { + "transition_time": -768445200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -762998400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -749088000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -733363200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -717627600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -701902800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -686178000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -670453200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -654728400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -639003600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -623278800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -607554000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -591829200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -575499600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -559774800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -544050000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -528325200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -512600400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -496875600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -481150800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -465426000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -449701200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -433976400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -417646800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -401922000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -386197200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -370472400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -354747600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -339022800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -323298000, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -307573200, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -291848400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -276123600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -260398800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -244674000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -228344400, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -212619600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -196894800, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -181170000, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -165445200, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -149720400, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -133995600, + "record": { + "offset": -3600, + "is_dst": false, + "abbr": "-01" + } + }, + { + "transition_time": -118270800, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "+00" + } + }, + { + "transition_time": -102546000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 386726400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 401846400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 417571200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 433296000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 449020800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 465350400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 481075200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 496800000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 512524800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/atlantic-reykjavik.json b/crates/zoneinfo/tests/data/atlantic-reykjavik.json new file mode 100644 index 000000000..bc95c005f --- /dev/null +++ b/crates/zoneinfo/tests/data/atlantic-reykjavik.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -968, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830383032, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/atlantic-south_georgia.json b/crates/zoneinfo/tests/data/atlantic-south_georgia.json new file mode 100644 index 000000000..b1d543da2 --- /dev/null +++ b/crates/zoneinfo/tests/data/atlantic-south_georgia.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -8768, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524512832, + "record": { + "offset": -7200, + "is_dst": false, + "abbr": "-02" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/atlantic-st_helena.json b/crates/zoneinfo/tests/data/atlantic-st_helena.json new file mode 100644 index 000000000..bc95c005f --- /dev/null +++ b/crates/zoneinfo/tests/data/atlantic-st_helena.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -968, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1830383032, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/atlantic-stanley.json b/crates/zoneinfo/tests/data/atlantic-stanley.json new file mode 100644 index 000000000..4f9bf41d1 --- /dev/null +++ b/crates/zoneinfo/tests/data/atlantic-stanley.json @@ -0,0 +1,569 @@ +{ + "first_record": { + "offset": -13884, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524507716, + "record": { + "offset": -13884, + "is_dst": false, + "abbr": "SMT" + } + }, + { + "transition_time": -1824235716, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -1018209600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -1003093200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -986760000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -971643600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -954705600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -939589200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -923256000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -908139600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -891806400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -876690000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": -860356800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": -852066000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 420609600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 433306800, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 452052000, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 464151600, + "record": { + "offset": -7200, + "is_dst": true, + "abbr": "-02" + } + }, + { + "transition_time": 483501600, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + }, + { + "transition_time": 495601200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 514350000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 527054400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 545799600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 558504000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 577249200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 589953600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 608698800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 621403200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 640753200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 652852800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 672202800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 684907200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 703652400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 716356800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 735102000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 747806400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 766551600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 779256000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 798001200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 810705600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 830055600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 842760000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 861505200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 874209600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 892954800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 905659200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 924404400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 937108800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 955854000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 968558400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 987310800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 999410400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1019365200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1030860000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1050814800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1062914400, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1082264400, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1094364000, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1113714000, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1125813600, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1145163600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1157263200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1176613200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1188712800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1208667600, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1220767200, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1240117200, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1252216800, + "record": { + "offset": -10800, + "is_dst": true, + "abbr": "-03" + } + }, + { + "transition_time": 1271566800, + "record": { + "offset": -14400, + "is_dst": false, + "abbr": "-04" + } + }, + { + "transition_time": 1283666400, + "record": { + "offset": -10800, + "is_dst": false, + "abbr": "-03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/australia-adelaide.json b/crates/zoneinfo/tests/data/australia-adelaide.json new file mode 100644 index 000000000..a37871814 --- /dev/null +++ b/crates/zoneinfo/tests/data/australia-adelaide.json @@ -0,0 +1,681 @@ +{ + "first_record": { + "offset": 33260, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2364110060, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -2230189200, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -1672558200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": -1665387000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -883639800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": -876123000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -860398200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": -844673400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -828343800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": -813223800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 57688200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 67969800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 89137800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 100024200, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 120587400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 131473800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 152037000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 162923400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 183486600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 194977800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 215541000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 226427400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 246990600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 257877000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 278440200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 289326600, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 309889800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 320776200, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 341339400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 352225800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 372789000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 384280200, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 404843400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 415729800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 436293000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 447179400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 467742600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 478629000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 499192200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 511288200, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 530037000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 542737800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 562091400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 574792200, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 594145800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 606241800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 625595400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 637691400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 657045000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 667931400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 688494600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 701195400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 719944200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 731435400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 751998600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 764094600, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 783448200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 796149000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 814897800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 828203400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 846347400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 859653000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 877797000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 891102600, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 909246600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 922552200, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 941301000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 954001800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 972750600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 985451400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 1004200200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 1017505800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 1035649800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 1048955400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 1067099400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 1080405000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 1099153800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 1111854600, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 1130603400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 1143909000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 1162053000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 1174753800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 1193502600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 1207413000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/australia-brisbane.json b/crates/zoneinfo/tests/data/australia-brisbane.json new file mode 100644 index 000000000..b2ec955cf --- /dev/null +++ b/crates/zoneinfo/tests/data/australia-brisbane.json @@ -0,0 +1,145 @@ +{ + "first_record": { + "offset": 36728, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2366791928, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -1672560000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -1665388800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -883641600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -876124800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -860400000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -844675200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -828345600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -813225600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 57686400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 67968000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 625593600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 636480000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 657043200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 667929600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 688492800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 699379200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/australia-broken_hill.json b/crates/zoneinfo/tests/data/australia-broken_hill.json new file mode 100644 index 000000000..b33888652 --- /dev/null +++ b/crates/zoneinfo/tests/data/australia-broken_hill.json @@ -0,0 +1,689 @@ +{ + "first_record": { + "offset": 33948, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2364110748, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -2314951200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -2230189200, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -1672558200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": -1665387000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -883639800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": -876123000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -860398200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": -844673400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -828343800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": -813223800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 57688200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 67969800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 89137800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 100024200, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 120587400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 131473800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 152037000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 162923400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 183486600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 194977800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 215541000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 226427400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 246990600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 257877000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 278440200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 289326600, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 309889800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 320776200, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 341339400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 352225800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 372789000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 386699400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 404843400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 415729800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 436293000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 447179400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 467742600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 478629000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 499192200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 511288200, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 530037000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 542737800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 562091400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 574792200, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 594145800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 606241800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 625595400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 636481800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 657045000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 667931400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 688494600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 699381000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 719944200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 731435400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 751998600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 762885000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 783448200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 794334600, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 814897800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 828203400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 846347400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 859653000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 877797000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 891102600, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 909246600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 922552200, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 941301000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 954001800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 972750600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 985451400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 1004200200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 1017505800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 1035649800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 1048955400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 1067099400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 1080405000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 1099153800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 1111854600, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 1130603400, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 1143909000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 1162053000, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 1174753800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": 1193502600, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": 1207413000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/australia-darwin.json b/crates/zoneinfo/tests/data/australia-darwin.json new file mode 100644 index 000000000..e92ab3673 --- /dev/null +++ b/crates/zoneinfo/tests/data/australia-darwin.json @@ -0,0 +1,89 @@ +{ + "first_record": { + "offset": 31400, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2364108200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -2230189200, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -1672558200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": -1665387000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -883639800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": -876123000, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -860398200, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": -844673400, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + }, + { + "transition_time": -828343800, + "record": { + "offset": 37800, + "is_dst": true, + "abbr": "ACDT" + } + }, + { + "transition_time": -813223800, + "record": { + "offset": 34200, + "is_dst": false, + "abbr": "ACST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/australia-eucla.json b/crates/zoneinfo/tests/data/australia-eucla.json new file mode 100644 index 000000000..39cd7ad6c --- /dev/null +++ b/crates/zoneinfo/tests/data/australia-eucla.json @@ -0,0 +1,161 @@ +{ + "first_record": { + "offset": 30928, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2337928528, + "record": { + "offset": 31500, + "is_dst": false, + "abbr": "+0845" + } + }, + { + "transition_time": -1672555500, + "record": { + "offset": 35100, + "is_dst": true, + "abbr": "+0945" + } + }, + { + "transition_time": -1665384300, + "record": { + "offset": 31500, + "is_dst": false, + "abbr": "+0845" + } + }, + { + "transition_time": -883637100, + "record": { + "offset": 35100, + "is_dst": true, + "abbr": "+0945" + } + }, + { + "transition_time": -876120300, + "record": { + "offset": 31500, + "is_dst": false, + "abbr": "+0845" + } + }, + { + "transition_time": -860395500, + "record": { + "offset": 35100, + "is_dst": true, + "abbr": "+0945" + } + }, + { + "transition_time": -844670700, + "record": { + "offset": 31500, + "is_dst": false, + "abbr": "+0845" + } + }, + { + "transition_time": 152039700, + "record": { + "offset": 35100, + "is_dst": true, + "abbr": "+0945" + } + }, + { + "transition_time": 162926100, + "record": { + "offset": 31500, + "is_dst": false, + "abbr": "+0845" + } + }, + { + "transition_time": 436295700, + "record": { + "offset": 35100, + "is_dst": true, + "abbr": "+0945" + } + }, + { + "transition_time": 447182100, + "record": { + "offset": 31500, + "is_dst": false, + "abbr": "+0845" + } + }, + { + "transition_time": 690311700, + "record": { + "offset": 35100, + "is_dst": true, + "abbr": "+0945" + } + }, + { + "transition_time": 699383700, + "record": { + "offset": 31500, + "is_dst": false, + "abbr": "+0845" + } + }, + { + "transition_time": 1165079700, + "record": { + "offset": 35100, + "is_dst": true, + "abbr": "+0945" + } + }, + { + "transition_time": 1174756500, + "record": { + "offset": 31500, + "is_dst": false, + "abbr": "+0845" + } + }, + { + "transition_time": 1193505300, + "record": { + "offset": 35100, + "is_dst": true, + "abbr": "+0945" + } + }, + { + "transition_time": 1206810900, + "record": { + "offset": 31500, + "is_dst": false, + "abbr": "+0845" + } + }, + { + "transition_time": 1224954900, + "record": { + "offset": 35100, + "is_dst": true, + "abbr": "+0945" + } + }, + { + "transition_time": 1238260500, + "record": { + "offset": 31500, + "is_dst": false, + "abbr": "+0845" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/australia-hobart.json b/crates/zoneinfo/tests/data/australia-hobart.json new file mode 100644 index 000000000..b4738c8a1 --- /dev/null +++ b/crates/zoneinfo/tests/data/australia-hobart.json @@ -0,0 +1,761 @@ +{ + "first_record": { + "offset": 35356, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2345795356, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -1680508800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -1665388800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -1646640000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -1635753600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -1615190400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -1604304000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -883641600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -876124800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -860400000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -844675200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -828345600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -813225600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -71136000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -55411200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -37267200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -25776000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -5817600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 5673600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 25632000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 37728000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 57686400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 67968000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 89136000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 100022400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 120585600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 131472000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 152035200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 162921600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 183484800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 194976000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 215539200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 226425600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 246988800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 257875200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 278438400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 289324800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 309888000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 320774400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 341337600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 352224000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 372787200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 386092800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 404841600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 417542400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 436291200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 447177600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 467740800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 478627200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 499190400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 510076800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 530035200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 542736000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 562089600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 574790400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 594144000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 606240000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 625593600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 637689600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 657043200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 670348800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 686678400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 701798400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 718128000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 733248000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 749577600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 764697600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 781027200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 796147200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 812476800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 828201600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 844531200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 859651200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 875980800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 891100800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 907430400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 922550400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 938880000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 954000000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 967305600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 985449600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1002384000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1017504000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1033833600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1048953600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1065283200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1080403200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1096732800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1111852800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1128182400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1143907200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1159632000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1174752000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1191686400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/australia-lindeman.json b/crates/zoneinfo/tests/data/australia-lindeman.json new file mode 100644 index 000000000..c3ace0543 --- /dev/null +++ b/crates/zoneinfo/tests/data/australia-lindeman.json @@ -0,0 +1,177 @@ +{ + "first_record": { + "offset": 35756, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2366790956, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -1672560000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -1665388800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -883641600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -876124800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -860400000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -844675200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -828345600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -813225600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 57686400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 67968000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 625593600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 636480000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 657043200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 667929600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 688492800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 699379200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 719942400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 731433600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 751996800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 762883200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + } + ] +} \ No newline at end of file diff --git a/zoneinfo/tests/data/australia-lord_howe.json b/crates/zoneinfo/tests/data/australia-lord_howe.json similarity index 100% rename from zoneinfo/tests/data/australia-lord_howe.json rename to crates/zoneinfo/tests/data/australia-lord_howe.json diff --git a/crates/zoneinfo/tests/data/australia-melbourne.json b/crates/zoneinfo/tests/data/australia-melbourne.json new file mode 100644 index 000000000..a54667a4a --- /dev/null +++ b/crates/zoneinfo/tests/data/australia-melbourne.json @@ -0,0 +1,673 @@ +{ + "first_record": { + "offset": 34792, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2364111592, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -1672560000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -1665388800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -883641600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -876124800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -860400000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -844675200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": -828345600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": -813225600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 57686400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 67968000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 89136000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 100022400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 120585600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 131472000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 152035200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 162921600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 183484800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 194976000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 215539200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 226425600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 246988800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 257875200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 278438400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 289324800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 309888000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 320774400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 341337600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 352224000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 372787200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 384278400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 404841600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 415728000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 436291200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 447177600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 467740800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 478627200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 499190400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 511286400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 530035200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 542736000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 561484800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 574790400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 594144000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 606240000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 625593600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 637689600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 657043200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 667929600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 688492800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 699379200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 719942400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 731433600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 751996800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 762883200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 783446400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 796147200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 814896000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 828201600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 846345600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 859651200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 877795200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 891100800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 909244800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 922550400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 941299200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 954000000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 967305600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 985449600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1004198400, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1017504000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1035648000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1048953600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1067097600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1080403200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1099152000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1111852800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1130601600, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1143907200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1162051200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1174752000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + }, + { + "transition_time": 1193500800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "AEDT" + } + }, + { + "transition_time": 1207411200, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "AEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/australia-perth.json b/crates/zoneinfo/tests/data/australia-perth.json new file mode 100644 index 000000000..f911eec67 --- /dev/null +++ b/crates/zoneinfo/tests/data/australia-perth.json @@ -0,0 +1,161 @@ +{ + "first_record": { + "offset": 27804, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2337925404, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "AWST" + } + }, + { + "transition_time": -1672552800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "AWDT" + } + }, + { + "transition_time": -1665381600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "AWST" + } + }, + { + "transition_time": -883634400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "AWDT" + } + }, + { + "transition_time": -876117600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "AWST" + } + }, + { + "transition_time": -860392800, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "AWDT" + } + }, + { + "transition_time": -844668000, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "AWST" + } + }, + { + "transition_time": 152042400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "AWDT" + } + }, + { + "transition_time": 162928800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "AWST" + } + }, + { + "transition_time": 436298400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "AWDT" + } + }, + { + "transition_time": 447184800, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "AWST" + } + }, + { + "transition_time": 690314400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "AWDT" + } + }, + { + "transition_time": 699386400, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "AWST" + } + }, + { + "transition_time": 1165082400, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "AWDT" + } + }, + { + "transition_time": 1174759200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "AWST" + } + }, + { + "transition_time": 1193508000, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "AWDT" + } + }, + { + "transition_time": 1206813600, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "AWST" + } + }, + { + "transition_time": 1224957600, + "record": { + "offset": 32400, + "is_dst": true, + "abbr": "AWDT" + } + }, + { + "transition_time": 1238263200, + "record": { + "offset": 28800, + "is_dst": false, + "abbr": "AWST" + } + } + ] +} \ No newline at end of file diff --git a/zoneinfo/tests/data/australia-sydney.json b/crates/zoneinfo/tests/data/australia-sydney.json similarity index 100% rename from zoneinfo/tests/data/australia-sydney.json rename to crates/zoneinfo/tests/data/australia-sydney.json diff --git a/crates/zoneinfo/tests/data/europe-amsterdam.json b/crates/zoneinfo/tests/data/europe-amsterdam.json new file mode 100644 index 000000000..34c048ce9 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-amsterdam.json @@ -0,0 +1,825 @@ +{ + "first_record": { + "offset": 1050, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840141850, + "record": { + "offset": 1050, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -2450995200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1740355200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1693702800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680483600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1663455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1650150000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1632006000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1618700400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1613826000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1604278800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1585530000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1574038800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1552266000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1539997200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1520557200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1507510800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1490576400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1473642000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1459126800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1444006800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1427677200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1411952400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1396227600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1379293200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1364778000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1348448400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1333328400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1316394000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1301263200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1284328800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1269813600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1253484000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1238364000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1221429600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1206914400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1191189600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1175464800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1160344800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1143410400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1127685600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1111960800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1096840800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1080511200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1063576800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1049061600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1033336800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1017612000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1002492000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -986162400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -969228000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -950479200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -942012000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -934668000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -798073200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766623600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -745455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733273200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 228877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 243997200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 260326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 276051600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 291776400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 307501200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-andorra.json b/crates/zoneinfo/tests/data/europe-andorra.json new file mode 100644 index 000000000..949e13f01 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-andorra.json @@ -0,0 +1,209 @@ +{ + "first_record": { + "offset": 364, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177453164, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -733881600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-astrakhan.json b/crates/zoneinfo/tests/data/europe-astrakhan.json new file mode 100644 index 000000000..8b47b4bb0 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-astrakhan.json @@ -0,0 +1,521 @@ +{ + "first_record": { + "offset": 11532, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1441249932, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": -1247540400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 354916800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 370724400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 386452800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 402260400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 417988800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 433796400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 449611200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 465343200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 481068000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 496792800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 512517600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 528242400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 543967200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 559692000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 575416800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 591141600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 606866400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 622594800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 638319600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 654649200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 670374000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 701820000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 717548400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 733273200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 748998000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 764722800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 780447600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 796172400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 811897200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 828226800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 846370800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 859676400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 877820400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 891126000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 909270000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 922575600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 941324400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 954025200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 972774000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 985474800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1004223600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1017529200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1035673200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1048978800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1067122800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1080428400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1099177200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1111878000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1130626800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1143327600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1162076400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1174777200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1193526000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1206831600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1224975600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1238281200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1256425200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1269730800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1288479600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1301180400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1414274400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1459033200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-athens.json b/crates/zoneinfo/tests/data/europe-athens.json new file mode 100644 index 000000000..923a3eefc --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-athens.json @@ -0,0 +1,449 @@ +{ + "first_record": { + "offset": 5692, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2344642492, + "record": { + "offset": 5692, + "is_dst": false, + "abbr": "AMT" + } + }, + { + "transition_time": -1686101632, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1182996000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1178161200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -906861600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -904878000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844477200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828237600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812422800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -552362400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -541652400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 166485600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 186184800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 198028800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 213753600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 228873600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 244080000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 260323200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 275446800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 291798000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 307407600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 323388000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 338936400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-belgrade.json b/crates/zoneinfo/tests/data/europe-belgrade.json new file mode 100644 index 000000000..7b98f7bbb --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-belgrade.json @@ -0,0 +1,297 @@ +{ + "first_record": { + "offset": 4920, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713915320, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -905824800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -777942000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766623600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-berlin.json b/crates/zoneinfo/tests/data/europe-berlin.json new file mode 100644 index 000000000..0c79bdd56 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-berlin.json @@ -0,0 +1,489 @@ +{ + "first_record": { + "offset": 3208, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2422054408, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1693706400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680483600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1663455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1650150000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1632006000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1618700400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -938905200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -776563200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CEMT" + } + }, + { + "transition_time": -765936000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -761180400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -748479600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733273200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -717631200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -714610800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CEMT" + } + }, + { + "transition_time": -710380800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -701910000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -684975600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -670460400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -654130800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -639010800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-bratislava.json b/crates/zoneinfo/tests/data/europe-bratislava.json new file mode 100644 index 000000000..a6c5b44d2 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-bratislava.json @@ -0,0 +1,497 @@ +{ + "first_record": { + "offset": 3464, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3786829064, + "record": { + "offset": 3464, + "is_dst": false, + "abbr": "PMT" + } + }, + { + "transition_time": -2469401864, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1693706400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680483600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1663455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1650150000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1632006000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1618700400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -938905200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -765327600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -746578800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733359600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -728517600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "GMT" + } + }, + { + "transition_time": -721260000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -716425200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -701910000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -684975600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -670460400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -654217200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -639010800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 291776400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 307501200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-brussels.json b/crates/zoneinfo/tests/data/europe-brussels.json new file mode 100644 index 000000000..34c048ce9 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-brussels.json @@ -0,0 +1,825 @@ +{ + "first_record": { + "offset": 1050, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840141850, + "record": { + "offset": 1050, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -2450995200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1740355200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1693702800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680483600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1663455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1650150000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1632006000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1618700400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1613826000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1604278800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1585530000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1574038800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1552266000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1539997200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1520557200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1507510800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1490576400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1473642000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1459126800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1444006800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1427677200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1411952400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1396227600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1379293200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1364778000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1348448400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1333328400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1316394000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1301263200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1284328800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1269813600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1253484000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1238364000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1221429600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1206914400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1191189600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1175464800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1160344800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1143410400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1127685600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1111960800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1096840800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1080511200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1063576800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1049061600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1033336800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1017612000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1002492000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -986162400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -969228000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -950479200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -942012000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -934668000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -798073200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766623600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -745455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733273200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 228877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 243997200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 260326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 276051600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 291776400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 307501200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-bucharest.json b/crates/zoneinfo/tests/data/europe-bucharest.json new file mode 100644 index 000000000..c4f88bba6 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-bucharest.json @@ -0,0 +1,449 @@ +{ + "first_record": { + "offset": 6264, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2469404664, + "record": { + "offset": 6264, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -1213148664, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1187056800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1175479200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1159754400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1144029600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1127700000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1111975200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1096250400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1080525600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1064800800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1049076000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1033351200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1017626400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1001901600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -986176800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -970452000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -954727200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 296604000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 307486800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 323816400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 338940000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 354672000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 370396800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 386121600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 401846400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 417571200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 433296000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 449020800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 465350400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 481075200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 496800000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 512524800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 528249600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 543974400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 559699200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 575424000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 591148800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 606873600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 622598400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 638323200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 654652800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 670370400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686095200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701820000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717544800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733269600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 748994400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764719200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780440400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796168800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811890000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828223200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 846363600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 859683600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-budapest.json b/crates/zoneinfo/tests/data/europe-budapest.json new file mode 100644 index 000000000..3ad375524 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-budapest.json @@ -0,0 +1,553 @@ +{ + "first_record": { + "offset": 4580, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2498260580, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1693706400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680483600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1663455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1650150000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1632006000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1618700400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1600470000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1587250800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1569711600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1555196400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -906775200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -778471200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -762656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -749689200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733276800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -717634800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -701910000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -686185200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -670460400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -654130800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -639010800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -492656400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -481168800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -461199600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -449708400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -428540400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -418258800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -397090800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -386809200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323823600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338943600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354668400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370393200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386118000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401842800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417567600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433292400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-busingen.json b/crates/zoneinfo/tests/data/europe-busingen.json new file mode 100644 index 000000000..5ae0b4f53 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-busingen.json @@ -0,0 +1,305 @@ +{ + "first_record": { + "offset": 2048, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3675198848, + "record": { + "offset": 1786, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -2385246586, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -904435200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -891129600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -872985600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -859680000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-chisinau.json b/crates/zoneinfo/tests/data/europe-chisinau.json new file mode 100644 index 000000000..8651a7aa7 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-chisinau.json @@ -0,0 +1,889 @@ +{ + "first_record": { + "offset": 6920, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840147720, + "record": { + "offset": 6900, + "is_dst": false, + "abbr": "CMT" + } + }, + { + "transition_time": -1637114100, + "record": { + "offset": 6264, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -1213148664, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1187056800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1175479200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1159754400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1144029600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1127700000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1111975200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1096250400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1080525600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1064800800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1049076000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1033351200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1017626400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1001901600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -986176800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -970452000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -954727200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -927165600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -898138800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -800157600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 354920400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 370728000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 386456400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 402264000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 417992400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 433800000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 449614800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 465346800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 481071600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 496796400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 512521200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 528246000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 543970800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 559695600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 575420400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 591145200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 606870000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 622594800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 638319600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 641944800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 654652800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 670377600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686102400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701820000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717541200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733269600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 748990800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764719200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780440400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796168800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811890000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828223200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 846363600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 859680000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 877824000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 891129600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 909273600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 922579200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 941328000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 954028800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 972777600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 985478400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1004227200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1017532800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1035676800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1048982400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1067126400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1080432000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1099180800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1111881600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1130630400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1143331200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1162080000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1174780800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1193529600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1206835200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1224979200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1238284800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1256428800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1269734400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1288483200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1301184000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1319932800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1332633600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1351382400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1364688000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1382832000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1396137600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1414281600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1427587200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1445731200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1459036800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1477785600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1490486400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1509235200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1521936000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1540684800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1553990400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1572134400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1585440000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1603584000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1616889600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1635638400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1648342800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-copenhagen.json b/crates/zoneinfo/tests/data/europe-copenhagen.json new file mode 100644 index 000000000..0c79bdd56 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-copenhagen.json @@ -0,0 +1,489 @@ +{ + "first_record": { + "offset": 3208, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2422054408, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1693706400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680483600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1663455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1650150000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1632006000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1618700400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -938905200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -776563200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CEMT" + } + }, + { + "transition_time": -765936000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -761180400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -748479600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733273200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -717631200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -714610800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CEMT" + } + }, + { + "transition_time": -710380800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -701910000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -684975600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -670460400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -654130800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -639010800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/zoneinfo/tests/data/europe-dublin.json b/crates/zoneinfo/tests/data/europe-dublin.json similarity index 100% rename from zoneinfo/tests/data/europe-dublin.json rename to crates/zoneinfo/tests/data/europe-dublin.json diff --git a/crates/zoneinfo/tests/data/europe-gibraltar.json b/crates/zoneinfo/tests/data/europe-gibraltar.json new file mode 100644 index 000000000..974b3780d --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-gibraltar.json @@ -0,0 +1,929 @@ +{ + "first_record": { + "offset": -1284, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2821649916, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1691964000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1680472800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1664143200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1650146400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1633903200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1617487200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1601848800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1586037600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1570399200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1552168800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1538344800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1522533600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1507500000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1490565600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1473631200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1460930400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1442786400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1428876000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1410732000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1396216800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1379282400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1364767200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1348437600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1333317600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1315778400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1301263200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1284328800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1269813600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1253484000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1238364000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1221429600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1206914400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1189980000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1175464800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1159135200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1143410400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1126476000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1111960800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1095631200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1080511200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1063576800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1049061600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1032127200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1017612000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1001282400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -986162400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -969228000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -950479200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -942012000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -904518000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -896050800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -875487600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -864601200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -844038000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -832546800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -812588400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -798073200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -772066800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -764805600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -748476000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -733356000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -719445600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -717030000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -706748400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -699487200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -687996000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -668037600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -654732000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -636588000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -622072800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -605743200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -590623200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -574293600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -558568800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -542239200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -527119200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -512604000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -496274400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -481154400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -464220000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -449704800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -432165600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -417650400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -401320800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/zoneinfo/tests/data/europe-london.json b/crates/zoneinfo/tests/data/europe-guernsey.json similarity index 100% rename from zoneinfo/tests/data/europe-london.json rename to crates/zoneinfo/tests/data/europe-guernsey.json diff --git a/crates/zoneinfo/tests/data/europe-helsinki.json b/crates/zoneinfo/tests/data/europe-helsinki.json new file mode 100644 index 000000000..5f617ee91 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-helsinki.json @@ -0,0 +1,289 @@ +{ + "first_record": { + "offset": 5989, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2890258789, + "record": { + "offset": 5989, + "is_dst": false, + "abbr": "HMT" + } + }, + { + "transition_time": -1535938789, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -875671200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -859773600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 354672000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 370396800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 386121600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 401846400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-isle_of_man.json b/crates/zoneinfo/tests/data/europe-isle_of_man.json new file mode 100644 index 000000000..216986948 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-isle_of_man.json @@ -0,0 +1,1281 @@ +{ + "first_record": { + "offset": -75, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3852662325, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1691964000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1680472800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1664143200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1650146400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1633903200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1617487200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1601848800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1586037600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1570399200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1552168800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1538344800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1522533600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1507500000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1490565600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1473631200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1460930400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1442786400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1428876000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1410732000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1396216800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1379282400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1364767200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1348437600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1333317600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1315778400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1301263200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1284328800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1269813600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1253484000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1238364000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1221429600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1206914400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1189980000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1175464800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1159135200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1143410400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1126476000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1111960800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1095631200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1080511200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1063576800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1049061600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1032127200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1017612000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1001282400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -986162400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -969228000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -950479200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -942012000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -904518000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -896050800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -875487600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -864601200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -844038000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -832546800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -812588400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -798073200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -772066800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -764805600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -748476000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -733356000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -719445600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -717030000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -706748400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -699487200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -687996000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -668037600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -654732000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -636588000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -622072800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -605743200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -590623200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -574293600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -558568800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -542239200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -527119200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -512604000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -496274400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -481154400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -464220000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -449704800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -432165600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -417650400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -401320800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -386200800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -369266400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -354751200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -337816800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -323301600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -306972000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -291852000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -276732000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -257983200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -245282400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -226533600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -213228000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -195084000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -182383200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -163634400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -150933600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -132184800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -119484000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -100735200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -88034400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -68680800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -59004000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -37242000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 57722400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 69818400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 89172000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 101268000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 120621600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 132717600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 152071200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 164167200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 183520800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 196221600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 214970400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 227671200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 246420000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 259120800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 278474400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 290570400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 309924000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 322020000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 341373600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 372819600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 404269200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 435718800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 467773200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 499222800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 530672400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 562122000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 593571600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 625626000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 657075600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 688525200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 719974800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 751424400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 782874000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 814323600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-istanbul.json b/crates/zoneinfo/tests/data/europe-istanbul.json new file mode 100644 index 000000000..af7a8b41a --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-istanbul.json @@ -0,0 +1,929 @@ +{ + "first_record": { + "offset": 6952, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840147752, + "record": { + "offset": 7016, + "is_dst": false, + "abbr": "IMT" + } + }, + { + "transition_time": -1869875816, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1693706400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1680490800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1570413600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1552186800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1538359200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1522551600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1507514400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1490583600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1440208800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1428030000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1409709600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1396494000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -931053600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -922676400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -917834400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -892436400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -875844000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -764737200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -744343200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -733806000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -716436000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -701924400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -684986400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -670474800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -654141600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -639025200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -622087200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -606970800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -590032800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -575521200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -235620000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -194842800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -177732000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -165726000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 107910000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 121215600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 133920000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 152665200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 164678400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 184114800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 196214400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 215564400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 228873600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 245804400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 260323200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 267915600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 428454000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 433893600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 468111600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 482799600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 496710000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 512521200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 528246000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 543970800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 559695600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 575420400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 591145200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 606870000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 622594800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 638319600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 654649200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 670374000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686098800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701823600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717548400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733273200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 748998000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764118000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780447600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796172400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811897200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828226800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 846370800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 859676400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 877820400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 891126000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 909270000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 922575600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 941324400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 954025200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 972774000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 985474800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1004223600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1017529200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1035673200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1048978800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1067122800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1080428400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1099177200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1111878000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1130626800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1143327600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1162076400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1174784400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1193533200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1206838800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1224982800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1238288400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1256432400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1269738000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1288486800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1301274000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1319936400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1332637200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1351386000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1364691600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1382835600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1396227600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1414285200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1427590800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1446944400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1459040400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1473195600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-jersey.json b/crates/zoneinfo/tests/data/europe-jersey.json new file mode 100644 index 000000000..216986948 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-jersey.json @@ -0,0 +1,1281 @@ +{ + "first_record": { + "offset": -75, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3852662325, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1691964000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1680472800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1664143200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1650146400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1633903200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1617487200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1601848800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1586037600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1570399200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1552168800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1538344800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1522533600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1507500000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1490565600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1473631200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1460930400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1442786400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1428876000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1410732000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1396216800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1379282400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1364767200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1348437600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1333317600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1315778400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1301263200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1284328800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1269813600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1253484000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1238364000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1221429600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1206914400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1189980000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1175464800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1159135200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1143410400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1126476000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1111960800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1095631200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1080511200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1063576800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1049061600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1032127200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1017612000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1001282400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -986162400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -969228000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -950479200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -942012000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -904518000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -896050800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -875487600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -864601200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -844038000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -832546800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -812588400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -798073200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -772066800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -764805600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -748476000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -733356000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -719445600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -717030000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -706748400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -699487200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -687996000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -668037600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -654732000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -636588000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -622072800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -605743200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -590623200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -574293600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -558568800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -542239200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -527119200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -512604000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -496274400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -481154400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -464220000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -449704800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -432165600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -417650400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -401320800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -386200800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -369266400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -354751200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -337816800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -323301600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -306972000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -291852000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -276732000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -257983200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -245282400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -226533600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -213228000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -195084000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -182383200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -163634400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -150933600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -132184800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -119484000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -100735200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -88034400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -68680800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -59004000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -37242000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 57722400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 69818400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 89172000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 101268000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 120621600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 132717600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 152071200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 164167200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 183520800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 196221600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 214970400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 227671200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 246420000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 259120800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 278474400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 290570400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 309924000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 322020000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 341373600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 372819600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 404269200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 435718800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 467773200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 499222800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 530672400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 562122000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 593571600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 625626000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 657075600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 688525200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 719974800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 751424400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 782874000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 814323600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-kaliningrad.json b/crates/zoneinfo/tests/data/europe-kaliningrad.json new file mode 100644 index 000000000..cf257e56c --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-kaliningrad.json @@ -0,0 +1,649 @@ +{ + "first_record": { + "offset": 4920, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2422056120, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1693706400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680483600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1663455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1650150000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1632006000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1618700400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -938905200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -780372000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -778730400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -762663600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -749095200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 354920400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 370728000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 386456400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 402264000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 417992400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 433800000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 449614800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 465346800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 481071600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 496796400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 512521200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 528246000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 543970800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 559695600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 575420400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 591145200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 606870000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 622598400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 638323200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 654652800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 670377600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686102400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701827200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717552000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733276800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 749001600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764726400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780451200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796176000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811900800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828230400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 846374400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 859680000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 877824000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 891129600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 909273600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 922579200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 941328000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 954028800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 972777600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 985478400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1004227200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1017532800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1035676800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1048982400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1067126400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1080432000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1099180800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1111881600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1130630400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1143331200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1162080000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1174780800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1193529600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1206835200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1224979200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1238284800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1256428800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1269734400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1288483200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1301184000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1414278000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-kiev.json b/crates/zoneinfo/tests/data/europe-kiev.json new file mode 100644 index 000000000..72330c1ad --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-kiev.json @@ -0,0 +1,321 @@ +{ + "first_record": { + "offset": 7324, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840148124, + "record": { + "offset": 7324, + "is_dst": false, + "abbr": "KMT" + } + }, + { + "transition_time": -1441159324, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1247536800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": -892522800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -825382800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 354920400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 370728000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 386456400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 402264000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 417992400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 433800000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 449614800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 465346800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 481071600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 496796400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 512521200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 528246000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 543970800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 559695600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 575420400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 591145200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 606870000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 622594800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 638319600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 646783200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686102400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701827200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717552000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733276800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 749001600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764726400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780451200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796176000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811900800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828230400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 846378000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-kirov.json b/crates/zoneinfo/tests/data/europe-kirov.json new file mode 100644 index 000000000..0dba1c375 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-kirov.json @@ -0,0 +1,513 @@ +{ + "first_record": { + "offset": 11928, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1593820800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": -1247540400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 354916800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 370724400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 386452800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 402260400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 417988800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 433796400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 449611200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 465343200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 481068000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 496792800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 512517600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 528242400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 543967200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 559692000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 575416800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 591141600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 606866400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 622594800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 638319600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 654649200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 670374000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 701820000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 717548400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 733273200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 748998000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 764722800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 780447600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 796172400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 811897200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 828226800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 846370800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 859676400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 877820400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 891126000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 909270000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 922575600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 941324400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 954025200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 972774000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 985474800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1004223600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1017529200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1035673200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1048978800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1067122800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1080428400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1099177200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1111878000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1130626800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1143327600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1162076400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1174777200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1193526000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1206831600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1224975600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1238281200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1256425200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1269730800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1288479600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1301180400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1414274400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-kyiv.json b/crates/zoneinfo/tests/data/europe-kyiv.json new file mode 100644 index 000000000..72330c1ad --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-kyiv.json @@ -0,0 +1,321 @@ +{ + "first_record": { + "offset": 7324, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840148124, + "record": { + "offset": 7324, + "is_dst": false, + "abbr": "KMT" + } + }, + { + "transition_time": -1441159324, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1247536800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": -892522800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -825382800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 354920400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 370728000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 386456400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 402264000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 417992400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 433800000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 449614800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 465346800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 481071600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 496796400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 512521200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 528246000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 543970800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 559695600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 575420400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 591145200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 606870000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 622594800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 638319600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 646783200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686102400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701827200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717552000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733276800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 749001600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764726400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780451200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796176000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811900800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828230400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 846378000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-lisbon.json b/crates/zoneinfo/tests/data/europe-lisbon.json new file mode 100644 index 000000000..a2d0000dd --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-lisbon.json @@ -0,0 +1,1145 @@ +{ + "first_record": { + "offset": -2205, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713908195, + "record": { + "offset": -2205, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1830384000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1689555600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1677801600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1667433600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1647738000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1635897600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1616202000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1604361600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1584666000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1572739200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1553043600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1541203200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1521507600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1442451600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1427677200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1379293200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1364778000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1348448400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1333328400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1316394000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1301274000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1284339600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1269824400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1221440400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1206925200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1191200400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1175475600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1127696400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1111971600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1096851600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1080522000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1063587600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1049072400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1033347600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1017622800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1002502800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -986173200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -969238800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -950490000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -942022800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -922496400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -906944400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -891133200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -877309200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -873684000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "WEMT" + } + }, + { + "transition_time": -864007200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -857955600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -845859600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -842839200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "WEMT" + } + }, + { + "transition_time": -831348000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -825901200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -814410000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -810784800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "WEMT" + } + }, + { + "transition_time": -799898400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -794451600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -782960400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -779335200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "WEMT" + } + }, + { + "transition_time": -768448800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -763002000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -749091600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -733366800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -717631200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -701906400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -686181600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -670456800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -654732000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -639007200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -623282400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -607557600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -591832800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -575503200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -559778400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -544053600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -528328800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -512604000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -496879200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -481154400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -465429600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -449704800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -433980000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -417650400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -401925600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -386200800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -370476000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -354751200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -339026400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -323301600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -307576800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -291852000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -276127200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -260402400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -244677600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -228348000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -212623200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -196898400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -181173600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -165448800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -149724000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -133999200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -118274400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -102549600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 212544000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 228268800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 243993600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 260326800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 276051600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 291776400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 307501200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 354672000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 370396800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 386121600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 401846400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 417571200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 433296000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 449020800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 465350400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 481075200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 496800000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-ljubljana.json b/crates/zoneinfo/tests/data/europe-ljubljana.json new file mode 100644 index 000000000..7b98f7bbb --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-ljubljana.json @@ -0,0 +1,297 @@ +{ + "first_record": { + "offset": 4920, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713915320, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -905824800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -777942000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766623600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-london.json b/crates/zoneinfo/tests/data/europe-london.json new file mode 100644 index 000000000..216986948 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-london.json @@ -0,0 +1,1281 @@ +{ + "first_record": { + "offset": -75, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3852662325, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1691964000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1680472800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1664143200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1650146400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1633903200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1617487200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1601848800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1586037600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1570399200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1552168800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1538344800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1522533600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1507500000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1490565600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1473631200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1460930400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1442786400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1428876000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1410732000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1396216800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1379282400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1364767200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1348437600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1333317600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1315778400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1301263200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1284328800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1269813600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1253484000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1238364000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1221429600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1206914400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1189980000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1175464800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1159135200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1143410400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1126476000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1111960800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1095631200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1080511200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1063576800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1049061600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1032127200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -1017612000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -1001282400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -986162400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -969228000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -950479200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -942012000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -904518000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -896050800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -875487600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -864601200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -844038000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -832546800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -812588400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -798073200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -772066800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -764805600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -748476000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -733356000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -719445600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -717030000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "BDST" + } + }, + { + "transition_time": -706748400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -699487200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -687996000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -668037600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -654732000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -636588000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -622072800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -605743200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -590623200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -574293600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -558568800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -542239200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -527119200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -512604000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -496274400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -481154400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -464220000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -449704800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -432165600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -417650400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -401320800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -386200800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -369266400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -354751200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -337816800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -323301600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -306972000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -291852000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -276732000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -257983200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -245282400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -226533600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -213228000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -195084000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -182383200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -163634400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -150933600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -132184800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -119484000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -100735200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -88034400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -68680800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": -59004000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": -37242000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "BST" + } + }, + { + "transition_time": 57722400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 69818400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 89172000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 101268000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 120621600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 132717600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 152071200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 164167200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 183520800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 196221600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 214970400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 227671200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 246420000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 259120800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 278474400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 290570400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 309924000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 322020000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 341373600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 372819600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 404269200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 435718800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 467773200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 499222800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 530672400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 562122000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 593571600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 625626000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 657075600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 688525200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 719974800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 751424400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 782874000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + }, + { + "transition_time": 814323600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "GMT" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "BST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-luxembourg.json b/crates/zoneinfo/tests/data/europe-luxembourg.json new file mode 100644 index 000000000..34c048ce9 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-luxembourg.json @@ -0,0 +1,825 @@ +{ + "first_record": { + "offset": 1050, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840141850, + "record": { + "offset": 1050, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -2450995200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1740355200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1693702800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680483600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1663455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1650150000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1632006000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1618700400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1613826000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1604278800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1585530000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1574038800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1552266000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1539997200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1520557200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1507510800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1490576400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1473642000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1459126800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1444006800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1427677200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1411952400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1396227600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1379293200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1364778000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1348448400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1333328400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1316394000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1301263200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1284328800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1269813600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1253484000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1238364000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1221429600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1206914400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1191189600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1175464800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1160344800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1143410400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1127685600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1111960800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1096840800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1080511200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1063576800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1049061600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1033336800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1017612000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1002492000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -986162400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -969228000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -950479200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -942012000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -934668000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -798073200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766623600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -745455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733273200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 228877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 243997200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 260326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 276051600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 291776400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 307501200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-madrid.json b/crates/zoneinfo/tests/data/europe-madrid.json new file mode 100644 index 000000000..17a181842 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-madrid.json @@ -0,0 +1,641 @@ +{ + "first_record": { + "offset": -884, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177452800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1631926800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1616889600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1601168400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1585353600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1442451600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1427673600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1379293200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1364774400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1348448400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1333324800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1316390400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1301270400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1284339600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1269820800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1026954000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1017619200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1001898000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -999482400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "WEMT" + } + }, + { + "transition_time": -986090400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -954115200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -940208400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -873079200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -862621200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -842839200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828320400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -811389600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796870800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -779940000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -765421200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -748490400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733971600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -652327200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -639018000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 135122400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 150246000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 166572000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 181695600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 196812000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 212540400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 228866400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 243990000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 260326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 276051600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 291776400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 307501200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-malta.json b/crates/zoneinfo/tests/data/europe-malta.json new file mode 100644 index 000000000..7c6fb9637 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-malta.json @@ -0,0 +1,697 @@ +{ + "first_record": { + "offset": 3484, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2403478684, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1690765200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680487200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1664758800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1648951200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1635123600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1616896800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1604278800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1585533600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1571014800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1555293600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -932432400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812588400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -798073200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766717200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -750898800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733359600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -719456400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -701917200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -689209200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -670460400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -114051600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -103168800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -81997200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -71715600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -50547600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -40266000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -18493200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -8211600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 12956400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 23238000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 43801200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 54687600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 75855600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 86742000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 102380400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 118105200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 135730800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 148518000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 167187600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 180489600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 198637200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 211939200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 230086800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 243388800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 261536400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 274838400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 292986000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 306288000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323312400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338342400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-mariehamn.json b/crates/zoneinfo/tests/data/europe-mariehamn.json new file mode 100644 index 000000000..5f617ee91 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-mariehamn.json @@ -0,0 +1,289 @@ +{ + "first_record": { + "offset": 5989, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2890258789, + "record": { + "offset": 5989, + "is_dst": false, + "abbr": "HMT" + } + }, + { + "transition_time": -1535938789, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -875671200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -859773600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 354672000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 370396800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 386121600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 401846400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-minsk.json b/crates/zoneinfo/tests/data/europe-minsk.json new file mode 100644 index 000000000..30eabb869 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-minsk.json @@ -0,0 +1,553 @@ +{ + "first_record": { + "offset": 6616, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840147416, + "record": { + "offset": 6600, + "is_dst": false, + "abbr": "MMT" + } + }, + { + "transition_time": -1441158600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1247536800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": -899780400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -804650400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 354920400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 370728000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 386456400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 402264000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 417992400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 433800000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 449614800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 465346800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 481071600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 496796400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 512521200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 528246000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 543970800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 559695600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 575420400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 591145200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 606870000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 622594800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 670374000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686102400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701827200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717552000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733276800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 749001600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764726400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780451200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796176000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811900800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828230400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 846374400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 859680000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 877824000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 891129600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 909273600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 922579200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 941328000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 954028800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 972777600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 985478400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1004227200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1017532800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1035676800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1048982400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1067126400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1080432000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1099180800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1111881600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1130630400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1143331200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1162080000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1174780800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1193529600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1206835200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1224979200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1238284800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1256428800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1269734400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1288483200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1301184000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + } + ] +} \ No newline at end of file diff --git a/zoneinfo/tests/data/europe-paris.json b/crates/zoneinfo/tests/data/europe-monaco.json similarity index 100% rename from zoneinfo/tests/data/europe-paris.json rename to crates/zoneinfo/tests/data/europe-monaco.json diff --git a/crates/zoneinfo/tests/data/europe-moscow.json b/crates/zoneinfo/tests/data/europe-moscow.json new file mode 100644 index 000000000..883d10d85 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-moscow.json @@ -0,0 +1,633 @@ +{ + "first_record": { + "offset": 9017, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840149817, + "record": { + "offset": 9017, + "is_dst": false, + "abbr": "MMT" + } + }, + { + "transition_time": -1688265017, + "record": { + "offset": 9079, + "is_dst": false, + "abbr": "MMT" + } + }, + { + "transition_time": -1656819079, + "record": { + "offset": 12679, + "is_dst": true, + "abbr": "MST" + } + }, + { + "transition_time": -1641353479, + "record": { + "offset": 9079, + "is_dst": false, + "abbr": "MMT" + } + }, + { + "transition_time": -1627965079, + "record": { + "offset": 16279, + "is_dst": true, + "abbr": "MDST" + } + }, + { + "transition_time": -1618716679, + "record": { + "offset": 12679, + "is_dst": true, + "abbr": "MST" + } + }, + { + "transition_time": -1596429079, + "record": { + "offset": 16279, + "is_dst": true, + "abbr": "MDST" + } + }, + { + "transition_time": -1593820800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": -1589860800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": -1542427200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": -1539493200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": -1525323600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": -1522728000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": -1491188400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1247536800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 354920400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 370728000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 386456400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 402264000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 417992400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 433800000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 449614800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 465346800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 481071600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 496796400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 512521200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 528246000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 543970800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 559695600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 575420400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 591145200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 606870000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 622594800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 638319600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 654649200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 670374000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686102400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 695779200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 701823600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 717548400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 733273200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 748998000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 764722800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 780447600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 796172400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 811897200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 828226800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 846370800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 859676400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 877820400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 891126000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 909270000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 922575600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 941324400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 954025200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 972774000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 985474800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1004223600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1017529200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1035673200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1048978800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1067122800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1080428400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1099177200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1111878000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1130626800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1143327600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1162076400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1174777200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1193526000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1206831600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1224975600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1238281200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1256425200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1269730800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1288479600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1301180400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1414274400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-oslo.json b/crates/zoneinfo/tests/data/europe-oslo.json new file mode 100644 index 000000000..0c79bdd56 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-oslo.json @@ -0,0 +1,489 @@ +{ + "first_record": { + "offset": 3208, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2422054408, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1693706400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680483600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1663455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1650150000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1632006000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1618700400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -938905200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -776563200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CEMT" + } + }, + { + "transition_time": -765936000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -761180400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -748479600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733273200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -717631200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -714610800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CEMT" + } + }, + { + "transition_time": -710380800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -701910000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -684975600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -670460400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -654130800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -639010800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-paris.json b/crates/zoneinfo/tests/data/europe-paris.json new file mode 100644 index 000000000..f0dee3705 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-paris.json @@ -0,0 +1,817 @@ +{ + "first_record": { + "offset": 561, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2486592561, + "record": { + "offset": 561, + "is_dst": false, + "abbr": "PMT" + } + }, + { + "transition_time": -1855958961, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1689814800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1680397200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1665363600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1648342800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1635123600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1616893200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1604278800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1585443600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1574038800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1552266000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1539997200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1520557200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1507510800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1490576400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1470618000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1459126800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1444006800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1427677200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1411952400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1396227600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1379293200, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1364778000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1348448400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1333328400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1316394000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1301274000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1284339600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1269824400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1253494800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1238374800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1221440400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1206925200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1191200400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1175475600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1160355600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1143421200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1127696400, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1111971600, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1096851600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1080522000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1063587600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1049072400, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1033347600, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -1017622800, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -1002502800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -986173200, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -969238800, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -950490000, + "record": { + "offset": 0, + "is_dst": false, + "abbr": "WET" + } + }, + { + "transition_time": -942012000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -932436000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -800071200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "WEMT" + } + }, + { + "transition_time": -796266000, + "record": { + "offset": 3600, + "is_dst": true, + "abbr": "WEST" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "WEMT" + } + }, + { + "transition_time": -766623600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 196819200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 212540400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 228877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 243997200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 260326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 276051600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 291776400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 307501200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-podgorica.json b/crates/zoneinfo/tests/data/europe-podgorica.json new file mode 100644 index 000000000..7b98f7bbb --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-podgorica.json @@ -0,0 +1,297 @@ +{ + "first_record": { + "offset": 4920, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713915320, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -905824800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -777942000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766623600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-prague.json b/crates/zoneinfo/tests/data/europe-prague.json new file mode 100644 index 000000000..a6c5b44d2 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-prague.json @@ -0,0 +1,497 @@ +{ + "first_record": { + "offset": 3464, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3786829064, + "record": { + "offset": 3464, + "is_dst": false, + "abbr": "PMT" + } + }, + { + "transition_time": -2469401864, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1693706400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680483600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1663455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1650150000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1632006000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1618700400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -938905200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -765327600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -746578800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733359600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -728517600, + "record": { + "offset": 0, + "is_dst": true, + "abbr": "GMT" + } + }, + { + "transition_time": -721260000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -716425200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -701910000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -684975600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -670460400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -654217200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -639010800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 291776400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 307501200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/zoneinfo/tests/data/europe-riga.json b/crates/zoneinfo/tests/data/europe-riga.json similarity index 100% rename from zoneinfo/tests/data/europe-riga.json rename to crates/zoneinfo/tests/data/europe-riga.json diff --git a/crates/zoneinfo/tests/data/europe-rome.json b/crates/zoneinfo/tests/data/europe-rome.json new file mode 100644 index 000000000..02c47b356 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-rome.json @@ -0,0 +1,705 @@ +{ + "first_record": { + "offset": 2996, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3252098996, + "record": { + "offset": 2996, + "is_dst": false, + "abbr": "RMT" + } + }, + { + "transition_time": -2403565200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1690765200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680487200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1664758800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1648951200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1635123600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1616896800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1604278800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1585533600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1571014800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1555293600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -932432400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -798073200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766717200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -750898800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733359600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -719456400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -701917200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -689209200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -670460400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -114051600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -103168800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -81997200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -71715600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -50547600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -40266000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -18493200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -8211600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 12956400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 23238000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 43801200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 54687600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 75855600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 86742000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 107910000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 118191600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 138754800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 149641200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 170809200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 181090800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 202258800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 212540400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 233103600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 243990000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 265158000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 276044400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 296607600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 307494000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-samara.json b/crates/zoneinfo/tests/data/europe-samara.json new file mode 100644 index 000000000..5e5f655bc --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-samara.json @@ -0,0 +1,521 @@ +{ + "first_record": { + "offset": 12020, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1593820800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": -1247540400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 354916800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 370724400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 386452800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 402260400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 417988800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 433796400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 449611200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 465343200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 481068000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 496792800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 512517600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 528242400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 543967200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 559692000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 575416800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 591141600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 606866400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 622594800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 638319600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 654649200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 670374000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "+03" + } + }, + { + "transition_time": 686102400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 687916800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 701820000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 717544800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 733269600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 748994400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 764719200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 780444000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 796168800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 811893600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 828223200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 846367200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 859672800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 877816800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 891122400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 909266400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 922572000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 941320800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 954021600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 972770400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 985471200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1004220000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1017525600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1035669600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1048975200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1067119200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1080424800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1099173600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1111874400, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1130623200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1143324000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1162072800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1174773600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1193522400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1206828000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1224972000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1238277600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1256421600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1269727200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1288479600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1301180400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-san_marino.json b/crates/zoneinfo/tests/data/europe-san_marino.json new file mode 100644 index 000000000..02c47b356 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-san_marino.json @@ -0,0 +1,705 @@ +{ + "first_record": { + "offset": 2996, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3252098996, + "record": { + "offset": 2996, + "is_dst": false, + "abbr": "RMT" + } + }, + { + "transition_time": -2403565200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1690765200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680487200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1664758800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1648951200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1635123600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1616896800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1604278800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1585533600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1571014800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1555293600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -932432400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -798073200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766717200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -750898800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733359600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -719456400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -701917200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -689209200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -670460400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -114051600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -103168800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -81997200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -71715600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -50547600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -40266000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -18493200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -8211600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 12956400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 23238000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 43801200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 54687600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 75855600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 86742000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 107910000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 118191600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 138754800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 149641200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 170809200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 181090800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 202258800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 212540400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 233103600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 243990000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 265158000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 276044400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 296607600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 307494000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-sarajevo.json b/crates/zoneinfo/tests/data/europe-sarajevo.json new file mode 100644 index 000000000..7b98f7bbb --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-sarajevo.json @@ -0,0 +1,297 @@ +{ + "first_record": { + "offset": 4920, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713915320, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -905824800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -777942000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766623600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-saratov.json b/crates/zoneinfo/tests/data/europe-saratov.json new file mode 100644 index 000000000..a5f675fa5 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-saratov.json @@ -0,0 +1,521 @@ +{ + "first_record": { + "offset": 11058, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1593820800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": -1247540400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 354916800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 370724400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 386452800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 402260400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 417988800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 433796400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 449611200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 465343200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 481068000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 496792800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 512517600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 528242400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 543967200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 559692000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 575416800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 591145200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 606870000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 622594800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 638319600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 654649200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 670374000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 701820000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 717548400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 733273200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 748998000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 764722800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 780447600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 796172400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 811897200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 828226800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 846370800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 859676400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 877820400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 891126000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 909270000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 922575600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 941324400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 954025200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 972774000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 985474800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1004223600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1017529200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1035673200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1048978800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1067122800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1080428400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1099177200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1111878000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1130626800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1143327600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1162076400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1174777200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1193526000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1206831600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1224975600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1238281200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1256425200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1269730800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1288479600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1301180400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1414274400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1480806000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-simferopol.json b/crates/zoneinfo/tests/data/europe-simferopol.json new file mode 100644 index 000000000..d184f01d5 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-simferopol.json @@ -0,0 +1,609 @@ +{ + "first_record": { + "offset": 8184, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840148984, + "record": { + "offset": 8160, + "is_dst": false, + "abbr": "SMT" + } + }, + { + "transition_time": -1441160160, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1247536800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": -888894000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -811648800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 354920400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 370728000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 386456400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 402264000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 417992400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 433800000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 449614800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 465346800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 481071600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 496796400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 512521200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 528246000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 543970800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 559695600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 575420400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 591145200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 606870000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 622594800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 646786800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701827200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717552000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733276800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 749001600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764726400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 767739600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 780447600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 796172400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 811897200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 828219600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 846374400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 859683600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 877827600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 891133200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 909277200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 922582800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 941331600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 954032400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 972781200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 985482000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1004230800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1017536400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1035680400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1048986000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1067130000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1080435600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1099184400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1111885200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1130634000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1143334800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1162083600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1174784400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1193533200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1206838800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1224982800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1238288400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1256432400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1269738000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1288486800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1301187600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1319936400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1332637200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1351386000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1364691600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 1382835600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1396137600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1414274400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-skopje.json b/crates/zoneinfo/tests/data/europe-skopje.json new file mode 100644 index 000000000..7b98f7bbb --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-skopje.json @@ -0,0 +1,297 @@ +{ + "first_record": { + "offset": 4920, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713915320, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -905824800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -777942000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766623600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-sofia.json b/crates/zoneinfo/tests/data/europe-sofia.json new file mode 100644 index 000000000..4f3d20952 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-sofia.json @@ -0,0 +1,369 @@ +{ + "first_record": { + "offset": 5596, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840146396, + "record": { + "offset": 7016, + "is_dst": false, + "abbr": "IMT" + } + }, + { + "transition_time": -2369527016, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781048800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 291762000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 307576800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 323816400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 339026400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 355266000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 370393200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 386715600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 401846400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 417571200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 433296000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 449020800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 465350400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 481075200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 496800000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 512524800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 528249600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 543974400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 559699200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 575424000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 591148800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 606873600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 622598400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 638323200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 654652800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 670370400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686091600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701820000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717541200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733269600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 748990800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764719200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780440400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796168800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811890000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828223200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 846363600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 859683600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-stockholm.json b/crates/zoneinfo/tests/data/europe-stockholm.json new file mode 100644 index 000000000..0c79bdd56 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-stockholm.json @@ -0,0 +1,489 @@ +{ + "first_record": { + "offset": 3208, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2422054408, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1693706400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680483600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1663455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1650150000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1632006000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1618700400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -938905200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -776563200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CEMT" + } + }, + { + "transition_time": -765936000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -761180400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -748479600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733273200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -717631200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -714610800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "CEMT" + } + }, + { + "transition_time": -710380800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -701910000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -684975600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -670460400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -654130800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -639010800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-tallinn.json b/crates/zoneinfo/tests/data/europe-tallinn.json new file mode 100644 index 000000000..77f5061d6 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-tallinn.json @@ -0,0 +1,425 @@ +{ + "first_record": { + "offset": 5940, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840146740, + "record": { + "offset": 5940, + "is_dst": false, + "abbr": "TMT" + } + }, + { + "transition_time": -1638322740, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1632006000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1618700400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1593824400, + "record": { + "offset": 5940, + "is_dst": false, + "abbr": "TMT" + } + }, + { + "transition_time": -1535938740, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -927943200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": -892954800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -797652000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 354920400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 370728000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 386456400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 402264000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 417992400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 433800000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 449614800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 465346800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 481071600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 496796400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 512521200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 528246000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 543970800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 559695600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 575420400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 591145200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 606870000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 622598400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 638323200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 654652800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 670377600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686102400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701827200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717552000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733276800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 749001600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764726400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780451200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796176000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811900800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828230400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 846374400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 859680000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 877824000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 891129600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 909277200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 922582800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 941331600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1017536400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-tirane.json b/crates/zoneinfo/tests/data/europe-tirane.json new file mode 100644 index 000000000..dcdca8acf --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-tirane.json @@ -0,0 +1,409 @@ +{ + "first_record": { + "offset": 4760, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1767230360, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -932346000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -843519600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 136854000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 149896800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 168130800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 181432800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 199839600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 213141600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 231894000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 244591200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 263257200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 276040800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 294706800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 307490400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 326156400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 339458400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 357087600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370389600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 389142000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 402444000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 419468400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433807200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449622000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-ulyanovsk.json b/crates/zoneinfo/tests/data/europe-ulyanovsk.json new file mode 100644 index 000000000..18f17940a --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-ulyanovsk.json @@ -0,0 +1,537 @@ +{ + "first_record": { + "offset": 11616, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1593820800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": -1247540400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 354916800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 370724400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 386452800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 402260400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 417988800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 433796400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 449611200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 465343200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 481068000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 496792800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 512517600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 528242400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 543967200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 559692000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 575416800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 591141600, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 606866400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 622594800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 638319600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 654649200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 670374000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "+03" + } + }, + { + "transition_time": 686102400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "+02" + } + }, + { + "transition_time": 695779200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 701823600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 717548400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 733273200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 748998000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 764722800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 780447600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 796172400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 811897200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 828226800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 846370800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 859676400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 877820400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 891126000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 909270000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 922575600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 941324400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 954025200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 972774000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 985474800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1004223600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1017529200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1035673200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1048978800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1067122800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1080428400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1099177200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1111878000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1130626800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1143327600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1162076400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1174777200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1193526000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1206831600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1224975600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1238281200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1256425200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1269730800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "+04" + } + }, + { + "transition_time": 1288479600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1301180400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1414274400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": 1459033200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-vaduz.json b/crates/zoneinfo/tests/data/europe-vaduz.json new file mode 100644 index 000000000..5ae0b4f53 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-vaduz.json @@ -0,0 +1,305 @@ +{ + "first_record": { + "offset": 2048, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3675198848, + "record": { + "offset": 1786, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -2385246586, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -904435200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -891129600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -872985600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -859680000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-vatican.json b/crates/zoneinfo/tests/data/europe-vatican.json new file mode 100644 index 000000000..02c47b356 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-vatican.json @@ -0,0 +1,705 @@ +{ + "first_record": { + "offset": 2996, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3252098996, + "record": { + "offset": 2996, + "is_dst": false, + "abbr": "RMT" + } + }, + { + "transition_time": -2403565200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1690765200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680487200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1664758800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1648951200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1635123600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1616896800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1604278800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1585533600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1571014800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1555293600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -932432400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -798073200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766717200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -750898800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733359600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -719456400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -701917200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -689209200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -670460400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -114051600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -103168800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -81997200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -71715600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -50547600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -40266000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -18493200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -8211600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 12956400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 23238000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 43801200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 54687600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 75855600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 86742000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 107910000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 118191600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 138754800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 149641200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 170809200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 181090800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 202258800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 212540400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 233103600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 243990000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 265158000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 276044400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 296607600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 307494000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338950800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-vienna.json b/crates/zoneinfo/tests/data/europe-vienna.json new file mode 100644 index 000000000..f17c0b4f3 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-vienna.json @@ -0,0 +1,457 @@ +{ + "first_record": { + "offset": 3921, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2422055121, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1693706400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680483600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1663455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1650150000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1632006000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1618700400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1569711600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1555801200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -938905200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -781052400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -780188400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -748479600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733273200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -717634800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -701910000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -684975600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -670460400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323823600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338940000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-vilnius.json b/crates/zoneinfo/tests/data/europe-vilnius.json new file mode 100644 index 000000000..7e245d445 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-vilnius.json @@ -0,0 +1,417 @@ +{ + "first_record": { + "offset": 6076, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840146876, + "record": { + "offset": 5040, + "is_dst": false, + "abbr": "WMT" + } + }, + { + "transition_time": -1672536240, + "record": { + "offset": 5736, + "is_dst": false, + "abbr": "KMT" + } + }, + { + "transition_time": -1585100136, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1561251600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1553565600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -928198800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": -900126000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -802144800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 354920400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 370728000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 386456400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 402264000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 417992400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 433800000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 449614800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 465346800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 481071600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 496796400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 512521200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 528246000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 543970800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 559695600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 575420400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 591145200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 606870000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 622598400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 638323200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 654652800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 670377600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 686102400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 701827200, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 717552000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 733276800, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 749001600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 764726400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 780451200, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 796176000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 811900800, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 828230400, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 846374400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 859680000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": 877824000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 891133200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 909277200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 922582800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 941331600, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": 1048986000, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-volgograd.json b/crates/zoneinfo/tests/data/europe-volgograd.json new file mode 100644 index 000000000..c3c20f1f0 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-volgograd.json @@ -0,0 +1,529 @@ +{ + "first_record": { + "offset": 10660, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1577761060, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "+03" + } + }, + { + "transition_time": -1247540400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 354916800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 370724400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 386452800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 402260400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 417988800, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 433796400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 449611200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 465343200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 481068000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 496792800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 512517600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 528242400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 543967200, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 559692000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 575416800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 591145200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 606870000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 622594800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 638319600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 654649200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 670374000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 701820000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 717548400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 733273200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 748998000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 764722800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 780447600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 796172400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 811897200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 828226800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 846370800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 859676400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 877820400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 891126000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 909270000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 922575600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 941324400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 954025200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 972774000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 985474800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1004223600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1017529200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1035673200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1048978800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1067122800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1080428400, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1099177200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1111878000, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1130626800, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1143327600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1162076400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1174777200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1193526000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1206831600, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1224975600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1238281200, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1256425200, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1269730800, + "record": { + "offset": 14400, + "is_dst": true, + "abbr": "MSD" + } + }, + { + "transition_time": 1288479600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1301180400, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1414274400, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + }, + { + "transition_time": 1540681200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1609020000, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "MSK" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-warsaw.json b/crates/zoneinfo/tests/data/europe-warsaw.json new file mode 100644 index 000000000..a84e3ceb7 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-warsaw.json @@ -0,0 +1,665 @@ +{ + "first_record": { + "offset": 5040, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840145840, + "record": { + "offset": 5040, + "is_dst": false, + "abbr": "WMT" + } + }, + { + "transition_time": -1717032240, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1693706400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1680483600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1663455600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1650150000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -1632006000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -1618700400, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1600473600, + "record": { + "offset": 10800, + "is_dst": true, + "abbr": "EEST" + } + }, + { + "transition_time": -1587168000, + "record": { + "offset": 7200, + "is_dst": false, + "abbr": "EET" + } + }, + { + "transition_time": -1501725600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -931734000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796608000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -778726800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -762660000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -748486800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -733273200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -715215600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -701910000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -684975600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -670460400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -654130800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -639010800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -397094400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -386812800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -371088000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -355363200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -334195200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -323308800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -307584000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -291859200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -271296000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -260409600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -239846400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -228960000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -208396800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -197510400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -176342400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -166060800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 228873600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 243993600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 260323200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 276048000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 291772800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 307497600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 323827200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 338947200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354672000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370396800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386121600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401846400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417571200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433296000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449020800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465350400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481075200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496800000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512524800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528249600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543974400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559699200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-zagreb.json b/crates/zoneinfo/tests/data/europe-zagreb.json new file mode 100644 index 000000000..7b98f7bbb --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-zagreb.json @@ -0,0 +1,297 @@ +{ + "first_record": { + "offset": 4920, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2713915320, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -905824800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -857257200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -844556400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -828226800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -812502000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -796777200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -777942000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -766623600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/europe-zurich.json b/crates/zoneinfo/tests/data/europe-zurich.json new file mode 100644 index 000000000..5ae0b4f53 --- /dev/null +++ b/crates/zoneinfo/tests/data/europe-zurich.json @@ -0,0 +1,305 @@ +{ + "first_record": { + "offset": 2048, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3675198848, + "record": { + "offset": 1786, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -2385246586, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -904435200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -891129600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": -872985600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": -859680000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 354675600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 370400400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 386125200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 401850000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 417574800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 433299600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 449024400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 465354000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 481078800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 496803600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 512528400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 528253200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 543978000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 559702800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 575427600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 591152400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 606877200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 622602000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 638326800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 654656400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 670381200, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 686106000, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 701830800, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 717555600, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 733280400, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 749005200, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 764730000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 780454800, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 796179600, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + }, + { + "transition_time": 811904400, + "record": { + "offset": 3600, + "is_dst": false, + "abbr": "CET" + } + }, + { + "transition_time": 828234000, + "record": { + "offset": 7200, + "is_dst": true, + "abbr": "CEST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/indian-antananarivo.json b/crates/zoneinfo/tests/data/indian-antananarivo.json new file mode 100644 index 000000000..43b02e25c --- /dev/null +++ b/crates/zoneinfo/tests/data/indian-antananarivo.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": 8836, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1946168836, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1309746600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + }, + { + "transition_time": -1261969200, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1041388200, + "record": { + "offset": 9900, + "is_dst": false, + "abbr": "+0245" + } + }, + { + "transition_time": -865305900, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/indian-chagos.json b/crates/zoneinfo/tests/data/indian-chagos.json new file mode 100644 index 000000000..5405f475b --- /dev/null +++ b/crates/zoneinfo/tests/data/indian-chagos.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 17380, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1988167780, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + }, + { + "transition_time": 820436400, + "record": { + "offset": 21600, + "is_dst": false, + "abbr": "+06" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/indian-christmas.json b/crates/zoneinfo/tests/data/indian-christmas.json new file mode 100644 index 000000000..8b30b96b0 --- /dev/null +++ b/crates/zoneinfo/tests/data/indian-christmas.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 24124, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840164924, + "record": { + "offset": 24124, + "is_dst": false, + "abbr": "BMT" + } + }, + { + "transition_time": -1570084924, + "record": { + "offset": 25200, + "is_dst": false, + "abbr": "+07" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/indian-cocos.json b/crates/zoneinfo/tests/data/indian-cocos.json new file mode 100644 index 000000000..df47c7475 --- /dev/null +++ b/crates/zoneinfo/tests/data/indian-cocos.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 23087, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840163887, + "record": { + "offset": 23087, + "is_dst": false, + "abbr": "RMT" + } + }, + { + "transition_time": -1577946287, + "record": { + "offset": 23400, + "is_dst": false, + "abbr": "+0630" + } + }, + { + "transition_time": -873268200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -778410000, + "record": { + "offset": 23400, + "is_dst": false, + "abbr": "+0630" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/indian-comoro.json b/crates/zoneinfo/tests/data/indian-comoro.json new file mode 100644 index 000000000..43b02e25c --- /dev/null +++ b/crates/zoneinfo/tests/data/indian-comoro.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": 8836, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1946168836, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1309746600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + }, + { + "transition_time": -1261969200, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1041388200, + "record": { + "offset": 9900, + "is_dst": false, + "abbr": "+0245" + } + }, + { + "transition_time": -865305900, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/indian-kerguelen.json b/crates/zoneinfo/tests/data/indian-kerguelen.json new file mode 100644 index 000000000..95a577744 --- /dev/null +++ b/crates/zoneinfo/tests/data/indian-kerguelen.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 17640, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840158440, + "record": { + "offset": 17640, + "is_dst": false, + "abbr": "MMT" + } + }, + { + "transition_time": -315636840, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/indian-mahe.json b/crates/zoneinfo/tests/data/indian-mahe.json new file mode 100644 index 000000000..ca0f1f804 --- /dev/null +++ b/crates/zoneinfo/tests/data/indian-mahe.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 13272, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1577936472, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/indian-maldives.json b/crates/zoneinfo/tests/data/indian-maldives.json new file mode 100644 index 000000000..95a577744 --- /dev/null +++ b/crates/zoneinfo/tests/data/indian-maldives.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 17640, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840158440, + "record": { + "offset": 17640, + "is_dst": false, + "abbr": "MMT" + } + }, + { + "transition_time": -315636840, + "record": { + "offset": 18000, + "is_dst": false, + "abbr": "+05" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/indian-mauritius.json b/crates/zoneinfo/tests/data/indian-mauritius.json new file mode 100644 index 000000000..93e095486 --- /dev/null +++ b/crates/zoneinfo/tests/data/indian-mauritius.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": 13800, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1988164200, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 403041600, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 417034800, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + }, + { + "transition_time": 1224972000, + "record": { + "offset": 18000, + "is_dst": true, + "abbr": "+05" + } + }, + { + "transition_time": 1238274000, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/indian-mayotte.json b/crates/zoneinfo/tests/data/indian-mayotte.json new file mode 100644 index 000000000..43b02e25c --- /dev/null +++ b/crates/zoneinfo/tests/data/indian-mayotte.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": 8836, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1946168836, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1309746600, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + }, + { + "transition_time": -1261969200, + "record": { + "offset": 9000, + "is_dst": false, + "abbr": "+0230" + } + }, + { + "transition_time": -1041388200, + "record": { + "offset": 9900, + "is_dst": false, + "abbr": "+0245" + } + }, + { + "transition_time": -865305900, + "record": { + "offset": 10800, + "is_dst": false, + "abbr": "EAT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/indian-reunion.json b/crates/zoneinfo/tests/data/indian-reunion.json new file mode 100644 index 000000000..ca0f1f804 --- /dev/null +++ b/crates/zoneinfo/tests/data/indian-reunion.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 13272, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1577936472, + "record": { + "offset": 14400, + "is_dst": false, + "abbr": "+04" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-apia.json b/crates/zoneinfo/tests/data/pacific-apia.json new file mode 100644 index 000000000..63e71e745 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-apia.json @@ -0,0 +1,217 @@ +{ + "first_record": { + "offset": 45184, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2445424384, + "record": { + "offset": -41216, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1861878784, + "record": { + "offset": -41400, + "is_dst": false, + "abbr": "-1130" + } + }, + { + "transition_time": -631110600, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "-11" + } + }, + { + "transition_time": 1285498800, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "-10" + } + }, + { + "transition_time": 1301752800, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "-11" + } + }, + { + "transition_time": 1316872800, + "record": { + "offset": -36000, + "is_dst": true, + "abbr": "-10" + } + }, + { + "transition_time": 1325239200, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 1333202400, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 1348927200, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 1365256800, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 1380376800, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 1396706400, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 1411826400, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 1428156000, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 1443276000, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 1459605600, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 1474725600, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 1491055200, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 1506175200, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 1522504800, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 1538229600, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 1554559200, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 1569679200, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 1586008800, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 1601128800, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 1617458400, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-auckland.json b/crates/zoneinfo/tests/data/pacific-auckland.json new file mode 100644 index 000000000..e4e72112b --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-auckland.json @@ -0,0 +1,777 @@ +{ + "first_record": { + "offset": 41944, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3192435544, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1330335000, + "record": { + "offset": 45000, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1320057000, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1300699800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1287396000, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1269250200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1255946400, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1237800600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1224496800, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1206351000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1192442400, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1174901400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1160992800, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1143451800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1125914400, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1112607000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1094464800, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1081157400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1063015200, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1049707800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1031565600, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -1018258200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -1000116000, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -986808600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -968061600, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -955359000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -936612000, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "NZMT" + } + }, + { + "transition_time": -923304600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "NZST" + } + }, + { + "transition_time": -757425600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 152632800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 162309600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 183477600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 194968800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 215532000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 226418400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 246981600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 257868000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 278431200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 289317600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 309880800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 320767200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 341330400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 352216800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 372780000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 384271200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 404834400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 415720800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 436284000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 447170400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 467733600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 478620000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 499183200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 510069600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 530632800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 541519200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 562082400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 573573600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 594136800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 605023200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 623772000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 637682400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 655221600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 669132000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 686671200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 700581600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 718120800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 732636000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 749570400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 764085600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 781020000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 795535200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 812469600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 826984800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 844524000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 858434400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 875973600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 889884000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 907423200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 921938400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 938872800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 953388000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 970322400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 984837600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 1002376800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 1016287200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 1033826400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 1047736800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 1065276000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 1079791200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 1096725600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 1111240800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 1128175200, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 1142690400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 1159624800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + }, + { + "transition_time": 1174140000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "NZST" + } + }, + { + "transition_time": 1191074400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "NZDT" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-bougainville.json b/crates/zoneinfo/tests/data/pacific-bougainville.json new file mode 100644 index 000000000..6a9111bc3 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-bougainville.json @@ -0,0 +1,49 @@ +{ + "first_record": { + "offset": 37336, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840178136, + "record": { + "offset": 35312, + "is_dst": false, + "abbr": "PMMT" + } + }, + { + "transition_time": -2366790512, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": -868010400, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -768906000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": 1419696000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-chatham.json b/crates/zoneinfo/tests/data/pacific-chatham.json new file mode 100644 index 000000000..e7c797270 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-chatham.json @@ -0,0 +1,561 @@ +{ + "first_record": { + "offset": 44028, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3192437628, + "record": { + "offset": 44100, + "is_dst": false, + "abbr": "+1215" + } + }, + { + "transition_time": -757426500, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 152632800, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 162309600, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 183477600, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 194968800, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 215532000, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 226418400, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 246981600, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 257868000, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 278431200, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 289317600, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 309880800, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 320767200, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 341330400, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 352216800, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 372780000, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 384271200, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 404834400, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 415720800, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 436284000, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 447170400, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 467733600, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 478620000, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 499183200, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 510069600, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 530632800, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 541519200, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 562082400, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 573573600, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 594136800, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 605023200, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 623772000, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 637682400, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 655221600, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 669132000, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 686671200, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 700581600, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 718120800, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 732636000, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 749570400, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 764085600, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 781020000, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 795535200, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 812469600, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 826984800, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 844524000, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 858434400, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 875973600, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 889884000, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 907423200, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 921938400, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 938872800, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 953388000, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 970322400, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 984837600, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 1002376800, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 1016287200, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 1033826400, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 1047736800, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 1065276000, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 1079791200, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 1096725600, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 1111240800, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 1128175200, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 1142690400, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 1159624800, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + }, + { + "transition_time": 1174140000, + "record": { + "offset": 45900, + "is_dst": false, + "abbr": "+1245" + } + }, + { + "transition_time": 1191074400, + "record": { + "offset": 49500, + "is_dst": true, + "abbr": "+1345" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-chuuk.json b/crates/zoneinfo/tests/data/pacific-chuuk.json new file mode 100644 index 000000000..ed53312b5 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-chuuk.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 35320, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840176120, + "record": { + "offset": 35312, + "is_dst": false, + "abbr": "PMMT" + } + }, + { + "transition_time": -2366790512, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-easter.json b/crates/zoneinfo/tests/data/pacific-easter.json new file mode 100644 index 000000000..109d9110e --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-easter.json @@ -0,0 +1,889 @@ +{ + "first_record": { + "offset": -26248, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2524495352, + "record": { + "offset": -26248, + "is_dst": false, + "abbr": "EMT" + } + }, + { + "transition_time": -1178124152, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "-07" + } + }, + { + "transition_time": -36619200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "-06" + } + }, + { + "transition_time": -23922000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "-07" + } + }, + { + "transition_time": -3355200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "-06" + } + }, + { + "transition_time": 7527600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "-07" + } + }, + { + "transition_time": 24465600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "-06" + } + }, + { + "transition_time": 37767600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "-07" + } + }, + { + "transition_time": 55915200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "-06" + } + }, + { + "transition_time": 69217200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "-07" + } + }, + { + "transition_time": 87969600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "-06" + } + }, + { + "transition_time": 100666800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "-07" + } + }, + { + "transition_time": 118209600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "-06" + } + }, + { + "transition_time": 132116400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "-07" + } + }, + { + "transition_time": 150868800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "-06" + } + }, + { + "transition_time": 163566000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "-07" + } + }, + { + "transition_time": 182318400, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "-06" + } + }, + { + "transition_time": 195620400, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "-07" + } + }, + { + "transition_time": 213768000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "-06" + } + }, + { + "transition_time": 227070000, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "-07" + } + }, + { + "transition_time": 245217600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "-06" + } + }, + { + "transition_time": 258519600, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "-07" + } + }, + { + "transition_time": 277272000, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "-06" + } + }, + { + "transition_time": 289969200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "-07" + } + }, + { + "transition_time": 308721600, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "-06" + } + }, + { + "transition_time": 321418800, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "-07" + } + }, + { + "transition_time": 340171200, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "-06" + } + }, + { + "transition_time": 353473200, + "record": { + "offset": -25200, + "is_dst": false, + "abbr": "-07" + } + }, + { + "transition_time": 371620800, + "record": { + "offset": -21600, + "is_dst": true, + "abbr": "-06" + } + }, + { + "transition_time": 384922800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 403070400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 416372400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 434520000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 447822000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 466574400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 479271600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 498024000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 510721200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 529473600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 545194800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 560923200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 574225200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 592372800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 605674800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 624427200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 637124400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 653457600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 668574000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 687326400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 700628400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 718776000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 732078000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 750225600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 763527600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 781675200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 794977200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 813729600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 826426800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 845179200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 859690800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 876628800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 889930800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 906868800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 923194800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 939528000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 952830000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 971582400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 984279600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1003032000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1015729200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1034481600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1047178800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1065931200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1079233200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1097380800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1110682800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1128830400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1142132400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1160884800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1173582000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1192334400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1206846000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1223784000, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1237086000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1255233600, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1270350000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1286683200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1304823600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1313899200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1335668400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1346558400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1367118000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1378612800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1398567600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1410062400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1463281200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1471147200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1494730800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1502596800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1526180400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1534046400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1554606000, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1567915200, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1586055600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1599364800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1617505200, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1630814400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1648954800, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 1662868800, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 1680404400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-efate.json b/crates/zoneinfo/tests/data/pacific-efate.json new file mode 100644 index 000000000..1ca3f8138 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-efate.json @@ -0,0 +1,193 @@ +{ + "first_record": { + "offset": 40396, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1829387596, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 125409600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 133876800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 433256400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 448977600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 464706000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 480427200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 496760400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 511876800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 528210000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 543931200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 559659600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 575380800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 591109200, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 606830400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 622558800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 638280000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 654008400, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 669729600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 686062800, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 696340800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 719931600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 727790400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-fakaofo.json b/crates/zoneinfo/tests/data/pacific-fakaofo.json new file mode 100644 index 000000000..87187fa02 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-fakaofo.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": -41096, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177411704, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "-11" + } + }, + { + "transition_time": 1325242800, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-fiji.json b/crates/zoneinfo/tests/data/pacific-fiji.json new file mode 100644 index 000000000..e38c73b02 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-fiji.json @@ -0,0 +1,241 @@ +{ + "first_record": { + "offset": 42944, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1709985344, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 909842400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 920124000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 941896800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 951573600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1259416800, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1269698400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1287842400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1299333600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1319292000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1327154400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1350741600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1358604000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1382796000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1390050000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1414850400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1421503200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1446300000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1452952800, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1478354400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1484402400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1509804000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1515852000, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1541253600, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1547301600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1573308000, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1578751200, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 1608386400, + "record": { + "offset": 46800, + "is_dst": true, + "abbr": "+13" + } + }, + { + "transition_time": 1610805600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-funafuti.json b/crates/zoneinfo/tests/data/pacific-funafuti.json new file mode 100644 index 000000000..f340d2329 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-funafuti.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 41524, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177494324, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-galapagos.json b/crates/zoneinfo/tests/data/pacific-galapagos.json new file mode 100644 index 000000000..2c002921f --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-galapagos.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": -21504, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1230746496, + "record": { + "offset": -18000, + "is_dst": false, + "abbr": "-05" + } + }, + { + "transition_time": 504939600, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + }, + { + "transition_time": 722930400, + "record": { + "offset": -18000, + "is_dst": true, + "abbr": "-05" + } + }, + { + "transition_time": 728888400, + "record": { + "offset": -21600, + "is_dst": false, + "abbr": "-06" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-gambier.json b/crates/zoneinfo/tests/data/pacific-gambier.json new file mode 100644 index 000000000..76467f375 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-gambier.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -32388, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1806678012, + "record": { + "offset": -32400, + "is_dst": false, + "abbr": "-09" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-guadalcanal.json b/crates/zoneinfo/tests/data/pacific-guadalcanal.json new file mode 100644 index 000000000..806f1747b --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-guadalcanal.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 38388, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1806748788, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-guam.json b/crates/zoneinfo/tests/data/pacific-guam.json new file mode 100644 index 000000000..7a3ee05c1 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-guam.json @@ -0,0 +1,177 @@ +{ + "first_record": { + "offset": -51660, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3944626740, + "record": { + "offset": 34740, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -2177487540, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": -885549600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -802256400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": -331891200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": -281610000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": -73728000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": -29415540, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": -16704000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": -10659600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": 9907200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": 21394800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": 41356800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": 52844400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": 124819200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": 130863600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": 201888000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": 209487660, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": 230659200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": 241542000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": 977493600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "ChST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-honolulu.json b/crates/zoneinfo/tests/data/pacific-honolulu.json new file mode 100644 index 000000000..212474ed9 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-honolulu.json @@ -0,0 +1,65 @@ +{ + "first_record": { + "offset": -37886, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2334101314, + "record": { + "offset": -37800, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": -1157283000, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "HDT" + } + }, + { + "transition_time": -1155436200, + "record": { + "offset": -37800, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": -880198200, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "HWT" + } + }, + { + "transition_time": -769395600, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "HPT" + } + }, + { + "transition_time": -765376200, + "record": { + "offset": -37800, + "is_dst": false, + "abbr": "HST" + } + }, + { + "transition_time": -712150200, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "HST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-kanton.json b/crates/zoneinfo/tests/data/pacific-kanton.json new file mode 100644 index 000000000..defb5f0d2 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-kanton.json @@ -0,0 +1,33 @@ +{ + "first_record": { + "offset": 0, + "is_dst": false, + "abbr": "-00" + }, + "transitions": [ + { + "transition_time": -1020470400, + "record": { + "offset": -43200, + "is_dst": false, + "abbr": "-12" + } + }, + { + "transition_time": 307627200, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "-11" + } + }, + { + "transition_time": 788871600, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-kiritimati.json b/crates/zoneinfo/tests/data/pacific-kiritimati.json new file mode 100644 index 000000000..84fa6a534 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-kiritimati.json @@ -0,0 +1,33 @@ +{ + "first_record": { + "offset": -37760, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177415040, + "record": { + "offset": -38400, + "is_dst": false, + "abbr": "-1040" + } + }, + { + "transition_time": 307622400, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + }, + { + "transition_time": 788868000, + "record": { + "offset": 50400, + "is_dst": false, + "abbr": "+14" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-kosrae.json b/crates/zoneinfo/tests/data/pacific-kosrae.json new file mode 100644 index 000000000..5f4cc7f0f --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-kosrae.json @@ -0,0 +1,81 @@ +{ + "first_record": { + "offset": -47284, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3944631116, + "record": { + "offset": 39116, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -2177491916, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": -1743678000, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -1606813200, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": -1041418800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": -907408800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -770634000, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": -7988400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + }, + { + "transition_time": 915105600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-kwajalein.json b/crates/zoneinfo/tests/data/pacific-kwajalein.json new file mode 100644 index 000000000..bc511ef7a --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-kwajalein.json @@ -0,0 +1,57 @@ +{ + "first_record": { + "offset": 40160, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177492960, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": -1041418800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + }, + { + "transition_time": -907408800, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -817462800, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": -7988400, + "record": { + "offset": -43200, + "is_dst": false, + "abbr": "-12" + } + }, + { + "transition_time": 745934400, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-majuro.json b/crates/zoneinfo/tests/data/pacific-majuro.json new file mode 100644 index 000000000..f340d2329 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-majuro.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 41524, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177494324, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-marquesas.json b/crates/zoneinfo/tests/data/pacific-marquesas.json new file mode 100644 index 000000000..bab3f31a1 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-marquesas.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -33480, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1806676920, + "record": { + "offset": -34200, + "is_dst": false, + "abbr": "-0930" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-midway.json b/crates/zoneinfo/tests/data/pacific-midway.json new file mode 100644 index 000000000..ff47880ca --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-midway.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 45432, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2445424632, + "record": { + "offset": -40968, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1861879032, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "SST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-nauru.json b/crates/zoneinfo/tests/data/pacific-nauru.json new file mode 100644 index 000000000..88f38103b --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-nauru.json @@ -0,0 +1,41 @@ +{ + "first_record": { + "offset": 40060, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1545131260, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "+1130" + } + }, + { + "transition_time": -862918200, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -767350800, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "+1130" + } + }, + { + "transition_time": 287418600, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-niue.json b/crates/zoneinfo/tests/data/pacific-niue.json new file mode 100644 index 000000000..304b62102 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-niue.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": -40780, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -543069620, + "record": { + "offset": -40800, + "is_dst": false, + "abbr": "-1120" + } + }, + { + "transition_time": -173623200, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "-11" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-norfolk.json b/crates/zoneinfo/tests/data/pacific-norfolk.json new file mode 100644 index 000000000..9640e4d0f --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-norfolk.json @@ -0,0 +1,57 @@ +{ + "first_record": { + "offset": 40312, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177493112, + "record": { + "offset": 40320, + "is_dst": false, + "abbr": "+1112" + } + }, + { + "transition_time": -599656320, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "+1130" + } + }, + { + "transition_time": 152029800, + "record": { + "offset": 45000, + "is_dst": true, + "abbr": "+1230" + } + }, + { + "transition_time": 162916200, + "record": { + "offset": 41400, + "is_dst": false, + "abbr": "+1130" + } + }, + { + "transition_time": 1443882600, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 1570287600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-noumea.json b/crates/zoneinfo/tests/data/pacific-noumea.json new file mode 100644 index 000000000..87599eee3 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-noumea.json @@ -0,0 +1,65 @@ +{ + "first_record": { + "offset": 39948, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1829387148, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 250002000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 257342400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 281451600, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 288878400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + }, + { + "transition_time": 849366000, + "record": { + "offset": 43200, + "is_dst": true, + "abbr": "+12" + } + }, + { + "transition_time": 857228400, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-pago_pago.json b/crates/zoneinfo/tests/data/pacific-pago_pago.json new file mode 100644 index 000000000..ff47880ca --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-pago_pago.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 45432, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2445424632, + "record": { + "offset": -40968, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -1861879032, + "record": { + "offset": -39600, + "is_dst": false, + "abbr": "SST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-palau.json b/crates/zoneinfo/tests/data/pacific-palau.json new file mode 100644 index 000000000..cbc060cdb --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-palau.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": -54124, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3944624276, + "record": { + "offset": 32276, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -2177485076, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-pitcairn.json b/crates/zoneinfo/tests/data/pacific-pitcairn.json new file mode 100644 index 000000000..807945b75 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-pitcairn.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": -31220, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177421580, + "record": { + "offset": -30600, + "is_dst": false, + "abbr": "-0830" + } + }, + { + "transition_time": 893665800, + "record": { + "offset": -28800, + "is_dst": false, + "abbr": "-08" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-pohnpei.json b/crates/zoneinfo/tests/data/pacific-pohnpei.json new file mode 100644 index 000000000..806f1747b --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-pohnpei.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 38388, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1806748788, + "record": { + "offset": 39600, + "is_dst": false, + "abbr": "+11" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-port_moresby.json b/crates/zoneinfo/tests/data/pacific-port_moresby.json new file mode 100644 index 000000000..ed53312b5 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-port_moresby.json @@ -0,0 +1,25 @@ +{ + "first_record": { + "offset": 35320, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2840176120, + "record": { + "offset": 35312, + "is_dst": false, + "abbr": "PMMT" + } + }, + { + "transition_time": -2366790512, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "+10" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-rarotonga.json b/crates/zoneinfo/tests/data/pacific-rarotonga.json new file mode 100644 index 000000000..eb7afa806 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-rarotonga.json @@ -0,0 +1,233 @@ +{ + "first_record": { + "offset": 48056, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2209555256, + "record": { + "offset": -38344, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -543072056, + "record": { + "offset": -37800, + "is_dst": false, + "abbr": "-1030" + } + }, + { + "transition_time": 279714600, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "-0930" + } + }, + { + "transition_time": 289387800, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + }, + { + "transition_time": 309952800, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "-0930" + } + }, + { + "transition_time": 320837400, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + }, + { + "transition_time": 341402400, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "-0930" + } + }, + { + "transition_time": 352287000, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + }, + { + "transition_time": 372852000, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "-0930" + } + }, + { + "transition_time": 384341400, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + }, + { + "transition_time": 404906400, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "-0930" + } + }, + { + "transition_time": 415791000, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + }, + { + "transition_time": 436356000, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "-0930" + } + }, + { + "transition_time": 447240600, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + }, + { + "transition_time": 467805600, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "-0930" + } + }, + { + "transition_time": 478690200, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + }, + { + "transition_time": 499255200, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "-0930" + } + }, + { + "transition_time": 510139800, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + }, + { + "transition_time": 530704800, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "-0930" + } + }, + { + "transition_time": 541589400, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + }, + { + "transition_time": 562154400, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "-0930" + } + }, + { + "transition_time": 573643800, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + }, + { + "transition_time": 594208800, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "-0930" + } + }, + { + "transition_time": 605093400, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + }, + { + "transition_time": 625658400, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "-0930" + } + }, + { + "transition_time": 636543000, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + }, + { + "transition_time": 657108000, + "record": { + "offset": -34200, + "is_dst": true, + "abbr": "-0930" + } + }, + { + "transition_time": 667992600, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-saipan.json b/crates/zoneinfo/tests/data/pacific-saipan.json new file mode 100644 index 000000000..7a3ee05c1 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-saipan.json @@ -0,0 +1,177 @@ +{ + "first_record": { + "offset": -51660, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -3944626740, + "record": { + "offset": 34740, + "is_dst": false, + "abbr": "LMT" + } + }, + { + "transition_time": -2177487540, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": -885549600, + "record": { + "offset": 32400, + "is_dst": false, + "abbr": "+09" + } + }, + { + "transition_time": -802256400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": -331891200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": -281610000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": -73728000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": -29415540, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": -16704000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": -10659600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": 9907200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": 21394800, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": 41356800, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": 52844400, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": 124819200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": 130863600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": 201888000, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": 209487660, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": 230659200, + "record": { + "offset": 39600, + "is_dst": true, + "abbr": "GDT" + } + }, + { + "transition_time": 241542000, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "GST" + } + }, + { + "transition_time": 977493600, + "record": { + "offset": 36000, + "is_dst": false, + "abbr": "ChST" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-tahiti.json b/crates/zoneinfo/tests/data/pacific-tahiti.json new file mode 100644 index 000000000..c6fc16b4c --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-tahiti.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": -35896, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -1806674504, + "record": { + "offset": -36000, + "is_dst": false, + "abbr": "-10" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-tarawa.json b/crates/zoneinfo/tests/data/pacific-tarawa.json new file mode 100644 index 000000000..f340d2329 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-tarawa.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 41524, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177494324, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-tongatapu.json b/crates/zoneinfo/tests/data/pacific-tongatapu.json new file mode 100644 index 000000000..593283874 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-tongatapu.json @@ -0,0 +1,89 @@ +{ + "first_record": { + "offset": 44352, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -767189952, + "record": { + "offset": 44400, + "is_dst": false, + "abbr": "+1220" + } + }, + { + "transition_time": -284041200, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 939214800, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 953384400, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 973342800, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 980596800, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 1004792400, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 1012046400, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + }, + { + "transition_time": 1478350800, + "record": { + "offset": 50400, + "is_dst": true, + "abbr": "+14" + } + }, + { + "transition_time": 1484398800, + "record": { + "offset": 46800, + "is_dst": false, + "abbr": "+13" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-wake.json b/crates/zoneinfo/tests/data/pacific-wake.json new file mode 100644 index 000000000..f340d2329 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-wake.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 41524, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177494324, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + } + ] +} \ No newline at end of file diff --git a/crates/zoneinfo/tests/data/pacific-wallis.json b/crates/zoneinfo/tests/data/pacific-wallis.json new file mode 100644 index 000000000..f340d2329 --- /dev/null +++ b/crates/zoneinfo/tests/data/pacific-wallis.json @@ -0,0 +1,17 @@ +{ + "first_record": { + "offset": 41524, + "is_dst": false, + "abbr": "LMT" + }, + "transitions": [ + { + "transition_time": -2177494324, + "record": { + "offset": 43200, + "is_dst": false, + "abbr": "+12" + } + } + ] +} \ No newline at end of file diff --git a/zoneinfo/tests/data/rearguard/europe-dublin.json b/crates/zoneinfo/tests/data/rearguard/europe-dublin.json similarity index 100% rename from zoneinfo/tests/data/rearguard/europe-dublin.json rename to crates/zoneinfo/tests/data/rearguard/europe-dublin.json diff --git a/zoneinfo/tests/posix.rs b/crates/zoneinfo/tests/posix.rs similarity index 100% rename from zoneinfo/tests/posix.rs rename to crates/zoneinfo/tests/posix.rs diff --git a/zoneinfo/tests/test_datagen.rs b/crates/zoneinfo/tests/test_datagen.rs similarity index 100% rename from zoneinfo/tests/test_datagen.rs rename to crates/zoneinfo/tests/test_datagen.rs diff --git a/zoneinfo/tests/zoneinfo b/crates/zoneinfo/tests/zoneinfo similarity index 100% rename from zoneinfo/tests/zoneinfo rename to crates/zoneinfo/tests/zoneinfo diff --git a/docs/FAQ.md b/docs/FAQ.md index d96f5979b..3c871fc22 100644 --- a/docs/FAQ.md +++ b/docs/FAQ.md @@ -1,13 +1,13 @@ # FAQ -## Why should I use `temporal_rs`? +## Why should I use `temporal`? -`temporal_rs` implements the Temporal API in Rust. +`temporal` implements the Temporal API in Rust. The Temporal API is designed to be a calendar and time zone aware date/time API. -`temporal_rs` may fit your use case if any of the below are true: +`temporal` may fit your use case if any of the below are true: - You need some level of web compatibility for your date/time libraries. - You are implementing the Temporal API in a JavaScript engine or any @@ -25,11 +25,11 @@ implementation. Primary reasons: -- `temporal_rs` is older than `jiff`; so, it was not an option when the - work on `temporal_rs` began -- `jiff` is inspired by Temporal, while `temporal_rs` aims to be a 100% +- `temporal` is older than `jiff`; so, it was not an option when the + work on `temporal` began +- `jiff` is inspired by Temporal, while `temporal` aims to be a 100% compliant implementation. `jiff` can break from the specification if - it would like where `temporal_rs` is bound to the specification + it would like where `temporal` is bound to the specification behavior. Other concerns: @@ -37,9 +37,9 @@ Other concerns: - Time zones are designed around the concept of BYOP (Bring your own provider). This is VERY important for engines to be able to define their own time zone providers. -- Without feature flags, `temporal_rs`'s `Now` does not ship with a +- Without feature flags, `temporal`'s `Now` does not ship with a clock as this is left to JavaScript engines. -- Calendar support is first class in `temporal_rs`. The library aims to +- Calendar support is first class in `temporal`. The library aims to support all ECMA402 defined calendars. `jiff` primarily implements the ISO calendar with some support for other calendars through `jiff_icu`. diff --git a/docs/architecture.md b/docs/architecture.md index fea6c7601..27448e9b7 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -2,20 +2,20 @@ TODO: FFI docs -This doc provides an overview of the layout of `temporal_rs`. +This doc provides an overview of the layout of `temporal`. We will go over the Temporal Date/Time builtins, general primitives, and utiltity crates. -## `temporal_rs` design considerations +## `temporal` design considerations -`temporal_rs` is first and foremost designed to be a fully spec +`temporal` is first and foremost designed to be a fully spec compliant implementation of ECMAScript's Temporal date/time builtins. -As such, the main design consideration of `temporal_rs` is that it needs +As such, the main design consideration of `temporal` is that it needs to be able to service language interpreters / engines. -Thus, `temporal_rs` aims to provide an API along with tools to implement +Thus, `temporal` aims to provide an API along with tools to implement Temporal while minimizing issue with integrating Temporal into engines. ## Date/Time builtins @@ -24,11 +24,11 @@ The primary date & time builtins/components are located in the `builtins` directory. These builtins are then reexported from `lib.rs` to be available from -`temporal_rs`'s root module. +`temporal`'s root module. ### Core vs. Compiled -`temporal_rs`'s builtins are split in two distinct directories `core` +`temporal`'s builtins are split in two distinct directories `core` and `compiled`. The core implementation contains the core implementation of the Temporal builtins; meanwhile, the `compiled` implementation provides method wrappers around the `core` methods that simplify some "lower" level @@ -37,7 +37,7 @@ date/time APIs that may not be necessary for a general use case. ### Core implementation The core implementation is always publicly available, but may not be -available to import from the `temporal_rs`'s root. +available to import from the `temporal`'s root. The core implementation exposes the Provider API that allows the user to supply a "provider", or any type that implements the `TimeZoneProvider` @@ -86,19 +86,19 @@ This greatly simplifies the API for general use cases. -`temporal_rs` has a primitive number implementation `FiniteF64` along +`temporal` has a primitive number implementation `FiniteF64` along with a few date and time primitives: `IsoDate`, `IsoTime`, `IsoDateTime`, and `EpochNanoseconds`. `FiniteF64` allows an interface to translate between ECMAScript's number -type vs. `temporal_rs`'s strictly typed API. +type vs. `temporal`'s strictly typed API. Meanwhile the Date and Time primitives allow certain invariants to be enforced on their records. ## Utiltiies -`temporal_rs` provides one implementation of the `TimeZoneProvider` +`temporal` provides one implementation of the `TimeZoneProvider` trait: `FsTzdbProvider`. `FsTzdbProvider` reads from the file systems' tzdb and when not diff --git a/docs/release.md b/docs/release.md index deba1eeb1..af7bc872f 100644 --- a/docs/release.md +++ b/docs/release.md @@ -1,6 +1,6 @@ # Release process -The steps for preparing and making a new release for `temporal_rs` and +The steps for preparing and making a new release for `temporal` and its crates are as follows. 1. Fetch the remote refs and tags (`git fetch --tags`) diff --git a/docs/testing.md b/docs/testing.md index bd04e1ec0..b8ce646ba 100644 --- a/docs/testing.md +++ b/docs/testing.md @@ -1,14 +1,14 @@ -## Testing `temporal_rs` +## Testing `temporal` Temporal's primary test suite is the [Temporal `test262` test suite][test262-temporal]. There is an open issue / PR to extract -the tests from test262 into a format that `temporal_rs` can run +the tests from test262 into a format that `temporal` can run against in native Rust. In the meantime, there are two primary ways to test: 1. Map the test into a Rust version in the `test` module in - `temporal_rs`. (Ex: [Duration's tests][duration-test-mod]) + `temporal`. (Ex: [Duration's tests][duration-test-mod]) 2. Implement the feature in a relevant ECMAScript interpreter / engine, and run the engine through the test suite. @@ -65,10 +65,10 @@ Uncaught RangeError: Instant nanoseconds are not within a valid epoch range. ### A note on testing with ECMAScript implementations -Any ECMAScript implementation implementing `temporal_rs` will require +Any ECMAScript implementation implementing `temporal` will require some level of glue code in order to move from the implementation to -`temporal_rs`. So when debugging, it is important to determine that the -error falls in `temporal_rs`. +`temporal`. So when debugging, it is important to determine that the +error falls in `temporal`. [test262-temporal]: https://github.com/tc39/test262/tree/main/test/built-ins/Temporal diff --git a/provider/README.md b/provider/README.md deleted file mode 100644 index 481ca265c..000000000 --- a/provider/README.md +++ /dev/null @@ -1,63 +0,0 @@ -# Time zone providers - - - -Providers for time zone data - -Let's talk about time zone data everyone! - -At a high level, the `timezone_provider` crate provides a set of traits along with a few -implementations of those traits. The general intention here is to make providing time zone -data as agnostic and easy as possible. - -This crate is fairly "low level" at least as far as date and time needs are concerned. So -we'll cover the basic overview of the trait and some of the general implementations of -those traits, and then we will go on a bit further of a dive for the power users that -are interested in implementing their own provider or is just really curious about what -is going on. - -### Available providers - -Below is a list of currently available time zone providers. - -- `ZoneInfo64TzdbProvider`: a provider using ICU4C's zoneinfo64 resource bundle (enable with `zoneinfo64` features flag) -- `FsTzdbProvider`: a provider that reads and parses tzdata at runtime from the host file system's - TZif files (enable with `tzif` feature flag) -- `CompiledTzdbProvider`: a provider that reads and parses tzdata at runtime from TZifs compiled - into the application (enable with `tzif` feature flag) -- `ZeroCompiledTzdbProvider`: a provider that deserializes time zone data from TZifs compiled - into the application (enable with `experimental_tzif` feature flag) - -### Time zone provider traits - -This crate provides three primary traits for working with time zone data. - -- [`TimeZoneProvider`][crate::provider::TimeZoneProvider] -- [`TimeZoneNormalizer`][crate::provider::TimeZoneNormalizer] -- [`TimeZoneResolver`][crate::provider::TimeZoneResolver] - -The first trait `TimeZoneProvider` is the primary interface for a time zone provider used by `temporal_rs`. - -Meanwhile, the two other traits, `TimeZoneNormalizer` and `TimeZoneResolver`, are secondary -traits that can be used to implement the core `TimeZoneProvider`. Once implemented, this -crate providers a default type for creating a `TimeZoneProvider` by mixing and matching objects that implement the secondary -traits, `NormalizerAndResolver`. - -#### Why two secondary traits? - -Well that's because `TimeZoneProvider` handles two different concerns: fetching and -formatting normalized and canonicalized time zone identifiers, and resolving time -zone data requests. This functionality typically requires two different sets of data, -each of which may be in a variety of formats. - -#### Why not just have the two secondary traits without `TimeZoneProvider`? - -Well while the functionality typically requires two sets of data. Those sets are not -necessarily completely unique. The time zone database updates potentially multiple times a -year so having your formatting in 2025a while your data is in 2025b could cause some -desync. So in order to better represent this `TimeZoneProvider` is used on top of them. - -**NOTE:** you CAN always just directly use `TimeZoneNormalizer` and -`TimeZoneResolver` together if you want. We just wouldn't recommemnd it. - - diff --git a/provider/src/data/debug/iana_normalizer.json b/provider/src/data/debug/iana_normalizer.json deleted file mode 100644 index ce0b361e2..000000000 --- a/provider/src/data/debug/iana_normalizer.json +++ /dev/null @@ -1,1813 +0,0 @@ -{ - "version": "2025c", - "available_id_index": { - "africa/abidjan": 0, - "africa/accra": 1, - "africa/addis_ababa": 2, - "africa/algiers": 3, - "africa/asmara": 4, - "africa/asmera": 5, - "africa/bamako": 6, - "africa/bangui": 7, - "africa/banjul": 8, - "africa/bissau": 9, - "africa/blantyre": 10, - "africa/brazzaville": 11, - "africa/bujumbura": 12, - "africa/cairo": 13, - "africa/casablanca": 14, - "africa/ceuta": 15, - "africa/conakry": 16, - "africa/dakar": 17, - "africa/dar_es_salaam": 18, - "africa/djibouti": 19, - "africa/douala": 20, - "africa/el_aaiun": 21, - "africa/freetown": 22, - "africa/gaborone": 23, - "africa/harare": 24, - "africa/johannesburg": 25, - "africa/juba": 26, - "africa/kampala": 27, - "africa/khartoum": 28, - "africa/kigali": 29, - "africa/kinshasa": 30, - "africa/lagos": 31, - "africa/libreville": 32, - "africa/lome": 33, - "africa/luanda": 34, - "africa/lubumbashi": 35, - "africa/lusaka": 36, - "africa/malabo": 37, - "africa/maputo": 38, - "africa/maseru": 39, - "africa/mbabane": 40, - "africa/mogadishu": 41, - "africa/monrovia": 42, - "africa/nairobi": 43, - "africa/ndjamena": 44, - "africa/niamey": 45, - "africa/nouakchott": 46, - "africa/ouagadougou": 47, - "africa/porto-novo": 48, - "africa/sao_tome": 49, - "africa/timbuktu": 50, - "africa/tripoli": 51, - "africa/tunis": 52, - "africa/windhoek": 53, - "america/adak": 54, - "america/anchorage": 55, - "america/anguilla": 56, - "america/antigua": 57, - "america/araguaina": 58, - "america/argentina/buenos_aires": 59, - "america/argentina/catamarca": 60, - "america/argentina/comodrivadavia": 61, - "america/argentina/cordoba": 62, - "america/argentina/jujuy": 63, - "america/argentina/la_rioja": 64, - "america/argentina/mendoza": 65, - "america/argentina/rio_gallegos": 66, - "america/argentina/salta": 67, - "america/argentina/san_juan": 68, - "america/argentina/san_luis": 69, - "america/argentina/tucuman": 70, - "america/argentina/ushuaia": 71, - "america/aruba": 72, - "america/asuncion": 73, - "america/atikokan": 74, - "america/atka": 75, - "america/bahia": 76, - "america/bahia_banderas": 77, - "america/barbados": 78, - "america/belem": 79, - "america/belize": 80, - "america/blanc-sablon": 81, - "america/boa_vista": 82, - "america/bogota": 83, - "america/boise": 84, - "america/buenos_aires": 85, - "america/cambridge_bay": 86, - "america/campo_grande": 87, - "america/cancun": 88, - "america/caracas": 89, - "america/catamarca": 90, - "america/cayenne": 91, - "america/cayman": 92, - "america/chicago": 93, - "america/chihuahua": 94, - "america/ciudad_juarez": 95, - "america/coral_harbour": 96, - "america/cordoba": 97, - "america/costa_rica": 98, - "america/coyhaique": 99, - "america/creston": 100, - "america/cuiaba": 101, - "america/curacao": 102, - "america/danmarkshavn": 103, - "america/dawson": 104, - "america/dawson_creek": 105, - "america/denver": 106, - "america/detroit": 107, - "america/dominica": 108, - "america/edmonton": 109, - "america/eirunepe": 110, - "america/el_salvador": 111, - "america/ensenada": 112, - "america/fort_nelson": 113, - "america/fort_wayne": 114, - "america/fortaleza": 115, - "america/glace_bay": 116, - "america/godthab": 117, - "america/goose_bay": 118, - "america/grand_turk": 119, - "america/grenada": 120, - "america/guadeloupe": 121, - "america/guatemala": 122, - "america/guayaquil": 123, - "america/guyana": 124, - "america/halifax": 125, - "america/havana": 126, - "america/hermosillo": 127, - "america/indiana/indianapolis": 128, - "america/indiana/knox": 129, - "america/indiana/marengo": 130, - "america/indiana/petersburg": 131, - "america/indiana/tell_city": 132, - "america/indiana/vevay": 133, - "america/indiana/vincennes": 134, - "america/indiana/winamac": 135, - "america/indianapolis": 136, - "america/inuvik": 137, - "america/iqaluit": 138, - "america/jamaica": 139, - "america/jujuy": 140, - "america/juneau": 141, - "america/kentucky/louisville": 142, - "america/kentucky/monticello": 143, - "america/knox_in": 144, - "america/kralendijk": 145, - "america/la_paz": 146, - "america/lima": 147, - "america/los_angeles": 148, - "america/louisville": 149, - "america/lower_princes": 150, - "america/maceio": 151, - "america/managua": 152, - "america/manaus": 153, - "america/marigot": 154, - "america/martinique": 155, - "america/matamoros": 156, - "america/mazatlan": 157, - "america/mendoza": 158, - "america/menominee": 159, - "america/merida": 160, - "america/metlakatla": 161, - "america/mexico_city": 162, - "america/miquelon": 163, - "america/moncton": 164, - "america/monterrey": 165, - "america/montevideo": 166, - "america/montreal": 167, - "america/montserrat": 168, - "america/nassau": 169, - "america/new_york": 170, - "america/nipigon": 171, - "america/nome": 172, - "america/noronha": 173, - "america/north_dakota/beulah": 174, - "america/north_dakota/center": 175, - "america/north_dakota/new_salem": 176, - "america/nuuk": 177, - "america/ojinaga": 178, - "america/panama": 179, - "america/pangnirtung": 180, - "america/paramaribo": 181, - "america/phoenix": 182, - "america/port-au-prince": 183, - "america/port_of_spain": 184, - "america/porto_acre": 185, - "america/porto_velho": 186, - "america/puerto_rico": 187, - "america/punta_arenas": 188, - "america/rainy_river": 189, - "america/rankin_inlet": 190, - "america/recife": 191, - "america/regina": 192, - "america/resolute": 193, - "america/rio_branco": 194, - "america/rosario": 195, - "america/santa_isabel": 196, - "america/santarem": 197, - "america/santiago": 198, - "america/santo_domingo": 199, - "america/sao_paulo": 200, - "america/scoresbysund": 201, - "america/shiprock": 202, - "america/sitka": 203, - "america/st_barthelemy": 204, - "america/st_johns": 205, - "america/st_kitts": 206, - "america/st_lucia": 207, - "america/st_thomas": 208, - "america/st_vincent": 209, - "america/swift_current": 210, - "america/tegucigalpa": 211, - "america/thule": 212, - "america/thunder_bay": 213, - "america/tijuana": 214, - "america/toronto": 215, - "america/tortola": 216, - "america/vancouver": 217, - "america/virgin": 218, - "america/whitehorse": 219, - "america/winnipeg": 220, - "america/yakutat": 221, - "america/yellowknife": 222, - "antarctica/casey": 223, - "antarctica/davis": 224, - "antarctica/dumontdurville": 225, - "antarctica/macquarie": 226, - "antarctica/mawson": 227, - "antarctica/mcmurdo": 228, - "antarctica/palmer": 229, - "antarctica/rothera": 230, - "antarctica/south_pole": 231, - "antarctica/syowa": 232, - "antarctica/troll": 233, - "antarctica/vostok": 234, - "arctic/longyearbyen": 235, - "asia/aden": 236, - "asia/almaty": 237, - "asia/amman": 238, - "asia/anadyr": 239, - "asia/aqtau": 240, - "asia/aqtobe": 241, - "asia/ashgabat": 242, - "asia/ashkhabad": 243, - "asia/atyrau": 244, - "asia/baghdad": 245, - "asia/bahrain": 246, - "asia/baku": 247, - "asia/bangkok": 248, - "asia/barnaul": 249, - "asia/beirut": 250, - "asia/bishkek": 251, - "asia/brunei": 252, - "asia/calcutta": 253, - "asia/chita": 254, - "asia/choibalsan": 255, - "asia/chongqing": 256, - "asia/chungking": 257, - "asia/colombo": 258, - "asia/dacca": 259, - "asia/damascus": 260, - "asia/dhaka": 261, - "asia/dili": 262, - "asia/dubai": 263, - "asia/dushanbe": 264, - "asia/famagusta": 265, - "asia/gaza": 266, - "asia/hanoi": 267, - "asia/harbin": 268, - "asia/hebron": 269, - "asia/ho_chi_minh": 270, - "asia/hong_kong": 271, - "asia/hovd": 272, - "asia/irkutsk": 273, - "asia/istanbul": 274, - "asia/jakarta": 275, - "asia/jayapura": 276, - "asia/jerusalem": 277, - "asia/kabul": 278, - "asia/kamchatka": 279, - "asia/karachi": 280, - "asia/kashgar": 281, - "asia/kathmandu": 282, - "asia/katmandu": 283, - "asia/khandyga": 284, - "asia/kolkata": 285, - "asia/krasnoyarsk": 286, - "asia/kuala_lumpur": 287, - "asia/kuching": 288, - "asia/kuwait": 289, - "asia/macao": 290, - "asia/macau": 291, - "asia/magadan": 292, - "asia/makassar": 293, - "asia/manila": 294, - "asia/muscat": 295, - "asia/nicosia": 296, - "asia/novokuznetsk": 297, - "asia/novosibirsk": 298, - "asia/omsk": 299, - "asia/oral": 300, - "asia/phnom_penh": 301, - "asia/pontianak": 302, - "asia/pyongyang": 303, - "asia/qatar": 304, - "asia/qostanay": 305, - "asia/qyzylorda": 306, - "asia/rangoon": 307, - "asia/riyadh": 308, - "asia/saigon": 309, - "asia/sakhalin": 310, - "asia/samarkand": 311, - "asia/seoul": 312, - "asia/shanghai": 313, - "asia/singapore": 314, - "asia/srednekolymsk": 315, - "asia/taipei": 316, - "asia/tashkent": 317, - "asia/tbilisi": 318, - "asia/tehran": 319, - "asia/tel_aviv": 320, - "asia/thimbu": 321, - "asia/thimphu": 322, - "asia/tokyo": 323, - "asia/tomsk": 324, - "asia/ujung_pandang": 325, - "asia/ulaanbaatar": 326, - "asia/ulan_bator": 327, - "asia/urumqi": 328, - "asia/ust-nera": 329, - "asia/vientiane": 330, - "asia/vladivostok": 331, - "asia/yakutsk": 332, - "asia/yangon": 333, - "asia/yekaterinburg": 334, - "asia/yerevan": 335, - "atlantic/azores": 336, - "atlantic/bermuda": 337, - "atlantic/canary": 338, - "atlantic/cape_verde": 339, - "atlantic/faeroe": 340, - "atlantic/faroe": 341, - "atlantic/jan_mayen": 342, - "atlantic/madeira": 343, - "atlantic/reykjavik": 344, - "atlantic/south_georgia": 345, - "atlantic/st_helena": 346, - "atlantic/stanley": 347, - "australia/act": 348, - "australia/adelaide": 349, - "australia/brisbane": 350, - "australia/broken_hill": 351, - "australia/canberra": 352, - "australia/currie": 353, - "australia/darwin": 354, - "australia/eucla": 355, - "australia/hobart": 356, - "australia/lhi": 357, - "australia/lindeman": 358, - "australia/lord_howe": 359, - "australia/melbourne": 360, - "australia/north": 362, - "australia/nsw": 361, - "australia/perth": 363, - "australia/queensland": 364, - "australia/south": 365, - "australia/sydney": 366, - "australia/tasmania": 367, - "australia/victoria": 368, - "australia/west": 369, - "australia/yancowinna": 370, - "brazil/acre": 371, - "brazil/denoronha": 372, - "brazil/east": 373, - "brazil/west": 374, - "canada/atlantic": 377, - "canada/central": 378, - "canada/eastern": 379, - "canada/mountain": 380, - "canada/newfoundland": 381, - "canada/pacific": 382, - "canada/saskatchewan": 383, - "canada/yukon": 384, - "cet": 375, - "chile/continental": 385, - "chile/easterisland": 386, - "cst6cdt": 376, - "cuba": 387, - "eet": 388, - "egypt": 391, - "eire": 392, - "est": 389, - "est5edt": 390, - "etc/gmt": 393, - "etc/gmt+0": 394, - "etc/gmt+1": 395, - "etc/gmt+10": 396, - "etc/gmt+11": 397, - "etc/gmt+12": 398, - "etc/gmt+2": 399, - "etc/gmt+3": 400, - "etc/gmt+4": 401, - "etc/gmt+5": 402, - "etc/gmt+6": 403, - "etc/gmt+7": 404, - "etc/gmt+8": 405, - "etc/gmt+9": 406, - "etc/gmt-0": 407, - "etc/gmt-1": 408, - "etc/gmt-10": 409, - "etc/gmt-11": 410, - "etc/gmt-12": 411, - "etc/gmt-13": 412, - "etc/gmt-14": 413, - "etc/gmt-2": 414, - "etc/gmt-3": 415, - "etc/gmt-4": 416, - "etc/gmt-5": 417, - "etc/gmt-6": 418, - "etc/gmt-7": 419, - "etc/gmt-8": 420, - "etc/gmt-9": 421, - "etc/gmt0": 422, - "etc/greenwich": 423, - "etc/uct": 424, - "etc/universal": 426, - "etc/utc": 425, - "etc/zulu": 427, - "europe/amsterdam": 428, - "europe/andorra": 429, - "europe/astrakhan": 430, - "europe/athens": 431, - "europe/belfast": 432, - "europe/belgrade": 433, - "europe/berlin": 434, - "europe/bratislava": 435, - "europe/brussels": 436, - "europe/bucharest": 437, - "europe/budapest": 438, - "europe/busingen": 439, - "europe/chisinau": 440, - "europe/copenhagen": 441, - "europe/dublin": 442, - "europe/gibraltar": 443, - "europe/guernsey": 444, - "europe/helsinki": 445, - "europe/isle_of_man": 446, - "europe/istanbul": 447, - "europe/jersey": 448, - "europe/kaliningrad": 449, - "europe/kiev": 450, - "europe/kirov": 451, - "europe/kyiv": 452, - "europe/lisbon": 453, - "europe/ljubljana": 454, - "europe/london": 455, - "europe/luxembourg": 456, - "europe/madrid": 457, - "europe/malta": 458, - "europe/mariehamn": 459, - "europe/minsk": 460, - "europe/monaco": 461, - "europe/moscow": 462, - "europe/nicosia": 463, - "europe/oslo": 464, - "europe/paris": 465, - "europe/podgorica": 466, - "europe/prague": 467, - "europe/riga": 468, - "europe/rome": 469, - "europe/samara": 470, - "europe/san_marino": 471, - "europe/sarajevo": 472, - "europe/saratov": 473, - "europe/simferopol": 474, - "europe/skopje": 475, - "europe/sofia": 476, - "europe/stockholm": 477, - "europe/tallinn": 478, - "europe/tirane": 479, - "europe/tiraspol": 480, - "europe/ulyanovsk": 481, - "europe/uzhgorod": 482, - "europe/vaduz": 483, - "europe/vatican": 484, - "europe/vienna": 485, - "europe/vilnius": 486, - "europe/volgograd": 487, - "europe/warsaw": 488, - "europe/zagreb": 489, - "europe/zaporozhye": 490, - "europe/zurich": 491, - "gb": 492, - "gb-eire": 493, - "gmt": 494, - "gmt+0": 495, - "gmt-0": 496, - "gmt0": 497, - "greenwich": 498, - "hongkong": 500, - "hst": 499, - "iceland": 501, - "indian/antananarivo": 502, - "indian/chagos": 503, - "indian/christmas": 504, - "indian/cocos": 505, - "indian/comoro": 506, - "indian/kerguelen": 507, - "indian/mahe": 508, - "indian/maldives": 509, - "indian/mauritius": 510, - "indian/mayotte": 511, - "indian/reunion": 512, - "iran": 513, - "israel": 514, - "jamaica": 515, - "japan": 516, - "kwajalein": 517, - "libya": 518, - "met": 519, - "mexico/bajanorte": 522, - "mexico/bajasur": 523, - "mexico/general": 524, - "mst": 520, - "mst7mdt": 521, - "navajo": 527, - "nz": 525, - "nz-chat": 526, - "pacific/apia": 530, - "pacific/auckland": 531, - "pacific/bougainville": 532, - "pacific/chatham": 533, - "pacific/chuuk": 534, - "pacific/easter": 535, - "pacific/efate": 536, - "pacific/enderbury": 537, - "pacific/fakaofo": 538, - "pacific/fiji": 539, - "pacific/funafuti": 540, - "pacific/galapagos": 541, - "pacific/gambier": 542, - "pacific/guadalcanal": 543, - "pacific/guam": 544, - "pacific/honolulu": 545, - "pacific/johnston": 546, - "pacific/kanton": 547, - "pacific/kiritimati": 548, - "pacific/kosrae": 549, - "pacific/kwajalein": 550, - "pacific/majuro": 551, - "pacific/marquesas": 552, - "pacific/midway": 553, - "pacific/nauru": 554, - "pacific/niue": 555, - "pacific/norfolk": 556, - "pacific/noumea": 557, - "pacific/pago_pago": 558, - "pacific/palau": 559, - "pacific/pitcairn": 560, - "pacific/pohnpei": 561, - "pacific/ponape": 562, - "pacific/port_moresby": 563, - "pacific/rarotonga": 564, - "pacific/saipan": 565, - "pacific/samoa": 566, - "pacific/tahiti": 567, - "pacific/tarawa": 568, - "pacific/tongatapu": 569, - "pacific/truk": 570, - "pacific/wake": 571, - "pacific/wallis": 572, - "pacific/yap": 573, - "poland": 574, - "portugal": 575, - "prc": 528, - "pst8pdt": 529, - "roc": 576, - "rok": 577, - "singapore": 578, - "turkey": 579, - "uct": 580, - "universal": 594, - "us/alaska": 581, - "us/aleutian": 582, - "us/arizona": 583, - "us/central": 584, - "us/east-indiana": 585, - "us/eastern": 586, - "us/hawaii": 587, - "us/indiana-starke": 588, - "us/michigan": 589, - "us/mountain": 590, - "us/pacific": 591, - "us/samoa": 592, - "utc": 593, - "w-su": 595, - "wet": 596, - "zulu": 597 - }, - "non_canonical_identifiers": [ - [ - 5, - 4 - ], - [ - 50, - 6 - ], - [ - 61, - 60 - ], - [ - 75, - 54 - ], - [ - 85, - 59 - ], - [ - 90, - 60 - ], - [ - 96, - 74 - ], - [ - 97, - 62 - ], - [ - 112, - 214 - ], - [ - 114, - 128 - ], - [ - 117, - 177 - ], - [ - 136, - 128 - ], - [ - 140, - 63 - ], - [ - 144, - 129 - ], - [ - 149, - 142 - ], - [ - 158, - 65 - ], - [ - 167, - 215 - ], - [ - 171, - 215 - ], - [ - 180, - 138 - ], - [ - 185, - 194 - ], - [ - 189, - 220 - ], - [ - 195, - 62 - ], - [ - 196, - 214 - ], - [ - 202, - 106 - ], - [ - 213, - 215 - ], - [ - 218, - 208 - ], - [ - 222, - 109 - ], - [ - 231, - 228 - ], - [ - 243, - 242 - ], - [ - 253, - 285 - ], - [ - 255, - 326 - ], - [ - 256, - 313 - ], - [ - 257, - 313 - ], - [ - 259, - 261 - ], - [ - 268, - 313 - ], - [ - 274, - 447 - ], - [ - 281, - 328 - ], - [ - 283, - 282 - ], - [ - 290, - 291 - ], - [ - 307, - 333 - ], - [ - 309, - 270 - ], - [ - 320, - 277 - ], - [ - 321, - 322 - ], - [ - 325, - 293 - ], - [ - 327, - 326 - ], - [ - 340, - 341 - ], - [ - 342, - 235 - ], - [ - 348, - 366 - ], - [ - 352, - 366 - ], - [ - 353, - 356 - ], - [ - 357, - 359 - ], - [ - 361, - 366 - ], - [ - 362, - 354 - ], - [ - 364, - 350 - ], - [ - 365, - 349 - ], - [ - 367, - 356 - ], - [ - 368, - 360 - ], - [ - 369, - 363 - ], - [ - 370, - 351 - ], - [ - 371, - 194 - ], - [ - 372, - 173 - ], - [ - 373, - 200 - ], - [ - 374, - 153 - ], - [ - 375, - 436 - ], - [ - 376, - 93 - ], - [ - 377, - 125 - ], - [ - 378, - 220 - ], - [ - 379, - 215 - ], - [ - 380, - 109 - ], - [ - 381, - 205 - ], - [ - 382, - 217 - ], - [ - 383, - 192 - ], - [ - 384, - 219 - ], - [ - 385, - 198 - ], - [ - 386, - 535 - ], - [ - 387, - 126 - ], - [ - 388, - 431 - ], - [ - 389, - 179 - ], - [ - 390, - 170 - ], - [ - 391, - 13 - ], - [ - 392, - 442 - ], - [ - 393, - 593 - ], - [ - 394, - 593 - ], - [ - 407, - 593 - ], - [ - 422, - 593 - ], - [ - 423, - 593 - ], - [ - 424, - 593 - ], - [ - 425, - 593 - ], - [ - 426, - 593 - ], - [ - 427, - 593 - ], - [ - 432, - 455 - ], - [ - 450, - 452 - ], - [ - 463, - 296 - ], - [ - 480, - 440 - ], - [ - 482, - 452 - ], - [ - 490, - 452 - ], - [ - 492, - 455 - ], - [ - 493, - 455 - ], - [ - 494, - 593 - ], - [ - 495, - 593 - ], - [ - 496, - 593 - ], - [ - 497, - 593 - ], - [ - 498, - 593 - ], - [ - 499, - 545 - ], - [ - 500, - 271 - ], - [ - 501, - 344 - ], - [ - 513, - 319 - ], - [ - 514, - 277 - ], - [ - 515, - 139 - ], - [ - 516, - 323 - ], - [ - 517, - 550 - ], - [ - 518, - 51 - ], - [ - 519, - 436 - ], - [ - 520, - 182 - ], - [ - 521, - 106 - ], - [ - 522, - 214 - ], - [ - 523, - 157 - ], - [ - 524, - 162 - ], - [ - 525, - 531 - ], - [ - 526, - 533 - ], - [ - 527, - 106 - ], - [ - 528, - 313 - ], - [ - 529, - 148 - ], - [ - 537, - 547 - ], - [ - 546, - 545 - ], - [ - 562, - 561 - ], - [ - 566, - 558 - ], - [ - 570, - 534 - ], - [ - 573, - 534 - ], - [ - 574, - 488 - ], - [ - 575, - 453 - ], - [ - 576, - 316 - ], - [ - 577, - 312 - ], - [ - 578, - 314 - ], - [ - 579, - 447 - ], - [ - 580, - 593 - ], - [ - 581, - 55 - ], - [ - 582, - 54 - ], - [ - 583, - 182 - ], - [ - 584, - 93 - ], - [ - 585, - 128 - ], - [ - 586, - 170 - ], - [ - 587, - 545 - ], - [ - 588, - 129 - ], - [ - 589, - 107 - ], - [ - 590, - 106 - ], - [ - 591, - 148 - ], - [ - 592, - 558 - ], - [ - 594, - 593 - ], - [ - 595, - 462 - ], - [ - 596, - 453 - ], - [ - 597, - 593 - ] - ], - "normalized_identifiers": [ - "Africa/Abidjan", - "Africa/Accra", - "Africa/Addis_Ababa", - "Africa/Algiers", - "Africa/Asmara", - "Africa/Asmera", - "Africa/Bamako", - "Africa/Bangui", - "Africa/Banjul", - "Africa/Bissau", - "Africa/Blantyre", - "Africa/Brazzaville", - "Africa/Bujumbura", - "Africa/Cairo", - "Africa/Casablanca", - "Africa/Ceuta", - "Africa/Conakry", - "Africa/Dakar", - "Africa/Dar_es_Salaam", - "Africa/Djibouti", - "Africa/Douala", - "Africa/El_Aaiun", - "Africa/Freetown", - "Africa/Gaborone", - "Africa/Harare", - "Africa/Johannesburg", - "Africa/Juba", - "Africa/Kampala", - "Africa/Khartoum", - "Africa/Kigali", - "Africa/Kinshasa", - "Africa/Lagos", - "Africa/Libreville", - "Africa/Lome", - "Africa/Luanda", - "Africa/Lubumbashi", - "Africa/Lusaka", - "Africa/Malabo", - "Africa/Maputo", - "Africa/Maseru", - "Africa/Mbabane", - "Africa/Mogadishu", - "Africa/Monrovia", - "Africa/Nairobi", - "Africa/Ndjamena", - "Africa/Niamey", - "Africa/Nouakchott", - "Africa/Ouagadougou", - "Africa/Porto-Novo", - "Africa/Sao_Tome", - "Africa/Timbuktu", - "Africa/Tripoli", - "Africa/Tunis", - "Africa/Windhoek", - "America/Adak", - "America/Anchorage", - "America/Anguilla", - "America/Antigua", - "America/Araguaina", - "America/Argentina/Buenos_Aires", - "America/Argentina/Catamarca", - "America/Argentina/ComodRivadavia", - "America/Argentina/Cordoba", - "America/Argentina/Jujuy", - "America/Argentina/La_Rioja", - "America/Argentina/Mendoza", - "America/Argentina/Rio_Gallegos", - "America/Argentina/Salta", - "America/Argentina/San_Juan", - "America/Argentina/San_Luis", - "America/Argentina/Tucuman", - "America/Argentina/Ushuaia", - "America/Aruba", - "America/Asuncion", - "America/Atikokan", - "America/Atka", - "America/Bahia", - "America/Bahia_Banderas", - "America/Barbados", - "America/Belem", - "America/Belize", - "America/Blanc-Sablon", - "America/Boa_Vista", - "America/Bogota", - "America/Boise", - "America/Buenos_Aires", - "America/Cambridge_Bay", - "America/Campo_Grande", - "America/Cancun", - "America/Caracas", - "America/Catamarca", - "America/Cayenne", - "America/Cayman", - "America/Chicago", - "America/Chihuahua", - "America/Ciudad_Juarez", - "America/Coral_Harbour", - "America/Cordoba", - "America/Costa_Rica", - "America/Coyhaique", - "America/Creston", - "America/Cuiaba", - "America/Curacao", - "America/Danmarkshavn", - "America/Dawson", - "America/Dawson_Creek", - "America/Denver", - "America/Detroit", - "America/Dominica", - "America/Edmonton", - "America/Eirunepe", - "America/El_Salvador", - "America/Ensenada", - "America/Fort_Nelson", - "America/Fort_Wayne", - "America/Fortaleza", - "America/Glace_Bay", - "America/Godthab", - "America/Goose_Bay", - "America/Grand_Turk", - "America/Grenada", - "America/Guadeloupe", - "America/Guatemala", - "America/Guayaquil", - "America/Guyana", - "America/Halifax", - "America/Havana", - "America/Hermosillo", - "America/Indiana/Indianapolis", - "America/Indiana/Knox", - "America/Indiana/Marengo", - "America/Indiana/Petersburg", - "America/Indiana/Tell_City", - "America/Indiana/Vevay", - "America/Indiana/Vincennes", - "America/Indiana/Winamac", - "America/Indianapolis", - "America/Inuvik", - "America/Iqaluit", - "America/Jamaica", - "America/Jujuy", - "America/Juneau", - "America/Kentucky/Louisville", - "America/Kentucky/Monticello", - "America/Knox_IN", - "America/Kralendijk", - "America/La_Paz", - "America/Lima", - "America/Los_Angeles", - "America/Louisville", - "America/Lower_Princes", - "America/Maceio", - "America/Managua", - "America/Manaus", - "America/Marigot", - "America/Martinique", - "America/Matamoros", - "America/Mazatlan", - "America/Mendoza", - "America/Menominee", - "America/Merida", - "America/Metlakatla", - "America/Mexico_City", - "America/Miquelon", - "America/Moncton", - "America/Monterrey", - "America/Montevideo", - "America/Montreal", - "America/Montserrat", - "America/Nassau", - "America/New_York", - "America/Nipigon", - "America/Nome", - "America/Noronha", - "America/North_Dakota/Beulah", - "America/North_Dakota/Center", - "America/North_Dakota/New_Salem", - "America/Nuuk", - "America/Ojinaga", - "America/Panama", - "America/Pangnirtung", - "America/Paramaribo", - "America/Phoenix", - "America/Port-au-Prince", - "America/Port_of_Spain", - "America/Porto_Acre", - "America/Porto_Velho", - "America/Puerto_Rico", - "America/Punta_Arenas", - "America/Rainy_River", - "America/Rankin_Inlet", - "America/Recife", - "America/Regina", - "America/Resolute", - "America/Rio_Branco", - "America/Rosario", - "America/Santa_Isabel", - "America/Santarem", - "America/Santiago", - "America/Santo_Domingo", - "America/Sao_Paulo", - "America/Scoresbysund", - "America/Shiprock", - "America/Sitka", - "America/St_Barthelemy", - "America/St_Johns", - "America/St_Kitts", - "America/St_Lucia", - "America/St_Thomas", - "America/St_Vincent", - "America/Swift_Current", - "America/Tegucigalpa", - "America/Thule", - "America/Thunder_Bay", - "America/Tijuana", - "America/Toronto", - "America/Tortola", - "America/Vancouver", - "America/Virgin", - "America/Whitehorse", - "America/Winnipeg", - "America/Yakutat", - "America/Yellowknife", - "Antarctica/Casey", - "Antarctica/Davis", - "Antarctica/DumontDUrville", - "Antarctica/Macquarie", - "Antarctica/Mawson", - "Antarctica/McMurdo", - "Antarctica/Palmer", - "Antarctica/Rothera", - "Antarctica/South_Pole", - "Antarctica/Syowa", - "Antarctica/Troll", - "Antarctica/Vostok", - "Arctic/Longyearbyen", - "Asia/Aden", - "Asia/Almaty", - "Asia/Amman", - "Asia/Anadyr", - "Asia/Aqtau", - "Asia/Aqtobe", - "Asia/Ashgabat", - "Asia/Ashkhabad", - "Asia/Atyrau", - "Asia/Baghdad", - "Asia/Bahrain", - "Asia/Baku", - "Asia/Bangkok", - "Asia/Barnaul", - "Asia/Beirut", - "Asia/Bishkek", - "Asia/Brunei", - "Asia/Calcutta", - "Asia/Chita", - "Asia/Choibalsan", - "Asia/Chongqing", - "Asia/Chungking", - "Asia/Colombo", - "Asia/Dacca", - "Asia/Damascus", - "Asia/Dhaka", - "Asia/Dili", - "Asia/Dubai", - "Asia/Dushanbe", - "Asia/Famagusta", - "Asia/Gaza", - "Asia/Hanoi", - "Asia/Harbin", - "Asia/Hebron", - "Asia/Ho_Chi_Minh", - "Asia/Hong_Kong", - "Asia/Hovd", - "Asia/Irkutsk", - "Asia/Istanbul", - "Asia/Jakarta", - "Asia/Jayapura", - "Asia/Jerusalem", - "Asia/Kabul", - "Asia/Kamchatka", - "Asia/Karachi", - "Asia/Kashgar", - "Asia/Kathmandu", - "Asia/Katmandu", - "Asia/Khandyga", - "Asia/Kolkata", - "Asia/Krasnoyarsk", - "Asia/Kuala_Lumpur", - "Asia/Kuching", - "Asia/Kuwait", - "Asia/Macao", - "Asia/Macau", - "Asia/Magadan", - "Asia/Makassar", - "Asia/Manila", - "Asia/Muscat", - "Asia/Nicosia", - "Asia/Novokuznetsk", - "Asia/Novosibirsk", - "Asia/Omsk", - "Asia/Oral", - "Asia/Phnom_Penh", - "Asia/Pontianak", - "Asia/Pyongyang", - "Asia/Qatar", - "Asia/Qostanay", - "Asia/Qyzylorda", - "Asia/Rangoon", - "Asia/Riyadh", - "Asia/Saigon", - "Asia/Sakhalin", - "Asia/Samarkand", - "Asia/Seoul", - "Asia/Shanghai", - "Asia/Singapore", - "Asia/Srednekolymsk", - "Asia/Taipei", - "Asia/Tashkent", - "Asia/Tbilisi", - "Asia/Tehran", - "Asia/Tel_Aviv", - "Asia/Thimbu", - "Asia/Thimphu", - "Asia/Tokyo", - "Asia/Tomsk", - "Asia/Ujung_Pandang", - "Asia/Ulaanbaatar", - "Asia/Ulan_Bator", - "Asia/Urumqi", - "Asia/Ust-Nera", - "Asia/Vientiane", - "Asia/Vladivostok", - "Asia/Yakutsk", - "Asia/Yangon", - "Asia/Yekaterinburg", - "Asia/Yerevan", - "Atlantic/Azores", - "Atlantic/Bermuda", - "Atlantic/Canary", - "Atlantic/Cape_Verde", - "Atlantic/Faeroe", - "Atlantic/Faroe", - "Atlantic/Jan_Mayen", - "Atlantic/Madeira", - "Atlantic/Reykjavik", - "Atlantic/South_Georgia", - "Atlantic/St_Helena", - "Atlantic/Stanley", - "Australia/ACT", - "Australia/Adelaide", - "Australia/Brisbane", - "Australia/Broken_Hill", - "Australia/Canberra", - "Australia/Currie", - "Australia/Darwin", - "Australia/Eucla", - "Australia/Hobart", - "Australia/LHI", - "Australia/Lindeman", - "Australia/Lord_Howe", - "Australia/Melbourne", - "Australia/NSW", - "Australia/North", - "Australia/Perth", - "Australia/Queensland", - "Australia/South", - "Australia/Sydney", - "Australia/Tasmania", - "Australia/Victoria", - "Australia/West", - "Australia/Yancowinna", - "Brazil/Acre", - "Brazil/DeNoronha", - "Brazil/East", - "Brazil/West", - "CET", - "CST6CDT", - "Canada/Atlantic", - "Canada/Central", - "Canada/Eastern", - "Canada/Mountain", - "Canada/Newfoundland", - "Canada/Pacific", - "Canada/Saskatchewan", - "Canada/Yukon", - "Chile/Continental", - "Chile/EasterIsland", - "Cuba", - "EET", - "EST", - "EST5EDT", - "Egypt", - "Eire", - "Etc/GMT", - "Etc/GMT+0", - "Etc/GMT+1", - "Etc/GMT+10", - "Etc/GMT+11", - "Etc/GMT+12", - "Etc/GMT+2", - "Etc/GMT+3", - "Etc/GMT+4", - "Etc/GMT+5", - "Etc/GMT+6", - "Etc/GMT+7", - "Etc/GMT+8", - "Etc/GMT+9", - "Etc/GMT-0", - "Etc/GMT-1", - "Etc/GMT-10", - "Etc/GMT-11", - "Etc/GMT-12", - "Etc/GMT-13", - "Etc/GMT-14", - "Etc/GMT-2", - "Etc/GMT-3", - "Etc/GMT-4", - "Etc/GMT-5", - "Etc/GMT-6", - "Etc/GMT-7", - "Etc/GMT-8", - "Etc/GMT-9", - "Etc/GMT0", - "Etc/Greenwich", - "Etc/UCT", - "Etc/UTC", - "Etc/Universal", - "Etc/Zulu", - "Europe/Amsterdam", - "Europe/Andorra", - "Europe/Astrakhan", - "Europe/Athens", - "Europe/Belfast", - "Europe/Belgrade", - "Europe/Berlin", - "Europe/Bratislava", - "Europe/Brussels", - "Europe/Bucharest", - "Europe/Budapest", - "Europe/Busingen", - "Europe/Chisinau", - "Europe/Copenhagen", - "Europe/Dublin", - "Europe/Gibraltar", - "Europe/Guernsey", - "Europe/Helsinki", - "Europe/Isle_of_Man", - "Europe/Istanbul", - "Europe/Jersey", - "Europe/Kaliningrad", - "Europe/Kiev", - "Europe/Kirov", - "Europe/Kyiv", - "Europe/Lisbon", - "Europe/Ljubljana", - "Europe/London", - "Europe/Luxembourg", - "Europe/Madrid", - "Europe/Malta", - "Europe/Mariehamn", - "Europe/Minsk", - "Europe/Monaco", - "Europe/Moscow", - "Europe/Nicosia", - "Europe/Oslo", - "Europe/Paris", - "Europe/Podgorica", - "Europe/Prague", - "Europe/Riga", - "Europe/Rome", - "Europe/Samara", - "Europe/San_Marino", - "Europe/Sarajevo", - "Europe/Saratov", - "Europe/Simferopol", - "Europe/Skopje", - "Europe/Sofia", - "Europe/Stockholm", - "Europe/Tallinn", - "Europe/Tirane", - "Europe/Tiraspol", - "Europe/Ulyanovsk", - "Europe/Uzhgorod", - "Europe/Vaduz", - "Europe/Vatican", - "Europe/Vienna", - "Europe/Vilnius", - "Europe/Volgograd", - "Europe/Warsaw", - "Europe/Zagreb", - "Europe/Zaporozhye", - "Europe/Zurich", - "GB", - "GB-Eire", - "GMT", - "GMT+0", - "GMT-0", - "GMT0", - "Greenwich", - "HST", - "Hongkong", - "Iceland", - "Indian/Antananarivo", - "Indian/Chagos", - "Indian/Christmas", - "Indian/Cocos", - "Indian/Comoro", - "Indian/Kerguelen", - "Indian/Mahe", - "Indian/Maldives", - "Indian/Mauritius", - "Indian/Mayotte", - "Indian/Reunion", - "Iran", - "Israel", - "Jamaica", - "Japan", - "Kwajalein", - "Libya", - "MET", - "MST", - "MST7MDT", - "Mexico/BajaNorte", - "Mexico/BajaSur", - "Mexico/General", - "NZ", - "NZ-CHAT", - "Navajo", - "PRC", - "PST8PDT", - "Pacific/Apia", - "Pacific/Auckland", - "Pacific/Bougainville", - "Pacific/Chatham", - "Pacific/Chuuk", - "Pacific/Easter", - "Pacific/Efate", - "Pacific/Enderbury", - "Pacific/Fakaofo", - "Pacific/Fiji", - "Pacific/Funafuti", - "Pacific/Galapagos", - "Pacific/Gambier", - "Pacific/Guadalcanal", - "Pacific/Guam", - "Pacific/Honolulu", - "Pacific/Johnston", - "Pacific/Kanton", - "Pacific/Kiritimati", - "Pacific/Kosrae", - "Pacific/Kwajalein", - "Pacific/Majuro", - "Pacific/Marquesas", - "Pacific/Midway", - "Pacific/Nauru", - "Pacific/Niue", - "Pacific/Norfolk", - "Pacific/Noumea", - "Pacific/Pago_Pago", - "Pacific/Palau", - "Pacific/Pitcairn", - "Pacific/Pohnpei", - "Pacific/Ponape", - "Pacific/Port_Moresby", - "Pacific/Rarotonga", - "Pacific/Saipan", - "Pacific/Samoa", - "Pacific/Tahiti", - "Pacific/Tarawa", - "Pacific/Tongatapu", - "Pacific/Truk", - "Pacific/Wake", - "Pacific/Wallis", - "Pacific/Yap", - "Poland", - "Portugal", - "ROC", - "ROK", - "Singapore", - "Turkey", - "UCT", - "US/Alaska", - "US/Aleutian", - "US/Arizona", - "US/Central", - "US/East-Indiana", - "US/Eastern", - "US/Hawaii", - "US/Indiana-Starke", - "US/Michigan", - "US/Mountain", - "US/Pacific", - "US/Samoa", - "UTC", - "Universal", - "W-SU", - "WET", - "Zulu" - ] -} \ No newline at end of file diff --git a/provider/src/data/debug/iana_normalizer.txt b/provider/src/data/debug/iana_normalizer.txt deleted file mode 100644 index 25ff928bd..000000000 --- a/provider/src/data/debug/iana_normalizer.txt +++ /dev/null @@ -1,755 +0,0 @@ -Normalized -========= -Africa/Abidjan -Africa/Accra -Africa/Addis_Ababa -Africa/Algiers -Africa/Asmara -Africa/Asmera -Africa/Bamako -Africa/Bangui -Africa/Banjul -Africa/Bissau -Africa/Blantyre -Africa/Brazzaville -Africa/Bujumbura -Africa/Cairo -Africa/Casablanca -Africa/Ceuta -Africa/Conakry -Africa/Dakar -Africa/Dar_es_Salaam -Africa/Djibouti -Africa/Douala -Africa/El_Aaiun -Africa/Freetown -Africa/Gaborone -Africa/Harare -Africa/Johannesburg -Africa/Juba -Africa/Kampala -Africa/Khartoum -Africa/Kigali -Africa/Kinshasa -Africa/Lagos -Africa/Libreville -Africa/Lome -Africa/Luanda -Africa/Lubumbashi -Africa/Lusaka -Africa/Malabo -Africa/Maputo -Africa/Maseru -Africa/Mbabane -Africa/Mogadishu -Africa/Monrovia -Africa/Nairobi -Africa/Ndjamena -Africa/Niamey -Africa/Nouakchott -Africa/Ouagadougou -Africa/Porto-Novo -Africa/Sao_Tome -Africa/Timbuktu -Africa/Tripoli -Africa/Tunis -Africa/Windhoek -America/Adak -America/Anchorage -America/Anguilla -America/Antigua -America/Araguaina -America/Argentina/Buenos_Aires -America/Argentina/Catamarca -America/Argentina/ComodRivadavia -America/Argentina/Cordoba -America/Argentina/Jujuy -America/Argentina/La_Rioja -America/Argentina/Mendoza -America/Argentina/Rio_Gallegos -America/Argentina/Salta -America/Argentina/San_Juan -America/Argentina/San_Luis -America/Argentina/Tucuman -America/Argentina/Ushuaia -America/Aruba -America/Asuncion -America/Atikokan -America/Atka -America/Bahia -America/Bahia_Banderas -America/Barbados -America/Belem -America/Belize -America/Blanc-Sablon -America/Boa_Vista -America/Bogota -America/Boise -America/Buenos_Aires -America/Cambridge_Bay -America/Campo_Grande -America/Cancun -America/Caracas -America/Catamarca -America/Cayenne -America/Cayman -America/Chicago -America/Chihuahua -America/Ciudad_Juarez -America/Coral_Harbour -America/Cordoba -America/Costa_Rica -America/Coyhaique -America/Creston -America/Cuiaba -America/Curacao -America/Danmarkshavn -America/Dawson -America/Dawson_Creek -America/Denver -America/Detroit -America/Dominica -America/Edmonton -America/Eirunepe -America/El_Salvador -America/Ensenada -America/Fort_Nelson -America/Fort_Wayne -America/Fortaleza -America/Glace_Bay -America/Godthab -America/Goose_Bay -America/Grand_Turk -America/Grenada -America/Guadeloupe -America/Guatemala -America/Guayaquil -America/Guyana -America/Halifax -America/Havana -America/Hermosillo -America/Indiana/Indianapolis -America/Indiana/Knox -America/Indiana/Marengo -America/Indiana/Petersburg -America/Indiana/Tell_City -America/Indiana/Vevay -America/Indiana/Vincennes -America/Indiana/Winamac -America/Indianapolis -America/Inuvik -America/Iqaluit -America/Jamaica -America/Jujuy -America/Juneau -America/Kentucky/Louisville -America/Kentucky/Monticello -America/Knox_IN -America/Kralendijk -America/La_Paz -America/Lima -America/Los_Angeles -America/Louisville -America/Lower_Princes -America/Maceio -America/Managua -America/Manaus -America/Marigot -America/Martinique -America/Matamoros -America/Mazatlan -America/Mendoza -America/Menominee -America/Merida -America/Metlakatla -America/Mexico_City -America/Miquelon -America/Moncton -America/Monterrey -America/Montevideo -America/Montreal -America/Montserrat -America/Nassau -America/New_York -America/Nipigon -America/Nome -America/Noronha -America/North_Dakota/Beulah -America/North_Dakota/Center -America/North_Dakota/New_Salem -America/Nuuk -America/Ojinaga -America/Panama -America/Pangnirtung -America/Paramaribo -America/Phoenix -America/Port-au-Prince -America/Port_of_Spain -America/Porto_Acre -America/Porto_Velho -America/Puerto_Rico -America/Punta_Arenas -America/Rainy_River -America/Rankin_Inlet -America/Recife -America/Regina -America/Resolute -America/Rio_Branco -America/Rosario -America/Santa_Isabel -America/Santarem -America/Santiago -America/Santo_Domingo -America/Sao_Paulo -America/Scoresbysund -America/Shiprock -America/Sitka -America/St_Barthelemy -America/St_Johns -America/St_Kitts -America/St_Lucia -America/St_Thomas -America/St_Vincent -America/Swift_Current -America/Tegucigalpa -America/Thule -America/Thunder_Bay -America/Tijuana -America/Toronto -America/Tortola -America/Vancouver -America/Virgin -America/Whitehorse -America/Winnipeg -America/Yakutat -America/Yellowknife -Antarctica/Casey -Antarctica/Davis -Antarctica/DumontDUrville -Antarctica/Macquarie -Antarctica/Mawson -Antarctica/McMurdo -Antarctica/Palmer -Antarctica/Rothera -Antarctica/South_Pole -Antarctica/Syowa -Antarctica/Troll -Antarctica/Vostok -Arctic/Longyearbyen -Asia/Aden -Asia/Almaty -Asia/Amman -Asia/Anadyr -Asia/Aqtau -Asia/Aqtobe -Asia/Ashgabat -Asia/Ashkhabad -Asia/Atyrau -Asia/Baghdad -Asia/Bahrain -Asia/Baku -Asia/Bangkok -Asia/Barnaul -Asia/Beirut -Asia/Bishkek -Asia/Brunei -Asia/Calcutta -Asia/Chita -Asia/Choibalsan -Asia/Chongqing -Asia/Chungking -Asia/Colombo -Asia/Dacca -Asia/Damascus -Asia/Dhaka -Asia/Dili -Asia/Dubai -Asia/Dushanbe -Asia/Famagusta -Asia/Gaza -Asia/Hanoi -Asia/Harbin -Asia/Hebron -Asia/Ho_Chi_Minh -Asia/Hong_Kong -Asia/Hovd -Asia/Irkutsk -Asia/Istanbul -Asia/Jakarta -Asia/Jayapura -Asia/Jerusalem -Asia/Kabul -Asia/Kamchatka -Asia/Karachi -Asia/Kashgar -Asia/Kathmandu -Asia/Katmandu -Asia/Khandyga -Asia/Kolkata -Asia/Krasnoyarsk -Asia/Kuala_Lumpur -Asia/Kuching -Asia/Kuwait -Asia/Macao -Asia/Macau -Asia/Magadan -Asia/Makassar -Asia/Manila -Asia/Muscat -Asia/Nicosia -Asia/Novokuznetsk -Asia/Novosibirsk -Asia/Omsk -Asia/Oral -Asia/Phnom_Penh -Asia/Pontianak -Asia/Pyongyang -Asia/Qatar -Asia/Qostanay -Asia/Qyzylorda -Asia/Rangoon -Asia/Riyadh -Asia/Saigon -Asia/Sakhalin -Asia/Samarkand -Asia/Seoul -Asia/Shanghai -Asia/Singapore -Asia/Srednekolymsk -Asia/Taipei -Asia/Tashkent -Asia/Tbilisi -Asia/Tehran -Asia/Tel_Aviv -Asia/Thimbu -Asia/Thimphu -Asia/Tokyo -Asia/Tomsk -Asia/Ujung_Pandang -Asia/Ulaanbaatar -Asia/Ulan_Bator -Asia/Urumqi -Asia/Ust-Nera -Asia/Vientiane -Asia/Vladivostok -Asia/Yakutsk -Asia/Yangon -Asia/Yekaterinburg -Asia/Yerevan -Atlantic/Azores -Atlantic/Bermuda -Atlantic/Canary -Atlantic/Cape_Verde -Atlantic/Faeroe -Atlantic/Faroe -Atlantic/Jan_Mayen -Atlantic/Madeira -Atlantic/Reykjavik -Atlantic/South_Georgia -Atlantic/St_Helena -Atlantic/Stanley -Australia/ACT -Australia/Adelaide -Australia/Brisbane -Australia/Broken_Hill -Australia/Canberra -Australia/Currie -Australia/Darwin -Australia/Eucla -Australia/Hobart -Australia/LHI -Australia/Lindeman -Australia/Lord_Howe -Australia/Melbourne -Australia/NSW -Australia/North -Australia/Perth -Australia/Queensland -Australia/South -Australia/Sydney -Australia/Tasmania -Australia/Victoria -Australia/West -Australia/Yancowinna -Brazil/Acre -Brazil/DeNoronha -Brazil/East -Brazil/West -CET -CST6CDT -Canada/Atlantic -Canada/Central -Canada/Eastern -Canada/Mountain -Canada/Newfoundland -Canada/Pacific -Canada/Saskatchewan -Canada/Yukon -Chile/Continental -Chile/EasterIsland -Cuba -EET -EST -EST5EDT -Egypt -Eire -Etc/GMT -Etc/GMT+0 -Etc/GMT+1 -Etc/GMT+10 -Etc/GMT+11 -Etc/GMT+12 -Etc/GMT+2 -Etc/GMT+3 -Etc/GMT+4 -Etc/GMT+5 -Etc/GMT+6 -Etc/GMT+7 -Etc/GMT+8 -Etc/GMT+9 -Etc/GMT-0 -Etc/GMT-1 -Etc/GMT-10 -Etc/GMT-11 -Etc/GMT-12 -Etc/GMT-13 -Etc/GMT-14 -Etc/GMT-2 -Etc/GMT-3 -Etc/GMT-4 -Etc/GMT-5 -Etc/GMT-6 -Etc/GMT-7 -Etc/GMT-8 -Etc/GMT-9 -Etc/GMT0 -Etc/Greenwich -Etc/UCT -Etc/UTC -Etc/Universal -Etc/Zulu -Europe/Amsterdam -Europe/Andorra -Europe/Astrakhan -Europe/Athens -Europe/Belfast -Europe/Belgrade -Europe/Berlin -Europe/Bratislava -Europe/Brussels -Europe/Bucharest -Europe/Budapest -Europe/Busingen -Europe/Chisinau -Europe/Copenhagen -Europe/Dublin -Europe/Gibraltar -Europe/Guernsey -Europe/Helsinki -Europe/Isle_of_Man -Europe/Istanbul -Europe/Jersey -Europe/Kaliningrad -Europe/Kiev -Europe/Kirov -Europe/Kyiv -Europe/Lisbon -Europe/Ljubljana -Europe/London -Europe/Luxembourg -Europe/Madrid -Europe/Malta -Europe/Mariehamn -Europe/Minsk -Europe/Monaco -Europe/Moscow -Europe/Nicosia -Europe/Oslo -Europe/Paris -Europe/Podgorica -Europe/Prague -Europe/Riga -Europe/Rome -Europe/Samara -Europe/San_Marino -Europe/Sarajevo -Europe/Saratov -Europe/Simferopol -Europe/Skopje -Europe/Sofia -Europe/Stockholm -Europe/Tallinn -Europe/Tirane -Europe/Tiraspol -Europe/Ulyanovsk -Europe/Uzhgorod -Europe/Vaduz -Europe/Vatican -Europe/Vienna -Europe/Vilnius -Europe/Volgograd -Europe/Warsaw -Europe/Zagreb -Europe/Zaporozhye -Europe/Zurich -GB -GB-Eire -GMT -GMT+0 -GMT-0 -GMT0 -Greenwich -HST -Hongkong -Iceland -Indian/Antananarivo -Indian/Chagos -Indian/Christmas -Indian/Cocos -Indian/Comoro -Indian/Kerguelen -Indian/Mahe -Indian/Maldives -Indian/Mauritius -Indian/Mayotte -Indian/Reunion -Iran -Israel -Jamaica -Japan -Kwajalein -Libya -MET -MST -MST7MDT -Mexico/BajaNorte -Mexico/BajaSur -Mexico/General -NZ -NZ-CHAT -Navajo -PRC -PST8PDT -Pacific/Apia -Pacific/Auckland -Pacific/Bougainville -Pacific/Chatham -Pacific/Chuuk -Pacific/Easter -Pacific/Efate -Pacific/Enderbury -Pacific/Fakaofo -Pacific/Fiji -Pacific/Funafuti -Pacific/Galapagos -Pacific/Gambier -Pacific/Guadalcanal -Pacific/Guam -Pacific/Honolulu -Pacific/Johnston -Pacific/Kanton -Pacific/Kiritimati -Pacific/Kosrae -Pacific/Kwajalein -Pacific/Majuro -Pacific/Marquesas -Pacific/Midway -Pacific/Nauru -Pacific/Niue -Pacific/Norfolk -Pacific/Noumea -Pacific/Pago_Pago -Pacific/Palau -Pacific/Pitcairn -Pacific/Pohnpei -Pacific/Ponape -Pacific/Port_Moresby -Pacific/Rarotonga -Pacific/Saipan -Pacific/Samoa -Pacific/Tahiti -Pacific/Tarawa -Pacific/Tongatapu -Pacific/Truk -Pacific/Wake -Pacific/Wallis -Pacific/Yap -Poland -Portugal -ROC -ROK -Singapore -Turkey -UCT -US/Alaska -US/Aleutian -US/Arizona -US/Central -US/East-Indiana -US/Eastern -US/Hawaii -US/Indiana-Starke -US/Michigan -US/Mountain -US/Pacific -US/Samoa -UTC -Universal -W-SU -WET -Zulu - -Non canonical identifiers -========= -Africa/Asmera => Africa/Asmara -Africa/Timbuktu => Africa/Bamako -America/Argentina/ComodRivadavia => America/Argentina/Catamarca -America/Atka => America/Adak -America/Buenos_Aires => America/Argentina/Buenos_Aires -America/Catamarca => America/Argentina/Catamarca -America/Coral_Harbour => America/Atikokan -America/Cordoba => America/Argentina/Cordoba -America/Ensenada => America/Tijuana -America/Fort_Wayne => America/Indiana/Indianapolis -America/Godthab => America/Nuuk -America/Indianapolis => America/Indiana/Indianapolis -America/Jujuy => America/Argentina/Jujuy -America/Knox_IN => America/Indiana/Knox -America/Louisville => America/Kentucky/Louisville -America/Mendoza => America/Argentina/Mendoza -America/Montreal => America/Toronto -America/Nipigon => America/Toronto -America/Pangnirtung => America/Iqaluit -America/Porto_Acre => America/Rio_Branco -America/Rainy_River => America/Winnipeg -America/Rosario => America/Argentina/Cordoba -America/Santa_Isabel => America/Tijuana -America/Shiprock => America/Denver -America/Thunder_Bay => America/Toronto -America/Virgin => America/St_Thomas -America/Yellowknife => America/Edmonton -Antarctica/South_Pole => Antarctica/McMurdo -Asia/Ashkhabad => Asia/Ashgabat -Asia/Calcutta => Asia/Kolkata -Asia/Choibalsan => Asia/Ulaanbaatar -Asia/Chongqing => Asia/Shanghai -Asia/Chungking => Asia/Shanghai -Asia/Dacca => Asia/Dhaka -Asia/Harbin => Asia/Shanghai -Asia/Istanbul => Europe/Istanbul -Asia/Kashgar => Asia/Urumqi -Asia/Katmandu => Asia/Kathmandu -Asia/Macao => Asia/Macau -Asia/Rangoon => Asia/Yangon -Asia/Saigon => Asia/Ho_Chi_Minh -Asia/Tel_Aviv => Asia/Jerusalem -Asia/Thimbu => Asia/Thimphu -Asia/Ujung_Pandang => Asia/Makassar -Asia/Ulan_Bator => Asia/Ulaanbaatar -Atlantic/Faeroe => Atlantic/Faroe -Atlantic/Jan_Mayen => Arctic/Longyearbyen -Australia/ACT => Australia/Sydney -Australia/Canberra => Australia/Sydney -Australia/Currie => Australia/Hobart -Australia/LHI => Australia/Lord_Howe -Australia/NSW => Australia/Sydney -Australia/North => Australia/Darwin -Australia/Queensland => Australia/Brisbane -Australia/South => Australia/Adelaide -Australia/Tasmania => Australia/Hobart -Australia/Victoria => Australia/Melbourne -Australia/West => Australia/Perth -Australia/Yancowinna => Australia/Broken_Hill -Brazil/Acre => America/Rio_Branco -Brazil/DeNoronha => America/Noronha -Brazil/East => America/Sao_Paulo -Brazil/West => America/Manaus -CET => Europe/Brussels -CST6CDT => America/Chicago -Canada/Atlantic => America/Halifax -Canada/Central => America/Winnipeg -Canada/Eastern => America/Toronto -Canada/Mountain => America/Edmonton -Canada/Newfoundland => America/St_Johns -Canada/Pacific => America/Vancouver -Canada/Saskatchewan => America/Regina -Canada/Yukon => America/Whitehorse -Chile/Continental => America/Santiago -Chile/EasterIsland => Pacific/Easter -Cuba => America/Havana -EET => Europe/Athens -EST => America/Panama -EST5EDT => America/New_York -Egypt => Africa/Cairo -Eire => Europe/Dublin -Etc/GMT => UTC -Etc/GMT+0 => UTC -Etc/GMT-0 => UTC -Etc/GMT0 => UTC -Etc/Greenwich => UTC -Etc/UCT => UTC -Etc/UTC => UTC -Etc/Universal => UTC -Etc/Zulu => UTC -Europe/Belfast => Europe/London -Europe/Kiev => Europe/Kyiv -Europe/Nicosia => Asia/Nicosia -Europe/Tiraspol => Europe/Chisinau -Europe/Uzhgorod => Europe/Kyiv -Europe/Zaporozhye => Europe/Kyiv -GB => Europe/London -GB-Eire => Europe/London -GMT => UTC -GMT+0 => UTC -GMT-0 => UTC -GMT0 => UTC -Greenwich => UTC -HST => Pacific/Honolulu -Hongkong => Asia/Hong_Kong -Iceland => Atlantic/Reykjavik -Iran => Asia/Tehran -Israel => Asia/Jerusalem -Jamaica => America/Jamaica -Japan => Asia/Tokyo -Kwajalein => Pacific/Kwajalein -Libya => Africa/Tripoli -MET => Europe/Brussels -MST => America/Phoenix -MST7MDT => America/Denver -Mexico/BajaNorte => America/Tijuana -Mexico/BajaSur => America/Mazatlan -Mexico/General => America/Mexico_City -NZ => Pacific/Auckland -NZ-CHAT => Pacific/Chatham -Navajo => America/Denver -PRC => Asia/Shanghai -PST8PDT => America/Los_Angeles -Pacific/Enderbury => Pacific/Kanton -Pacific/Johnston => Pacific/Honolulu -Pacific/Ponape => Pacific/Pohnpei -Pacific/Samoa => Pacific/Pago_Pago -Pacific/Truk => Pacific/Chuuk -Pacific/Yap => Pacific/Chuuk -Poland => Europe/Warsaw -Portugal => Europe/Lisbon -ROC => Asia/Taipei -ROK => Asia/Seoul -Singapore => Asia/Singapore -Turkey => Europe/Istanbul -UCT => UTC -US/Alaska => America/Anchorage -US/Aleutian => America/Adak -US/Arizona => America/Phoenix -US/Central => America/Chicago -US/East-Indiana => America/Indiana/Indianapolis -US/Eastern => America/New_York -US/Hawaii => Pacific/Honolulu -US/Indiana-Starke => America/Indiana/Knox -US/Michigan => America/Detroit -US/Mountain => America/Denver -US/Pacific => America/Los_Angeles -US/Samoa => Pacific/Pago_Pago -Universal => UTC -W-SU => Europe/Moscow -WET => Europe/Lisbon -Zulu => UTC diff --git a/provider/src/data/debug/zoneinfo/map.json b/provider/src/data/debug/zoneinfo/map.json deleted file mode 100644 index fdeb6819f..000000000 --- a/provider/src/data/debug/zoneinfo/map.json +++ /dev/null @@ -1,600 +0,0 @@ -{ - "africa/abidjan": "tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json", - "africa/accra": "tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json", - "africa/addis_ababa": "tzif-486e9282debc62a3-46e6f605f156885a.json", - "africa/algiers": "tzif-df3a174a6f1304b9-f75548fda320ff46.json", - "africa/asmara": "tzif-486e9282debc62a3-46e6f605f156885a.json", - "africa/asmera": "tzif-486e9282debc62a3-46e6f605f156885a.json", - "africa/bamako": "tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json", - "africa/bangui": "tzif-aba73c12b2e7f46-a8730180f688e132.json", - "africa/banjul": "tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json", - "africa/bissau": "tzif-84569b5d12891e1e-4073c6842e3e27.json", - "africa/blantyre": "tzif-14cdf6863a8e2179-7a81455c834778e9.json", - "africa/brazzaville": "tzif-aba73c12b2e7f46-a8730180f688e132.json", - "africa/bujumbura": "tzif-14cdf6863a8e2179-7a81455c834778e9.json", - "africa/cairo": "tzif-f0d38f589f1464b7-2390a2d2ea508547.json", - "africa/casablanca": "tzif-70c6eef1cba9528e-5199b0504e9a3124.json", - "africa/ceuta": "tzif-bd05cebe8eecfa2c-3473e273e629053b.json", - "africa/conakry": "tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json", - "africa/dakar": "tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json", - "africa/dar_es_salaam": "tzif-486e9282debc62a3-46e6f605f156885a.json", - "africa/djibouti": "tzif-486e9282debc62a3-46e6f605f156885a.json", - "africa/douala": "tzif-aba73c12b2e7f46-a8730180f688e132.json", - "africa/el_aaiun": "tzif-2b407bee2bf8cbea-da8810ae536ff8ea.json", - "africa/freetown": "tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json", - "africa/gaborone": "tzif-14cdf6863a8e2179-7a81455c834778e9.json", - "africa/harare": "tzif-14cdf6863a8e2179-7a81455c834778e9.json", - "africa/johannesburg": "tzif-59d5e08cb19672f5-b7f671d6b920b900.json", - "africa/juba": "tzif-66fc406d3b90ff90-3c65fcd4692120b.json", - "africa/kampala": "tzif-486e9282debc62a3-46e6f605f156885a.json", - "africa/khartoum": "tzif-25763d8b26764a7a-a87ab997611273f.json", - "africa/kigali": "tzif-14cdf6863a8e2179-7a81455c834778e9.json", - "africa/kinshasa": "tzif-aba73c12b2e7f46-a8730180f688e132.json", - "africa/lagos": "tzif-aba73c12b2e7f46-a8730180f688e132.json", - "africa/libreville": "tzif-aba73c12b2e7f46-a8730180f688e132.json", - "africa/lome": "tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json", - "africa/luanda": "tzif-aba73c12b2e7f46-a8730180f688e132.json", - "africa/lubumbashi": "tzif-14cdf6863a8e2179-7a81455c834778e9.json", - "africa/lusaka": "tzif-14cdf6863a8e2179-7a81455c834778e9.json", - "africa/malabo": "tzif-aba73c12b2e7f46-a8730180f688e132.json", - "africa/maputo": "tzif-14cdf6863a8e2179-7a81455c834778e9.json", - "africa/maseru": "tzif-59d5e08cb19672f5-b7f671d6b920b900.json", - "africa/mbabane": "tzif-59d5e08cb19672f5-b7f671d6b920b900.json", - "africa/mogadishu": "tzif-486e9282debc62a3-46e6f605f156885a.json", - "africa/monrovia": "tzif-f842f34f4c14fee1-2341c229850c4cda.json", - "africa/nairobi": "tzif-486e9282debc62a3-46e6f605f156885a.json", - "africa/ndjamena": "tzif-24b250ef0928a9e9-5999d4be7c42fb8f.json", - "africa/niamey": "tzif-aba73c12b2e7f46-a8730180f688e132.json", - "africa/nouakchott": "tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json", - "africa/ouagadougou": "tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json", - "africa/porto-novo": "tzif-aba73c12b2e7f46-a8730180f688e132.json", - "africa/sao_tome": "tzif-7aa0aebc84b44c67-f375627c14fa2115.json", - "africa/timbuktu": "tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json", - "africa/tripoli": "tzif-81a0c2bb7c8a41da-f88cf59346e694a5.json", - "africa/tunis": "tzif-19d0e567d48830e5-342c0f7d47956e28.json", - "africa/windhoek": "tzif-99cdd052561a0879-453a7640c899c432.json", - "america/adak": "tzif-2450804cbdb4245e-ed50e5bf669def5d.json", - "america/anchorage": "tzif-d4999f54d6ffa1ff-6c09ad333694e2e2.json", - "america/anguilla": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/antigua": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/araguaina": "tzif-75a476630c4f3c06-e72c659d6de7a6e3.json", - "america/argentina/buenos_aires": "tzif-24bc4f701e560e8f-e2e836c44183123c.json", - "america/argentina/catamarca": "tzif-a2c4636cb2de823b-b5a0b9670b5a43f5.json", - "america/argentina/comodrivadavia": "tzif-a2c4636cb2de823b-b5a0b9670b5a43f5.json", - "america/argentina/cordoba": "tzif-83ab6f3e7a54b242-c24ad4c6c2bb4824.json", - "america/argentina/jujuy": "tzif-c0a7b3c45458ac17-ba490af355c677a5.json", - "america/argentina/la_rioja": "tzif-c7a9617c25e2eb1a-a45856d769ed8bd1.json", - "america/argentina/mendoza": "tzif-fd03910821368f68-967a7c79ce4382de.json", - "america/argentina/rio_gallegos": "tzif-edc11c9a67454353-52365966a71b0651.json", - "america/argentina/salta": "tzif-26ac36da2732c840-6194f9b281a9daa7.json", - "america/argentina/san_juan": "tzif-f5b99738d99ddd8c-506c03c69b7aff28.json", - "america/argentina/san_luis": "tzif-a3bbf95d113466c0-5f6e6cbbba0b7216.json", - "america/argentina/tucuman": "tzif-715448d734f9507a-7302d18d11a181dd.json", - "america/argentina/ushuaia": "tzif-380c01b13aae6590-c452e791254501.json", - "america/aruba": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/asuncion": "tzif-9bd926151a997a3e-6a4f459925921a24.json", - "america/atikokan": "tzif-6fbdbfed85292c81-a2a3eeb444b4a763.json", - "america/atka": "tzif-2450804cbdb4245e-ed50e5bf669def5d.json", - "america/bahia": "tzif-a442eead4fdb53a5-d717fcfdaf2d6816.json", - "america/bahia_banderas": "tzif-ef074bbbac9f5764-a95f24022aaf5ee6.json", - "america/barbados": "tzif-5060a985014097b1-b97674a55f240560.json", - "america/belem": "tzif-93ba37d78a84866e-4c82d79d9fbe1b20.json", - "america/belize": "tzif-b9b18c55e2cd4d53-2df872c11ad74ffc.json", - "america/blanc-sablon": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/boa_vista": "tzif-e12ae166d8468131-cc2618ea05d8e04.json", - "america/bogota": "tzif-e20ebf54a807fe0e-21908c60644da78a.json", - "america/boise": "tzif-70408e1d981309b7-f46acc01dc93a185.json", - "america/buenos_aires": "tzif-24bc4f701e560e8f-e2e836c44183123c.json", - "america/cambridge_bay": "tzif-3cc8439b3e85f059-ae8266620634840.json", - "america/campo_grande": "tzif-f677bd8d940386cc-514fff43e36a2f3.json", - "america/cancun": "tzif-6fbdea510dc8bdff-1c377d454abefd4b.json", - "america/caracas": "tzif-4529e4629acf0366-8a98a4f342fcdd5c.json", - "america/catamarca": "tzif-a2c4636cb2de823b-b5a0b9670b5a43f5.json", - "america/cayenne": "tzif-c3aa55f145295944-b4abe09b076130a1.json", - "america/cayman": "tzif-6fbdbfed85292c81-a2a3eeb444b4a763.json", - "america/chicago": "tzif-3a5a827f28d118e9-ce1a66b62f86f6b6.json", - "america/chihuahua": "tzif-a685965c91f5b79b-c4073397934355b8.json", - "america/ciudad_juarez": "tzif-2c1bb7953877feff-7c31ecf781243146.json", - "america/coral_harbour": "tzif-6fbdbfed85292c81-a2a3eeb444b4a763.json", - "america/cordoba": "tzif-83ab6f3e7a54b242-c24ad4c6c2bb4824.json", - "america/costa_rica": "tzif-bdd491f43b0c1c85-1ff1dff6259853a6.json", - "america/coyhaique": "tzif-eb9179abb91c8435-a9dd7a54e10fafd1.json", - "america/creston": "tzif-a3214de8e358efe8-599436ece4415d29.json", - "america/cuiaba": "tzif-be9bc4833f21d33b-3ba3edd32c70ba0b.json", - "america/curacao": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/danmarkshavn": "tzif-7776a42ce751a29e-3bde63b22d9189c.json", - "america/dawson": "tzif-1eff85dd787ed3a1-78246c4d5a044c0b.json", - "america/dawson_creek": "tzif-1a285e17b7751f38-f446adc8bb75b79d.json", - "america/denver": "tzif-50fc3fea132b4f4c-b7cbf9b6d86ba04f.json", - "america/detroit": "tzif-f8baa073f0e62ab0-3710bd5eade125b5.json", - "america/dominica": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/edmonton": "tzif-3a6fecb09c143b25-69e62db706dcf368.json", - "america/eirunepe": "tzif-b785c09bc525b515-9932a5fd4cfc27a5.json", - "america/el_salvador": "tzif-425a92f6316d948f-4f954c3bee3a5359.json", - "america/ensenada": "tzif-3fc16258c94fd1bd-ada83e71d02884df.json", - "america/fort_nelson": "tzif-4891d41993ed3f5f-d46a2a9dfaea5f49.json", - "america/fort_wayne": "tzif-754b9e4bdb20aa95-77c7439359a52211.json", - "america/fortaleza": "tzif-3567a65ce3b07b4a-f971fb2d233e39c4.json", - "america/glace_bay": "tzif-55bb5ee9b0a529a6-98d21d4ca15517ce.json", - "america/godthab": "tzif-5e245c7be541fe52-ff12499b7e2497cc.json", - "america/goose_bay": "tzif-ffd87e4e007fc8e2-d43988e2f0a4e004.json", - "america/grand_turk": "tzif-cec2538008230fcd-ccebd08eb7ebe4cc.json", - "america/grenada": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/guadeloupe": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/guatemala": "tzif-a187ee64c8fae572-747e8c9286c7145e.json", - "america/guayaquil": "tzif-dd90c0bd2a5d5bcb-2aa25dc1cf531605.json", - "america/guyana": "tzif-38d88ef47726082c-86b88cdb491ca221.json", - "america/halifax": "tzif-ca31f6cb7d44b091-e3b00a5eecc4d20e.json", - "america/havana": "tzif-d28e0bb7485a8522-8a404ad1261c36fd.json", - "america/hermosillo": "tzif-69530af9af6cd0cb-266a2af4d1028345.json", - "america/indiana/indianapolis": "tzif-754b9e4bdb20aa95-77c7439359a52211.json", - "america/indiana/knox": "tzif-fc9fd017e19a24e0-d652255d68c25ab0.json", - "america/indiana/marengo": "tzif-1146d998a660d8a7-8846a8ab80ddc60d.json", - "america/indiana/petersburg": "tzif-26aecc98f9d83045-70b5f49db89f476d.json", - "america/indiana/tell_city": "tzif-bbfc9e9111217c11-8a6bfc73823083b1.json", - "america/indiana/vevay": "tzif-be7c1ce9358259b9-dd8dbb8792edcde4.json", - "america/indiana/vincennes": "tzif-f7b886dc80987d1f-7299122f555d393.json", - "america/indiana/winamac": "tzif-8494d6017f05e49d-254b8901f64a11d0.json", - "america/indianapolis": "tzif-754b9e4bdb20aa95-77c7439359a52211.json", - "america/inuvik": "tzif-9b4491a5a7233cc3-f9e28623cf792cec.json", - "america/iqaluit": "tzif-1dd142eb22754e92-a1483c5f2954e641.json", - "america/jamaica": "tzif-98fb8731f72daeb6-ed03dfe4cb71dab0.json", - "america/jujuy": "tzif-c0a7b3c45458ac17-ba490af355c677a5.json", - "america/juneau": "tzif-8fec2819cc677405-41b20931ae9a4c40.json", - "america/kentucky/louisville": "tzif-7599edfd11a3db64-addf895f655cd955.json", - "america/kentucky/monticello": "tzif-f87d2aa5dfe5efe9-a9ae0f5629749e28.json", - "america/knox_in": "tzif-fc9fd017e19a24e0-d652255d68c25ab0.json", - "america/kralendijk": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/la_paz": "tzif-66a5515c6139ad2d-b15540da5416d9d.json", - "america/lima": "tzif-fe6e0efb644eced9-95ac36e743963528.json", - "america/los_angeles": "tzif-effb0bd5efab2bad-24e3b68722ec3ffd.json", - "america/louisville": "tzif-7599edfd11a3db64-addf895f655cd955.json", - "america/lower_princes": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/maceio": "tzif-206d649fad594120-e8f7dbba68660182.json", - "america/managua": "tzif-fbccf04b5b2fd7f2-7c4513b8357993a2.json", - "america/manaus": "tzif-8b129baceef3898a-2b8a55dc1e3a09f6.json", - "america/marigot": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/martinique": "tzif-f757031187208623-bbd51b69dad6d77c.json", - "america/matamoros": "tzif-be07532f1af7dccb-c46363544856c51a.json", - "america/mazatlan": "tzif-40fb52b19ef81b1d-e605f3c58f3339e9.json", - "america/mendoza": "tzif-fd03910821368f68-967a7c79ce4382de.json", - "america/menominee": "tzif-46dd3b15bf889536-f43b98b1f4ca439c.json", - "america/merida": "tzif-3d390ef79718594a-824dbf7dde31521a.json", - "america/metlakatla": "tzif-5d69c15d2c4f26ae-c8cb897f97bb314e.json", - "america/mexico_city": "tzif-95eb641ddc74061f-48fa3b19778decc4.json", - "america/miquelon": "tzif-ffb42884e83683a9-9444a824bd2f74b7.json", - "america/moncton": "tzif-aa6fbecd6b3089a1-e904f94f6536baa5.json", - "america/monterrey": "tzif-3234542952508833-29d7170294df969c.json", - "america/montevideo": "tzif-bda89ec29d33a428-5e5283a95520799b.json", - "america/montreal": "tzif-ed29bf9f15004c8a-e0746bbdddd348c2.json", - "america/montserrat": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/nassau": "tzif-ed29bf9f15004c8a-e0746bbdddd348c2.json", - "america/new_york": "tzif-3994d21beae7c7b6-3a834f9ef48b6c6c.json", - "america/nipigon": "tzif-ed29bf9f15004c8a-e0746bbdddd348c2.json", - "america/nome": "tzif-480b0a55dd7bf29e-6157240ddb0d1a76.json", - "america/noronha": "tzif-c17291eb667fe274-9c32ee5720049b17.json", - "america/north_dakota/beulah": "tzif-f5114ea1ad21a447-2c4fc2506bcab8f1.json", - "america/north_dakota/center": "tzif-c4897a4741bd9e82-683561b8f9f17d89.json", - "america/north_dakota/new_salem": "tzif-239c7722f428fac8-a2c18d265a771275.json", - "america/nuuk": "tzif-5e245c7be541fe52-ff12499b7e2497cc.json", - "america/ojinaga": "tzif-7ba4aaa7dba09bb0-2aa6fb9f2a4ab805.json", - "america/panama": "tzif-6fbdbfed85292c81-a2a3eeb444b4a763.json", - "america/pangnirtung": "tzif-1dd142eb22754e92-a1483c5f2954e641.json", - "america/paramaribo": "tzif-2a9b3a635fc27340-81046b0173029cfd.json", - "america/phoenix": "tzif-a3214de8e358efe8-599436ece4415d29.json", - "america/port-au-prince": "tzif-273d77751416ce66-9d1655bf8f3b084b.json", - "america/port_of_spain": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/porto_acre": "tzif-90e0499f7b80422b-73d31a89f022a14f.json", - "america/porto_velho": "tzif-609a1c759abb0f9e-553eae2fe9cd2dba.json", - "america/puerto_rico": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/punta_arenas": "tzif-7d7635957a94c158-766ce2696284ce25.json", - "america/rainy_river": "tzif-bad7f01dd3f01a92-4e95b98a659c32dc.json", - "america/rankin_inlet": "tzif-12ced9fe919d8b6-d0ee384123533a5f.json", - "america/recife": "tzif-7481a99701104a1c-42dd4c78895fac48.json", - "america/regina": "tzif-f61469e5df5071ba-2c45e3f2d4f2b99e.json", - "america/resolute": "tzif-87ef4dab5f3e3941-c86ed1ccc3e5a080.json", - "america/rio_branco": "tzif-90e0499f7b80422b-73d31a89f022a14f.json", - "america/rosario": "tzif-83ab6f3e7a54b242-c24ad4c6c2bb4824.json", - "america/santa_isabel": "tzif-3fc16258c94fd1bd-ada83e71d02884df.json", - "america/santarem": "tzif-8e605032c3ce6342-8e8c475fa3f937cd.json", - "america/santiago": "tzif-ce802c28d3beb1b-ba901eac8e518953.json", - "america/santo_domingo": "tzif-ffd87968a303e340-28f6b9547e3e9a2.json", - "america/sao_paulo": "tzif-dc8ea6d022a7ebec-ad1e97b20a9ac2d1.json", - "america/scoresbysund": "tzif-806417e5a9e6e27a-f24440da9fb1e04e.json", - "america/shiprock": "tzif-50fc3fea132b4f4c-b7cbf9b6d86ba04f.json", - "america/sitka": "tzif-768158f1c3d3089e-dfea3469a05d6339.json", - "america/st_barthelemy": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/st_johns": "tzif-916c7f697e6af49e-c0ec219c595d0da3.json", - "america/st_kitts": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/st_lucia": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/st_thomas": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/st_vincent": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/swift_current": "tzif-3d5473248adfd22d-1b9cabbb6c6a4b3f.json", - "america/tegucigalpa": "tzif-e5822ac52a06a527-178271b8801d30a4.json", - "america/thule": "tzif-99ce61a08c1199af-9158ca2a0d4ddb4d.json", - "america/thunder_bay": "tzif-ed29bf9f15004c8a-e0746bbdddd348c2.json", - "america/tijuana": "tzif-3fc16258c94fd1bd-ada83e71d02884df.json", - "america/toronto": "tzif-ed29bf9f15004c8a-e0746bbdddd348c2.json", - "america/tortola": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/vancouver": "tzif-43c01a519dcad360-966c5ee1f11e2b48.json", - "america/virgin": "tzif-7ec2120f35e8ce46-7aa687d9d0741907.json", - "america/whitehorse": "tzif-87649f3d059a10f2-f48f0ec47501bcd5.json", - "america/winnipeg": "tzif-bad7f01dd3f01a92-4e95b98a659c32dc.json", - "america/yakutat": "tzif-33db81d7f03c072e-cf26af3831762b0b.json", - "america/yellowknife": "tzif-3a6fecb09c143b25-69e62db706dcf368.json", - "antarctica/casey": "tzif-e65fa49c7674041-4eb385a4f2f10599.json", - "antarctica/davis": "tzif-f2238fc53b0fff96-a27b14841dab0b54.json", - "antarctica/dumontdurville": "tzif-1ede513c242ae08-632ba74e72cfe8a5.json", - "antarctica/macquarie": "tzif-f9736e8dcd3eb5de-8e89d1e091320c52.json", - "antarctica/mawson": "tzif-fd823ec71e5980ce-61ce31daf994c234.json", - "antarctica/mcmurdo": "tzif-1939cc3520b8dae8-22de378a60a74427.json", - "antarctica/palmer": "tzif-f1f0b3541047bfad-2b308ec39423c122.json", - "antarctica/rothera": "tzif-dfcaab41c352fc41-f08544c2a1c5e1f4.json", - "antarctica/south_pole": "tzif-1939cc3520b8dae8-22de378a60a74427.json", - "antarctica/syowa": "tzif-f58f911ab743ef1d-bce7d4e3dbbf76c7.json", - "antarctica/troll": "tzif-e330917831501a06-d9bbab45a5d619ee.json", - "antarctica/vostok": "tzif-e3d5b2baffd22f2d-357299132d8d271d.json", - "arctic/longyearbyen": "tzif-4a65bbe3253254a1-74e23ebae010633f.json", - "asia/aden": "tzif-f58f911ab743ef1d-bce7d4e3dbbf76c7.json", - "asia/almaty": "tzif-a053c1334aeab356-4e908a806f3a6240.json", - "asia/amman": "tzif-748e0c2c22be393e-66902e29ced208b9.json", - "asia/anadyr": "tzif-d41aa71f743154ff-b40be739a0203b7b.json", - "asia/aqtau": "tzif-f1b7ca6dc4d0b2b0-894d0a8e5668a409.json", - "asia/aqtobe": "tzif-4f0ad1968e2955-2efb3a77b1fab152.json", - "asia/ashgabat": "tzif-f26b875165969e75-9de4074ee0dba7d5.json", - "asia/ashkhabad": "tzif-f26b875165969e75-9de4074ee0dba7d5.json", - "asia/atyrau": "tzif-5a8de8f20b18b43-9e2dca5c597242e0.json", - "asia/baghdad": "tzif-7241c1457aae4357-d2e7c6b0bd66fc1f.json", - "asia/bahrain": "tzif-bdc0a1977c311c8d-f4b9b28d0425c2e7.json", - "asia/baku": "tzif-fef149820a82a100-1aa09fc05f12fa68.json", - "asia/bangkok": "tzif-2a7fc944a4c2991b-23d4ede40e15baee.json", - "asia/barnaul": "tzif-ff54b8a04d630c85-b67e8cd36304f03a.json", - "asia/beirut": "tzif-5890af4975eb815-75673c114065f7fd.json", - "asia/bishkek": "tzif-f229cb4cd552c448-180f703ed315219b.json", - "asia/brunei": "tzif-283cf30fce0ee58e-b9587eef2ed46e22.json", - "asia/calcutta": "tzif-bd9ad03026ed086f-d644ac44efd68aba.json", - "asia/chita": "tzif-36890fddb7a9031e-9536dc9e21edad35.json", - "asia/choibalsan": "tzif-cbf2a88472b0862a-102842a46b61e6b2.json", - "asia/chongqing": "tzif-94731e7a96e16727-f7e568c187e89260.json", - "asia/chungking": "tzif-94731e7a96e16727-f7e568c187e89260.json", - "asia/colombo": "tzif-996739b4c558f747-47c3d2a38375ae0c.json", - "asia/dacca": "tzif-8bf0f826f4c6e05e-c0ba1a0bf66fcd41.json", - "asia/damascus": "tzif-52291e736a34e36b-a04ada7792646f50.json", - "asia/dhaka": "tzif-8bf0f826f4c6e05e-c0ba1a0bf66fcd41.json", - "asia/dili": "tzif-7cca7c8a1af35285-66221a65fff0e11c.json", - "asia/dubai": "tzif-7459e3ffacdde5a6-5b9a96aca6c99104.json", - "asia/dushanbe": "tzif-7a158f0aed162547-7dd30eccd8451b28.json", - "asia/famagusta": "tzif-74fc38128e80b92d-ea279bdf64aaaad5.json", - "asia/gaza": "tzif-3f61f7ebb7b0f5d7-49e94e6f39502420.json", - "asia/harbin": "tzif-94731e7a96e16727-f7e568c187e89260.json", - "asia/hebron": "tzif-cbcf966225780b1c-cd390ae6b2c0eb46.json", - "asia/ho_chi_minh": "tzif-c79f46dbe8103377-e8facc989838f86e.json", - "asia/hong_kong": "tzif-ea8173f82f8dccac-6d1bb4a4812615f1.json", - "asia/hovd": "tzif-65badfa9c283e8d3-582b0756bd73cccd.json", - "asia/irkutsk": "tzif-6156cfed77f2a26c-c8df75ccc9a7c2cb.json", - "asia/istanbul": "tzif-21007d26526b6cee-86f744a04507488f.json", - "asia/jakarta": "tzif-e271b0f2662b1c04-4d92ffee32151a2b.json", - "asia/jayapura": "tzif-b05b7d10c5ffdad-78ca745f30ef72cd.json", - "asia/jerusalem": "tzif-758d7fde6833ba8c-d84310396ec3a33c.json", - "asia/kabul": "tzif-cb2104a4192b82ba-b494193506d89632.json", - "asia/kamchatka": "tzif-eafa00d1ad3ada02-67caac1faf407e13.json", - "asia/karachi": "tzif-fb66f3417dbb2dfe-e7ed5dbff2300096.json", - "asia/kashgar": "tzif-79a67056f030a883-59c34b5443e3cc3d.json", - "asia/kathmandu": "tzif-6d168cde30b3c19-c33293d102bea483.json", - "asia/katmandu": "tzif-6d168cde30b3c19-c33293d102bea483.json", - "asia/khandyga": "tzif-d3201ec4e70c92f3-9fcf4d0393f1be7f.json", - "asia/kolkata": "tzif-bd9ad03026ed086f-d644ac44efd68aba.json", - "asia/krasnoyarsk": "tzif-b0c86e4e28bb1810-4b872c50d4c1a6c6.json", - "asia/kuala_lumpur": "tzif-fc89b67bba9eff21-c8e33ae38174eac0.json", - "asia/kuching": "tzif-283cf30fce0ee58e-b9587eef2ed46e22.json", - "asia/kuwait": "tzif-f58f911ab743ef1d-bce7d4e3dbbf76c7.json", - "asia/macao": "tzif-b6ba868b587cad06-ce1f6d2262a629d1.json", - "asia/macau": "tzif-b6ba868b587cad06-ce1f6d2262a629d1.json", - "asia/magadan": "tzif-7be16635ecf890b5-5e2d960c86ca6fd.json", - "asia/makassar": "tzif-89cd9f4224d1324a-978016530fd7d10a.json", - "asia/manila": "tzif-405b02408f1a7725-e49e74db6c602dd7.json", - "asia/muscat": "tzif-7459e3ffacdde5a6-5b9a96aca6c99104.json", - "asia/nicosia": "tzif-37762e44a2edd792-f8d4f659f37bd065.json", - "asia/novokuznetsk": "tzif-291cff29f8a99dfe-a55df00754cce7a5.json", - "asia/novosibirsk": "tzif-98fc8236fccd3576-5cfd66cadca6c4e9.json", - "asia/omsk": "tzif-86245dd795582456-b57cd97a921e48e2.json", - "asia/oral": "tzif-4c9c946292d76a04-1f61fb9add974458.json", - "asia/phnom_penh": "tzif-2a7fc944a4c2991b-23d4ede40e15baee.json", - "asia/pontianak": "tzif-cb56ff55ea32bb92-824dc78032a2b743.json", - "asia/pyongyang": "tzif-6268b48b2e959066-972e87b290937aa1.json", - "asia/qatar": "tzif-bdc0a1977c311c8d-f4b9b28d0425c2e7.json", - "asia/qostanay": "tzif-b9d3679a03af6191-5f028a8e888d6a6c.json", - "asia/qyzylorda": "tzif-622cbc57a076ea5d-8c48d3d26580be3e.json", - "asia/rangoon": "tzif-50abe32c287395c8-f3b8793b29f50da4.json", - "asia/riyadh": "tzif-f58f911ab743ef1d-bce7d4e3dbbf76c7.json", - "asia/saigon": "tzif-c79f46dbe8103377-e8facc989838f86e.json", - "asia/sakhalin": "tzif-9a2f8cce797280e8-daeea94ec3c0d64a.json", - "asia/samarkand": "tzif-55ec396d83237537-2757249da95de592.json", - "asia/seoul": "tzif-b89f6da72122ca01-4ff661063625a497.json", - "asia/shanghai": "tzif-94731e7a96e16727-f7e568c187e89260.json", - "asia/singapore": "tzif-fc89b67bba9eff21-c8e33ae38174eac0.json", - "asia/srednekolymsk": "tzif-843bd4f4a13e936f-55a131c8ab6ba939.json", - "asia/taipei": "tzif-ee42b17151e8d0d1-357b51a424f7aa98.json", - "asia/tashkent": "tzif-c841f0aca0404a73-7b63e278b233c118.json", - "asia/tbilisi": "tzif-4738bf3d72913a1b-bb663c1af2098c8f.json", - "asia/tehran": "tzif-650685fe5c95ce2a-25adc63d7a5cf37e.json", - "asia/tel_aviv": "tzif-758d7fde6833ba8c-d84310396ec3a33c.json", - "asia/thimbu": "tzif-762fa57e245bdc0d-352c68b251c31c03.json", - "asia/thimphu": "tzif-762fa57e245bdc0d-352c68b251c31c03.json", - "asia/tokyo": "tzif-7bce416a66d38e42-793d2b644cd6f3eb.json", - "asia/tomsk": "tzif-4db2cfd1785db9cd-a7e3c3c4b72bfcd1.json", - "asia/ujung_pandang": "tzif-89cd9f4224d1324a-978016530fd7d10a.json", - "asia/ulaanbaatar": "tzif-cbf2a88472b0862a-102842a46b61e6b2.json", - "asia/ulan_bator": "tzif-cbf2a88472b0862a-102842a46b61e6b2.json", - "asia/urumqi": "tzif-79a67056f030a883-59c34b5443e3cc3d.json", - "asia/ust-nera": "tzif-8b944106b8f9db7e-a806a1ac378ab6f1.json", - "asia/vientiane": "tzif-2a7fc944a4c2991b-23d4ede40e15baee.json", - "asia/vladivostok": "tzif-3fd85b535272f921-289341425431e5ac.json", - "asia/yakutsk": "tzif-3f6ff680ea89333b-92b04efb5fd8415a.json", - "asia/yangon": "tzif-50abe32c287395c8-f3b8793b29f50da4.json", - "asia/yekaterinburg": "tzif-849b49f0ce1dac82-f9465599b14568d2.json", - "asia/yerevan": "tzif-f9878deac6fa797b-36a060053a7f36d5.json", - "atlantic/azores": "tzif-c306ac2cd34a373c-28210e229694b763.json", - "atlantic/bermuda": "tzif-6a52098e032992a5-bba19e0a651fd245.json", - "atlantic/canary": "tzif-a7b726e2144b8ec3-b27e2e8b4d359d3e.json", - "atlantic/cape_verde": "tzif-55eedcdc6ff1f85-9ba1e126f74a77e5.json", - "atlantic/faeroe": "tzif-67d3e39540d85c91-16a76df7ea37cc86.json", - "atlantic/faroe": "tzif-67d3e39540d85c91-16a76df7ea37cc86.json", - "atlantic/jan_mayen": "tzif-4a65bbe3253254a1-74e23ebae010633f.json", - "atlantic/madeira": "tzif-a44c115ed3d72421-4cb81346edf64734.json", - "atlantic/reykjavik": "tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json", - "atlantic/south_georgia": "tzif-9d02412abb136ce4-3c8b45e586036414.json", - "atlantic/st_helena": "tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json", - "atlantic/stanley": "tzif-4eaf76405b17e0d3-8127aac0445a30c.json", - "australia/act": "tzif-ef99169dd5b3d431-4213fdbbcdc2dc93.json", - "australia/adelaide": "tzif-cab5fb5bf9e7625f-1067c0dfd63ecd48.json", - "australia/brisbane": "tzif-44b31bf3438167a2-b455583aa9f30974.json", - "australia/broken_hill": "tzif-9af11812af42f7cb-ea58c8a7a84568cf.json", - "australia/canberra": "tzif-ef99169dd5b3d431-4213fdbbcdc2dc93.json", - "australia/currie": "tzif-9c98c8b92084c36-7a46fb059e5c1fa4.json", - "australia/darwin": "tzif-794b5729aca99b8f-96eba8d93ea036a2.json", - "australia/eucla": "tzif-2a2176981e284105-a060adcd628f6f53.json", - "australia/hobart": "tzif-9c98c8b92084c36-7a46fb059e5c1fa4.json", - "australia/lhi": "tzif-e2789756bce07cca-ccde47e32bb222dd.json", - "australia/lindeman": "tzif-eb4384db15894d16-1169fd5f98c1f241.json", - "australia/lord_howe": "tzif-e2789756bce07cca-ccde47e32bb222dd.json", - "australia/melbourne": "tzif-401f78ac94f3eb66-10a91d067a038f6.json", - "australia/north": "tzif-794b5729aca99b8f-96eba8d93ea036a2.json", - "australia/nsw": "tzif-ef99169dd5b3d431-4213fdbbcdc2dc93.json", - "australia/perth": "tzif-c595527c9472a8dc-2c9b581a736bf287.json", - "australia/queensland": "tzif-44b31bf3438167a2-b455583aa9f30974.json", - "australia/south": "tzif-cab5fb5bf9e7625f-1067c0dfd63ecd48.json", - "australia/sydney": "tzif-ef99169dd5b3d431-4213fdbbcdc2dc93.json", - "australia/tasmania": "tzif-9c98c8b92084c36-7a46fb059e5c1fa4.json", - "australia/victoria": "tzif-401f78ac94f3eb66-10a91d067a038f6.json", - "australia/west": "tzif-c595527c9472a8dc-2c9b581a736bf287.json", - "australia/yancowinna": "tzif-9af11812af42f7cb-ea58c8a7a84568cf.json", - "brazil/acre": "tzif-90e0499f7b80422b-73d31a89f022a14f.json", - "brazil/denoronha": "tzif-c17291eb667fe274-9c32ee5720049b17.json", - "brazil/east": "tzif-dc8ea6d022a7ebec-ad1e97b20a9ac2d1.json", - "brazil/west": "tzif-8b129baceef3898a-2b8a55dc1e3a09f6.json", - "canada/atlantic": "tzif-ca31f6cb7d44b091-e3b00a5eecc4d20e.json", - "canada/central": "tzif-bad7f01dd3f01a92-4e95b98a659c32dc.json", - "canada/eastern": "tzif-ed29bf9f15004c8a-e0746bbdddd348c2.json", - "canada/mountain": "tzif-3a6fecb09c143b25-69e62db706dcf368.json", - "canada/newfoundland": "tzif-916c7f697e6af49e-c0ec219c595d0da3.json", - "canada/pacific": "tzif-43c01a519dcad360-966c5ee1f11e2b48.json", - "canada/saskatchewan": "tzif-f61469e5df5071ba-2c45e3f2d4f2b99e.json", - "canada/yukon": "tzif-87649f3d059a10f2-f48f0ec47501bcd5.json", - "cet": "tzif-6415eb3f74777957-e97d06555e16796e.json", - "chile/continental": "tzif-ce802c28d3beb1b-ba901eac8e518953.json", - "chile/easterisland": "tzif-daeed2898ecd770c-e038bd49b50a31ad.json", - "cst6cdt": "tzif-3a5a827f28d118e9-ce1a66b62f86f6b6.json", - "cuba": "tzif-d28e0bb7485a8522-8a404ad1261c36fd.json", - "eet": "tzif-f665c39691dff65-a1eb82e4c28d49af.json", - "egypt": "tzif-f0d38f589f1464b7-2390a2d2ea508547.json", - "eire": "tzif-96a7050f6c4d3e34-df2aeb55ad5efcf6.json", - "est": "tzif-6fbdbfed85292c81-a2a3eeb444b4a763.json", - "est5edt": "tzif-3994d21beae7c7b6-3a834f9ef48b6c6c.json", - "etc/gmt": "tzif-42518274487a5d74-f93177324e5a0553.json", - "etc/gmt+0": "tzif-42518274487a5d74-f93177324e5a0553.json", - "etc/gmt+1": "tzif-3c8506b1fc96536c-ce036c9ae71dded0.json", - "etc/gmt+10": "tzif-c83537c4365f1258-d9a68e73bb4be055.json", - "etc/gmt+11": "tzif-bbf3217ce334c3f2-232c7149620b7964.json", - "etc/gmt+12": "tzif-e2bf7ec87041f1fb-a95a48336ec715b.json", - "etc/gmt+2": "tzif-2d819a70236c9f86-f7bfd37ab9ee4e7.json", - "etc/gmt+3": "tzif-fed5f41e1701789d-f9f57f6486c67cc.json", - "etc/gmt+4": "tzif-d1e4208290566f2f-fef488990f0df138.json", - "etc/gmt+5": "tzif-a0806703e39bd41f-1550d240a231a10.json", - "etc/gmt+6": "tzif-9afb6f21d74a3dbd-a77eabd0a5abcd83.json", - "etc/gmt+7": "tzif-aeaa8db63bed649c-b8168492f7f36c82.json", - "etc/gmt+8": "tzif-f80d3a6707532038-da4e5800db81a377.json", - "etc/gmt+9": "tzif-2a554d4e97833d6e-120777f752f63146.json", - "etc/gmt-0": "tzif-42518274487a5d74-f93177324e5a0553.json", - "etc/gmt-1": "tzif-b397eb337d51aec5-ef342f93732b4e5e.json", - "etc/gmt-10": "tzif-c6ecc61594d93097-5e860f0bd6a333be.json", - "etc/gmt-11": "tzif-170cb25ac2daddf1-6b65a0cc13c6d4e9.json", - "etc/gmt-12": "tzif-b445d8dfee87de1d-fc15f727335717c2.json", - "etc/gmt-13": "tzif-186e2b651b9e98be-6a57f3841629389e.json", - "etc/gmt-14": "tzif-f6698c0e9f2fa661-5b9f74a3daf3341b.json", - "etc/gmt-2": "tzif-cd29e561a284f373-910bdbc4f0527bd3.json", - "etc/gmt-3": "tzif-11b63f0f95d852ce-71ad670274ba174a.json", - "etc/gmt-4": "tzif-c7d151e4111f596b-4a2ec14b29782b7d.json", - "etc/gmt-5": "tzif-3cc59865618b9844-7dd7f8118a4e046e.json", - "etc/gmt-6": "tzif-65401a13577707c6-3c816ecb1222096.json", - "etc/gmt-7": "tzif-4e52d8a7b9ecde7e-764ec3b5c4b8697b.json", - "etc/gmt-8": "tzif-2bd99bb6843e89cf-947053f9d533e599.json", - "etc/gmt-9": "tzif-14ec5a4ae9e7e087-61c1017aa881639d.json", - "etc/gmt0": "tzif-42518274487a5d74-f93177324e5a0553.json", - "etc/greenwich": "tzif-42518274487a5d74-f93177324e5a0553.json", - "etc/uct": "tzif-5eec9cd299aa076f-58319b6fef37bd5b.json", - "etc/universal": "tzif-5eec9cd299aa076f-58319b6fef37bd5b.json", - "etc/utc": "tzif-5eec9cd299aa076f-58319b6fef37bd5b.json", - "etc/zulu": "tzif-5eec9cd299aa076f-58319b6fef37bd5b.json", - "europe/amsterdam": "tzif-6415eb3f74777957-e97d06555e16796e.json", - "europe/andorra": "tzif-26bf0cacd24f77a1-64043bb5dbcfda2b.json", - "europe/astrakhan": "tzif-5fd210f528e95871-fc49dea0efb99a13.json", - "europe/athens": "tzif-f665c39691dff65-a1eb82e4c28d49af.json", - "europe/belfast": "tzif-6bfb62f5e4b63e4a-e415221176acbc2e.json", - "europe/belgrade": "tzif-a1b14d47c3da0459-ac3659b48ae2af97.json", - "europe/berlin": "tzif-4a65bbe3253254a1-74e23ebae010633f.json", - "europe/bratislava": "tzif-6d3285599a38ae5a-2cd0d5b4e23bce4f.json", - "europe/brussels": "tzif-6415eb3f74777957-e97d06555e16796e.json", - "europe/bucharest": "tzif-b06ac7e52f27518c-a8e4668bd9c18cb8.json", - "europe/budapest": "tzif-1041cd53332eeba8-a5390eb6e64db269.json", - "europe/busingen": "tzif-5cb26c449b2278f2-f5c80683b8771e4.json", - "europe/chisinau": "tzif-7622c5c99b380b37-2702b81d3e1cfe0.json", - "europe/copenhagen": "tzif-4a65bbe3253254a1-74e23ebae010633f.json", - "europe/dublin": "tzif-96a7050f6c4d3e34-df2aeb55ad5efcf6.json", - "europe/gibraltar": "tzif-34047004b336df3e-2c98809401c82e5c.json", - "europe/guernsey": "tzif-6bfb62f5e4b63e4a-e415221176acbc2e.json", - "europe/helsinki": "tzif-4ccce3697974db1-c9b3ad8e177d2c87.json", - "europe/isle_of_man": "tzif-6bfb62f5e4b63e4a-e415221176acbc2e.json", - "europe/istanbul": "tzif-21007d26526b6cee-86f744a04507488f.json", - "europe/jersey": "tzif-6bfb62f5e4b63e4a-e415221176acbc2e.json", - "europe/kaliningrad": "tzif-dc6b1be48367c4f1-ff82f7bca90c006a.json", - "europe/kiev": "tzif-4ab862d6d4b98ff4-80d56c4f33fecd23.json", - "europe/kirov": "tzif-1735ba0bbd2e57f5-da30cdfe215fe93a.json", - "europe/kyiv": "tzif-4ab862d6d4b98ff4-80d56c4f33fecd23.json", - "europe/lisbon": "tzif-e953d2a73bc41375-48de55a59fed75b5.json", - "europe/ljubljana": "tzif-a1b14d47c3da0459-ac3659b48ae2af97.json", - "europe/london": "tzif-6bfb62f5e4b63e4a-e415221176acbc2e.json", - "europe/luxembourg": "tzif-6415eb3f74777957-e97d06555e16796e.json", - "europe/madrid": "tzif-7d33da447360d55c-c69632f4c906e5b4.json", - "europe/malta": "tzif-638a1ae9aef4e05b-2b1a4febecd034f5.json", - "europe/mariehamn": "tzif-4ccce3697974db1-c9b3ad8e177d2c87.json", - "europe/minsk": "tzif-5a1de33f302092c9-4b58fc984bc5f5d3.json", - "europe/monaco": "tzif-513821d5372dc2c3-5fa78ecbf57b0a98.json", - "europe/moscow": "tzif-ec4f112febcbc032-8f1d0619702b4a64.json", - "europe/nicosia": "tzif-37762e44a2edd792-f8d4f659f37bd065.json", - "europe/oslo": "tzif-4a65bbe3253254a1-74e23ebae010633f.json", - "europe/paris": "tzif-513821d5372dc2c3-5fa78ecbf57b0a98.json", - "europe/podgorica": "tzif-a1b14d47c3da0459-ac3659b48ae2af97.json", - "europe/prague": "tzif-6d3285599a38ae5a-2cd0d5b4e23bce4f.json", - "europe/riga": "tzif-ce5eb7cf8993261f-8a81fb1cdccc4d1c.json", - "europe/rome": "tzif-5473a3220fbbe20b-79e52cbb001b87ba.json", - "europe/samara": "tzif-2ae3e9466dbec3ec-469ede62937732cf.json", - "europe/san_marino": "tzif-5473a3220fbbe20b-79e52cbb001b87ba.json", - "europe/sarajevo": "tzif-a1b14d47c3da0459-ac3659b48ae2af97.json", - "europe/saratov": "tzif-6ad7cbb6af2e6144-23c1965c29d4f40e.json", - "europe/simferopol": "tzif-d7daa3dddb990290-9677a0a27cb05bbf.json", - "europe/skopje": "tzif-a1b14d47c3da0459-ac3659b48ae2af97.json", - "europe/sofia": "tzif-1375eb028a5068b1-5eb33362297b7613.json", - "europe/stockholm": "tzif-4a65bbe3253254a1-74e23ebae010633f.json", - "europe/tallinn": "tzif-9c7ac303ad5d20d8-c5c0d8a5e3082d46.json", - "europe/tirane": "tzif-4fd8d72ac04d9a5d-f4e62c0d904434c.json", - "europe/tiraspol": "tzif-7622c5c99b380b37-2702b81d3e1cfe0.json", - "europe/ulyanovsk": "tzif-dbf1c543882cf4b7-4c28ed2b1a3fde.json", - "europe/uzhgorod": "tzif-4ab862d6d4b98ff4-80d56c4f33fecd23.json", - "europe/vaduz": "tzif-5cb26c449b2278f2-f5c80683b8771e4.json", - "europe/vatican": "tzif-5473a3220fbbe20b-79e52cbb001b87ba.json", - "europe/vienna": "tzif-bafb78fdc913701c-8b69c00fdcfa224b.json", - "europe/vilnius": "tzif-8e1e620dda961a84-c314a4d123572dd5.json", - "europe/volgograd": "tzif-c711f11538fdc96f-85ebfaa68dc0ffa7.json", - "europe/warsaw": "tzif-3a07d4451f21c9ef-d9574bd8a6e8418c.json", - "europe/zagreb": "tzif-a1b14d47c3da0459-ac3659b48ae2af97.json", - "europe/zaporozhye": "tzif-4ab862d6d4b98ff4-80d56c4f33fecd23.json", - "europe/zurich": "tzif-5cb26c449b2278f2-f5c80683b8771e4.json", - "factory": "tzif-8c010856ba3febe1-794ed33019fb3c76.json", - "gb": "tzif-6bfb62f5e4b63e4a-e415221176acbc2e.json", - "gb-eire": "tzif-6bfb62f5e4b63e4a-e415221176acbc2e.json", - "gmt": "tzif-42518274487a5d74-f93177324e5a0553.json", - "gmt+0": "tzif-42518274487a5d74-f93177324e5a0553.json", - "gmt-0": "tzif-42518274487a5d74-f93177324e5a0553.json", - "gmt0": "tzif-42518274487a5d74-f93177324e5a0553.json", - "greenwich": "tzif-42518274487a5d74-f93177324e5a0553.json", - "hongkong": "tzif-ea8173f82f8dccac-6d1bb4a4812615f1.json", - "hst": "tzif-6196bbf525d4d50a-c71f929438c03168.json", - "iceland": "tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json", - "indian/antananarivo": "tzif-486e9282debc62a3-46e6f605f156885a.json", - "indian/chagos": "tzif-e713de09d9781804-8382a2158e285fa1.json", - "indian/christmas": "tzif-2a7fc944a4c2991b-23d4ede40e15baee.json", - "indian/cocos": "tzif-50abe32c287395c8-f3b8793b29f50da4.json", - "indian/comoro": "tzif-486e9282debc62a3-46e6f605f156885a.json", - "indian/kerguelen": "tzif-b3d9e43d648fe2bf-8736e3d1fbc613ef.json", - "indian/mahe": "tzif-7459e3ffacdde5a6-5b9a96aca6c99104.json", - "indian/maldives": "tzif-b3d9e43d648fe2bf-8736e3d1fbc613ef.json", - "indian/mauritius": "tzif-dc8c7c76ac036db-d70c3a6a43eef52e.json", - "indian/mayotte": "tzif-486e9282debc62a3-46e6f605f156885a.json", - "indian/reunion": "tzif-7459e3ffacdde5a6-5b9a96aca6c99104.json", - "iran": "tzif-650685fe5c95ce2a-25adc63d7a5cf37e.json", - "israel": "tzif-758d7fde6833ba8c-d84310396ec3a33c.json", - "jamaica": "tzif-98fb8731f72daeb6-ed03dfe4cb71dab0.json", - "japan": "tzif-7bce416a66d38e42-793d2b644cd6f3eb.json", - "kwajalein": "tzif-f104b0a7be76b68-c9ded34c387917fa.json", - "libya": "tzif-81a0c2bb7c8a41da-f88cf59346e694a5.json", - "met": "tzif-6415eb3f74777957-e97d06555e16796e.json", - "mexico/bajanorte": "tzif-3fc16258c94fd1bd-ada83e71d02884df.json", - "mexico/bajasur": "tzif-40fb52b19ef81b1d-e605f3c58f3339e9.json", - "mexico/general": "tzif-95eb641ddc74061f-48fa3b19778decc4.json", - "mst": "tzif-a3214de8e358efe8-599436ece4415d29.json", - "mst7mdt": "tzif-50fc3fea132b4f4c-b7cbf9b6d86ba04f.json", - "navajo": "tzif-50fc3fea132b4f4c-b7cbf9b6d86ba04f.json", - "nz": "tzif-1939cc3520b8dae8-22de378a60a74427.json", - "nz-chat": "tzif-8a0ec5e44a49e44e-561f04494b166c7f.json", - "pacific/apia": "tzif-a1347b19ee040601-efd22be7d0a016d5.json", - "pacific/auckland": "tzif-1939cc3520b8dae8-22de378a60a74427.json", - "pacific/bougainville": "tzif-c0f3e562f1a83b48-754171746ec35fdf.json", - "pacific/chatham": "tzif-8a0ec5e44a49e44e-561f04494b166c7f.json", - "pacific/chuuk": "tzif-1ede513c242ae08-632ba74e72cfe8a5.json", - "pacific/easter": "tzif-daeed2898ecd770c-e038bd49b50a31ad.json", - "pacific/efate": "tzif-bcd5d242787ff58-97f28a4e5e19ca2d.json", - "pacific/enderbury": "tzif-edc8df3b48d8f1ae-d53ce868638a7f7f.json", - "pacific/fakaofo": "tzif-57ad9603575ed991-1d15542a8eef34bf.json", - "pacific/fiji": "tzif-fb562061c0f6e08b-e0cd9b29c584760f.json", - "pacific/funafuti": "tzif-154d4d1d56f527ae-f300c61364a20bb0.json", - "pacific/galapagos": "tzif-905f75931d73bd53-eab3826a5e584977.json", - "pacific/gambier": "tzif-e7907c2354d7f128-5e2105dd6e3756ba.json", - "pacific/guadalcanal": "tzif-6493d17f054bfdfb-9ba300c9d5b440df.json", - "pacific/guam": "tzif-b8b54ce37e65e37e-1a5a88cac7047a13.json", - "pacific/honolulu": "tzif-6196bbf525d4d50a-c71f929438c03168.json", - "pacific/johnston": "tzif-6196bbf525d4d50a-c71f929438c03168.json", - "pacific/kanton": "tzif-edc8df3b48d8f1ae-d53ce868638a7f7f.json", - "pacific/kiritimati": "tzif-2be99c3dd72ebbf9-bc61c21d5b0d6d30.json", - "pacific/kosrae": "tzif-cad03994b9f9755d-97b6146f918ae75d.json", - "pacific/kwajalein": "tzif-f104b0a7be76b68-c9ded34c387917fa.json", - "pacific/majuro": "tzif-154d4d1d56f527ae-f300c61364a20bb0.json", - "pacific/marquesas": "tzif-6797b3dc466b8334-d830c99377d63c38.json", - "pacific/midway": "tzif-68b74f8e8d191761-13c01789896a8ab1.json", - "pacific/nauru": "tzif-355a4a5906a54477-93a25eca130657a7.json", - "pacific/niue": "tzif-7285bd926fe2dc70-a041a982b5779b95.json", - "pacific/norfolk": "tzif-e4c142bca3031674-241fa86fba2429ca.json", - "pacific/noumea": "tzif-7238398358c87edf-a5cb25a6b805007a.json", - "pacific/pago_pago": "tzif-68b74f8e8d191761-13c01789896a8ab1.json", - "pacific/palau": "tzif-b3a7b6acccb12af9-55992b6095d12ce7.json", - "pacific/pitcairn": "tzif-f022b64b061d7846-3232b34cfb2e1ae6.json", - "pacific/pohnpei": "tzif-6493d17f054bfdfb-9ba300c9d5b440df.json", - "pacific/ponape": "tzif-6493d17f054bfdfb-9ba300c9d5b440df.json", - "pacific/port_moresby": "tzif-1ede513c242ae08-632ba74e72cfe8a5.json", - "pacific/rarotonga": "tzif-c0d9ca8c12b3167c-bdffa0be746988ad.json", - "pacific/saipan": "tzif-b8b54ce37e65e37e-1a5a88cac7047a13.json", - "pacific/samoa": "tzif-68b74f8e8d191761-13c01789896a8ab1.json", - "pacific/tahiti": "tzif-72be3d5f2c49eb87-de0695b7e0ab50f7.json", - "pacific/tarawa": "tzif-154d4d1d56f527ae-f300c61364a20bb0.json", - "pacific/tongatapu": "tzif-8b312fc28eb6d503-4392d67c284fea5d.json", - "pacific/truk": "tzif-1ede513c242ae08-632ba74e72cfe8a5.json", - "pacific/wake": "tzif-154d4d1d56f527ae-f300c61364a20bb0.json", - "pacific/wallis": "tzif-154d4d1d56f527ae-f300c61364a20bb0.json", - "pacific/yap": "tzif-1ede513c242ae08-632ba74e72cfe8a5.json", - "poland": "tzif-3a07d4451f21c9ef-d9574bd8a6e8418c.json", - "portugal": "tzif-e953d2a73bc41375-48de55a59fed75b5.json", - "prc": "tzif-94731e7a96e16727-f7e568c187e89260.json", - "pst8pdt": "tzif-effb0bd5efab2bad-24e3b68722ec3ffd.json", - "roc": "tzif-ee42b17151e8d0d1-357b51a424f7aa98.json", - "rok": "tzif-b89f6da72122ca01-4ff661063625a497.json", - "singapore": "tzif-fc89b67bba9eff21-c8e33ae38174eac0.json", - "turkey": "tzif-21007d26526b6cee-86f744a04507488f.json", - "uct": "tzif-5eec9cd299aa076f-58319b6fef37bd5b.json", - "universal": "tzif-5eec9cd299aa076f-58319b6fef37bd5b.json", - "us/alaska": "tzif-d4999f54d6ffa1ff-6c09ad333694e2e2.json", - "us/aleutian": "tzif-2450804cbdb4245e-ed50e5bf669def5d.json", - "us/arizona": "tzif-a3214de8e358efe8-599436ece4415d29.json", - "us/central": "tzif-3a5a827f28d118e9-ce1a66b62f86f6b6.json", - "us/east-indiana": "tzif-754b9e4bdb20aa95-77c7439359a52211.json", - "us/eastern": "tzif-3994d21beae7c7b6-3a834f9ef48b6c6c.json", - "us/hawaii": "tzif-6196bbf525d4d50a-c71f929438c03168.json", - "us/indiana-starke": "tzif-fc9fd017e19a24e0-d652255d68c25ab0.json", - "us/michigan": "tzif-f8baa073f0e62ab0-3710bd5eade125b5.json", - "us/mountain": "tzif-50fc3fea132b4f4c-b7cbf9b6d86ba04f.json", - "us/pacific": "tzif-effb0bd5efab2bad-24e3b68722ec3ffd.json", - "us/samoa": "tzif-68b74f8e8d191761-13c01789896a8ab1.json", - "utc": "tzif-5eec9cd299aa076f-58319b6fef37bd5b.json", - "w-su": "tzif-ec4f112febcbc032-8f1d0619702b4a64.json", - "wet": "tzif-e953d2a73bc41375-48de55a59fed75b5.json", - "zulu": "tzif-5eec9cd299aa076f-58319b6fef37bd5b.json" -} diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-1041cd53332eeba8-a5390eb6e64db269.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-1041cd53332eeba8-a5390eb6e64db269.json deleted file mode 100644 index 0cce48deb..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-1041cd53332eeba8-a5390eb6e64db269.json +++ /dev/null @@ -1,213 +0,0 @@ -{ - "ids": [ - "europe/budapest" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2498260580, - -1693706400, - -1680483600, - -1663455600, - -1650150000, - -1632006000, - -1618700400, - -1600470000, - -1587250800, - -1569711600, - -1555196400, - -906775200, - -857257200, - -844556400, - -828226800, - -812502000, - -796777200, - -778471200, - -762656400, - -749689200, - -733276800, - -717634800, - -701910000, - -686185200, - -670460400, - -654130800, - -639010800, - -492656400, - -481168800, - -461199600, - -449708400, - -428540400, - -418258800, - -397090800, - -386809200, - 323823600, - 338943600, - 354668400, - 370393200, - 386118000, - 401842800, - 417567600, - 433292400, - 441759600, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 4580 - }, - { - "index": 4, - "is_dst": false, - "offset": 3600 - }, - { - "index": 8, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-1146d998a660d8a7-8846a8ab80ddc60d.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-1146d998a660d8a7-8846a8ab80ddc60d.json deleted file mode 100644 index 501fcb764..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-1146d998a660d8a7-8846a8ab80ddc60d.json +++ /dev/null @@ -1,196 +0,0 @@ -{ - "ids": [ - "america/indiana/marengo" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "C", - "W", - "T", - "\u0000", - "C", - "P", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": { - "abbr": "EDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 2, - 5, - 6, - 5, - 6, - 5, - 6, - 5 - ], - "transitions": [ - -2717647200, - -1633276800, - -1615136400, - -1601827200, - -1583686800, - -880214400, - -769395600, - -765392400, - -589392000, - -576090000, - -495043200, - -481741200, - -463593600, - -450291600, - -431539200, - -418237200, - -400089600, - -386787600, - -368640000, - -355338000, - -337190400, - -323888400, - -305740800, - -292438800, - -273686400, - -21488400, - -5767200, - 9961200, - 25682400, - 41410800, - 57736800, - 73465200, - 89186400, - 104914800, - 120636000, - 126687600, - 152089200, - 162370800, - 183535200, - 1143961200, - 1162101600, - 1173596400, - 1194156000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -20723 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - }, - { - "index": 20, - "is_dst": false, - "offset": -18000 - }, - { - "index": 24, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-11b63f0f95d852ce-71ad670274ba174a.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-11b63f0f95d852ce-71ad670274ba174a.json deleted file mode 100644 index 68669fc29..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-11b63f0f95d852ce-71ad670274ba174a.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt-3" - ], - "tzif": { - "designations": [ - "+", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "+03", - "offset": 10800, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-12ced9fe919d8b6-d0ee384123533a5f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-12ced9fe919d8b6-d0ee384123533a5f.json deleted file mode 100644 index 1790c7e04..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-12ced9fe919d8b6-d0ee384123533a5f.json +++ /dev/null @@ -1,229 +0,0 @@ -{ - "ids": [ - "america/rankin_inlet" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": { - "abbr": "CDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -410227200, - 73468800, - 89190000, - 104918400, - 120639600, - 136368000, - 152089200, - 167817600, - 183538800, - 199267200, - 215593200, - 230716800, - 247042800, - 262771200, - 278492400, - 294220800, - 309942000, - 325670400, - 341391600, - 357120000, - 372841200, - 388569600, - 404895600, - 420019200, - 436345200, - 452073600, - 467794800, - 483523200, - 499244400, - 514972800, - 530694000, - 544608000, - 562143600, - 576057600, - 594198000, - 607507200, - 625647600, - 638956800, - 657097200, - 671011200, - 688546800, - 702460800, - 719996400, - 733910400, - 752050800, - 765360000, - 783500400, - 796809600, - 814950000, - 828864000, - 846399600, - 860313600, - 877849200, - 891763200, - 909298800, - 923212800, - 941353200, - 954662400, - 972802800, - 986112000, - 1004252400, - 1018166400, - 1035702000, - 1049616000, - 1067151600, - 1081065600, - 1099206000, - 1112515200, - 1130655600, - 1143964800, - 1162105200, - 1173600000, - 1194159600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": false, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-1375eb028a5068b1-5eb33362297b7613.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-1375eb028a5068b1-5eb33362297b7613.json deleted file mode 100644 index 4d8b070f4..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-1375eb028a5068b1-5eb33362297b7613.json +++ /dev/null @@ -1,191 +0,0 @@ -{ - "ids": [ - "europe/sofia" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "I", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 14400 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2 - ], - "transitions": [ - -2840146396, - -2369527016, - -857257200, - -844556400, - -828226800, - -812502000, - -796777200, - -781048800, - 291762000, - 307576800, - 323816400, - 339026400, - 355266000, - 370393200, - 386715600, - 401846400, - 417571200, - 433296000, - 449020800, - 465350400, - 481075200, - 496800000, - 512524800, - 528249600, - 543974400, - 559699200, - 575424000, - 591148800, - 606873600, - 622598400, - 638323200, - 654652800, - 662680800, - 686091600, - 701820000, - 717541200, - 733269600, - 748990800, - 764719200, - 780440400, - 796168800, - 811890000, - 828223200, - 846363600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 5596 - }, - { - "index": 4, - "is_dst": false, - "offset": 7016 - }, - { - "index": 8, - "is_dst": false, - "offset": 7200 - }, - { - "index": 12, - "is_dst": false, - "offset": 3600 - }, - { - "index": 16, - "is_dst": true, - "offset": 7200 - }, - { - "index": 21, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-14cdf6863a8e2179-7a81455c834778e9.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-14cdf6863a8e2179-7a81455c834778e9.json deleted file mode 100644 index ee71b398c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-14cdf6863a8e2179-7a81455c834778e9.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "ids": [ - "africa/blantyre", - "africa/bujumbura", - "africa/gaborone", - "africa/harare", - "africa/kigali", - "africa/lubumbashi", - "africa/lusaka", - "africa/maputo" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "A", - "T", - "\u0000" - ], - "posix": { - "abbr": "CAT", - "offset": 7200, - "transition": null - }, - "transition_types": [ - 1 - ], - "transitions": [ - -1924999818 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 7818 - }, - { - "index": 4, - "is_dst": false, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-14ec5a4ae9e7e087-61c1017aa881639d.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-14ec5a4ae9e7e087-61c1017aa881639d.json deleted file mode 100644 index b5e2d6acc..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-14ec5a4ae9e7e087-61c1017aa881639d.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt-9" - ], - "tzif": { - "designations": [ - "+", - "0", - "9", - "\u0000" - ], - "posix": { - "abbr": "+09", - "offset": 32400, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-154d4d1d56f527ae-f300c61364a20bb0.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-154d4d1d56f527ae-f300c61364a20bb0.json deleted file mode 100644 index 6f2c2e3e8..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-154d4d1d56f527ae-f300c61364a20bb0.json +++ /dev/null @@ -1,44 +0,0 @@ -{ - "ids": [ - "pacific/funafuti", - "pacific/majuro", - "pacific/tarawa", - "pacific/wake", - "pacific/wallis" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "2", - "\u0000" - ], - "posix": { - "abbr": "+12", - "offset": 43200, - "transition": null - }, - "transition_types": [ - 1 - ], - "transitions": [ - -2177494324 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 41524 - }, - { - "index": 4, - "is_dst": false, - "offset": 43200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-170cb25ac2daddf1-6b65a0cc13c6d4e9.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-170cb25ac2daddf1-6b65a0cc13c6d4e9.json deleted file mode 100644 index b4b0b890c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-170cb25ac2daddf1-6b65a0cc13c6d4e9.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt-11" - ], - "tzif": { - "designations": [ - "+", - "1", - "1", - "\u0000" - ], - "posix": { - "abbr": "+11", - "offset": 39600, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-1735ba0bbd2e57f5-da30cdfe215fe93a.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-1735ba0bbd2e57f5-da30cdfe215fe93a.json deleted file mode 100644 index b2aa46d78..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-1735ba0bbd2e57f5-da30cdfe215fe93a.json +++ /dev/null @@ -1,214 +0,0 @@ -{ - "ids": [ - "europe/kirov" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000", - "M", - "S", - "K", - "\u0000", - "M", - "S", - "D", - "\u0000" - ], - "posix": { - "abbr": "MSK", - "offset": 10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 6, - 5, - 6, - 2, - 4, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 7, - 6 - ], - "transitions": [ - -1593820800, - -1247540400, - 354916800, - 370724400, - 386452800, - 402260400, - 417988800, - 433796400, - 449611200, - 465343200, - 481068000, - 496792800, - 512517600, - 528242400, - 543967200, - 559692000, - 575416800, - 591141600, - 606866400, - 606870000, - 622594800, - 638319600, - 654649200, - 670374000, - 701820000, - 701823600, - 717548400, - 733273200, - 748998000, - 764722800, - 780447600, - 796172400, - 811897200, - 828226800, - 846370800, - 859676400, - 877820400, - 891126000, - 909270000, - 922575600, - 941324400, - 954025200, - 972774000, - 985474800, - 1004223600, - 1017529200, - 1035673200, - 1048978800, - 1067122800, - 1080428400, - 1099177200, - 1111878000, - 1130626800, - 1143327600, - 1162076400, - 1174777200, - 1193526000, - 1206831600, - 1224975600, - 1238281200, - 1256425200, - 1269730800, - 1288479600, - 1301180400, - 1414274400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 11928 - }, - { - "index": 4, - "is_dst": false, - "offset": 10800 - }, - { - "index": 8, - "is_dst": false, - "offset": 14400 - }, - { - "index": 12, - "is_dst": true, - "offset": 18000 - }, - { - "index": 16, - "is_dst": true, - "offset": 14400 - }, - { - "index": 20, - "is_dst": true, - "offset": 14400 - }, - { - "index": 16, - "is_dst": false, - "offset": 10800 - }, - { - "index": 16, - "is_dst": false, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-186e2b651b9e98be-6a57f3841629389e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-186e2b651b9e98be-6a57f3841629389e.json deleted file mode 100644 index 58f06d908..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-186e2b651b9e98be-6a57f3841629389e.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt-13" - ], - "tzif": { - "designations": [ - "+", - "1", - "3", - "\u0000" - ], - "posix": { - "abbr": "+13", - "offset": 46800, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 46800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-1939cc3520b8dae8-22de378a60a74427.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-1939cc3520b8dae8-22de378a60a74427.json deleted file mode 100644 index b1a917669..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-1939cc3520b8dae8-22de378a60a74427.json +++ /dev/null @@ -1,295 +0,0 @@ -{ - "ids": [ - "antarctica/mcmurdo", - "antarctica/south_pole", - "nz", - "pacific/auckland" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "N", - "Z", - "M", - "T", - "\u0000", - "N", - "Z", - "S", - "T", - "\u0000", - "N", - "Z", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "NZST", - "offset": 43200, - "transition": { - "abbr": "NZDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 4, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 9, - 5, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5 - ], - "transitions": [ - -3192435544, - -1330335000, - -1320057000, - -1300699800, - -1287396000, - -1269250200, - -1255946400, - -1237800600, - -1224496800, - -1206351000, - -1192442400, - -1174901400, - -1160992800, - -1143451800, - -1125914400, - -1112607000, - -1094464800, - -1081157400, - -1063015200, - -1049707800, - -1031565600, - -1018258200, - -1000116000, - -986808600, - -968061600, - -955359000, - -936612000, - -923304600, - -757425600, - 152632800, - 162309600, - 183477600, - 194968800, - 215532000, - 226418400, - 246981600, - 257868000, - 278431200, - 289317600, - 309880800, - 320767200, - 341330400, - 352216800, - 372780000, - 384271200, - 404834400, - 415720800, - 436284000, - 447170400, - 467733600, - 478620000, - 499183200, - 510069600, - 530632800, - 541519200, - 562082400, - 573573600, - 594136800, - 605023200, - 623772000, - 637682400, - 655221600, - 669132000, - 686671200, - 700581600, - 718120800, - 732636000, - 749570400, - 764085600, - 781020000, - 795535200, - 812469600, - 826984800, - 844524000, - 858434400, - 875973600, - 889884000, - 907423200, - 921938400, - 938872800, - 953388000, - 970322400, - 984837600, - 1002376800, - 1016287200, - 1033826400, - 1047736800, - 1065276000, - 1079791200, - 1096725600, - 1111240800, - 1128175200, - 1142690400, - 1159624800, - 1174140000, - 1191074400, - 1207404000, - 1222524000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 41944 - }, - { - "index": 4, - "is_dst": false, - "offset": 41400 - }, - { - "index": 9, - "is_dst": true, - "offset": 45000 - }, - { - "index": 9, - "is_dst": true, - "offset": 43200 - }, - { - "index": 9, - "is_dst": false, - "offset": 43200 - }, - { - "index": 14, - "is_dst": true, - "offset": 46800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-19d0e567d48830e5-342c0f7d47956e28.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-19d0e567d48830e5-342c0f7d47956e28.json deleted file mode 100644 index 7b19bc077..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-19d0e567d48830e5-342c0f7d47956e28.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "ids": [ - "africa/tunis" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2797202444, - -1855958961, - -969242400, - -950493600, - -941940000, - -891136800, - -877827600, - -857257200, - -844556400, - -842918400, - -842223600, - -828230400, - -812502000, - -796269600, - -781052400, - -766634400, - 231202800, - 243903600, - 262825200, - 276044400, - 581122800, - 591145200, - 606870000, - 622594800, - 641516400, - 654649200, - 1114902000, - 1128038400, - 1143334800, - 1162083600, - 1174784400, - 1193533200, - 1206838800, - 1224982800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 2444 - }, - { - "index": 4, - "is_dst": false, - "offset": 561 - }, - { - "index": 8, - "is_dst": false, - "offset": 3600 - }, - { - "index": 12, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-1a285e17b7751f38-f446adc8bb75b79d.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-1a285e17b7751f38-f446adc8bb75b79d.json deleted file mode 100644 index fd7038471..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-1a285e17b7751f38-f446adc8bb75b79d.json +++ /dev/null @@ -1,190 +0,0 @@ -{ - "ids": [ - "america/dawson_creek" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "S", - "T", - "\u0000", - "P", - "D", - "T", - "\u0000", - "P", - "W", - "T", - "\u0000", - "P", - "P", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "MST", - "offset": -25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 5 - ], - "transitions": [ - -2713881544, - -1632060000, - -1615129200, - -880207200, - -769395600, - -765385200, - -715788000, - -702486000, - -684338400, - -671036400, - -652888800, - -639586800, - -620834400, - -608137200, - -589384800, - -576082800, - -557935200, - -544633200, - -526485600, - -513183600, - -495036000, - -481734000, - -463586400, - -450284400, - -431532000, - -418230000, - -400082400, - -386780400, - -368632800, - -355330800, - -337183200, - -323881200, - -305733600, - -292431600, - -273679200, - -260982000, - -242229600, - -226508400, - -210780000, - -195058800, - -179330400, - -163609200, - -147880800, - -131554800, - -116431200, - -100105200, - -84376800, - -68655600, - -52927200, - -37206000, - -21477600, - -5756400, - 9972000, - 25693200, - 41421600, - 57747600, - 73476000, - 84013200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -28856 - }, - { - "index": 4, - "is_dst": false, - "offset": -28800 - }, - { - "index": 8, - "is_dst": true, - "offset": -25200 - }, - { - "index": 12, - "is_dst": true, - "offset": -25200 - }, - { - "index": 16, - "is_dst": true, - "offset": -25200 - }, - { - "index": 20, - "is_dst": false, - "offset": -25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-1dd142eb22754e92-a1483c5f2954e641.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-1dd142eb22754e92-a1483c5f2954e641.json deleted file mode 100644 index 4b07be6ee..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-1dd142eb22754e92-a1483c5f2954e641.json +++ /dev/null @@ -1,263 +0,0 @@ -{ - "ids": [ - "america/iqaluit", - "america/pangnirtung" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000", - "E", - "W", - "T", - "\u0000", - "E", - "P", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": { - "abbr": "EDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 5, - 6, - 5, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3 - ], - "transitions": [ - -865296000, - -769395600, - -765396000, - 73465200, - 89186400, - 104914800, - 120636000, - 136364400, - 152085600, - 167814000, - 183535200, - 199263600, - 215589600, - 230713200, - 247039200, - 262767600, - 278488800, - 294217200, - 309938400, - 325666800, - 341388000, - 357116400, - 372837600, - 388566000, - 404892000, - 420015600, - 436341600, - 452070000, - 467791200, - 483519600, - 499240800, - 514969200, - 530690400, - 544604400, - 562140000, - 576054000, - 594194400, - 607503600, - 625644000, - 638953200, - 657093600, - 671007600, - 688543200, - 702457200, - 719992800, - 733906800, - 752047200, - 765356400, - 783496800, - 796806000, - 814946400, - 828860400, - 846396000, - 860310000, - 877845600, - 891759600, - 909295200, - 923209200, - 941349600, - 941353200, - 954662400, - 972802800, - 986108400, - 1004248800, - 1018162800, - 1035698400, - 1049612400, - 1067148000, - 1081062000, - 1099202400, - 1112511600, - 1130652000, - 1143961200, - 1162101600, - 1173596400, - 1194156000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - }, - { - "index": 4, - "is_dst": true, - "offset": -14400 - }, - { - "index": 8, - "is_dst": true, - "offset": -14400 - }, - { - "index": 12, - "is_dst": false, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -14400 - }, - { - "index": 20, - "is_dst": true, - "offset": -18000 - }, - { - "index": 24, - "is_dst": false, - "offset": -21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-1ede513c242ae08-632ba74e72cfe8a5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-1ede513c242ae08-632ba74e72cfe8a5.json deleted file mode 100644 index 7de5bff80..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-1ede513c242ae08-632ba74e72cfe8a5.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "ids": [ - "antarctica/dumontdurville", - "pacific/chuuk", - "pacific/port_moresby", - "pacific/truk", - "pacific/yap" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "M", - "M", - "T", - "\u0000", - "+", - "1", - "0", - "\u0000" - ], - "posix": { - "abbr": "+10", - "offset": 36000, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -2840176120, - -2366790512 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 35320 - }, - { - "index": 4, - "is_dst": false, - "offset": 35312 - }, - { - "index": 9, - "is_dst": false, - "offset": 36000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-1eff85dd787ed3a1-78246c4d5a044c0b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-1eff85dd787ed3a1-78246c4d5a044c0b.json deleted file mode 100644 index a191c1fd7..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-1eff85dd787ed3a1-78246c4d5a044c0b.json +++ /dev/null @@ -1,288 +0,0 @@ -{ - "ids": [ - "america/dawson" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "Y", - "S", - "T", - "\u0000", - "Y", - "D", - "T", - "\u0000", - "Y", - "W", - "T", - "\u0000", - "Y", - "P", - "T", - "\u0000", - "Y", - "D", - "D", - "T", - "\u0000", - "P", - "S", - "T", - "\u0000", - "P", - "D", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "MST", - "offset": -25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 5, - 1, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 8 - ], - "transitions": [ - -2188996940, - -1632056400, - -1615125600, - -1596978000, - -1583164800, - -880203600, - -769395600, - -765381600, - -147884400, - -131554800, - 120646800, - 325677600, - 341398800, - 357127200, - 372848400, - 388576800, - 404902800, - 420026400, - 436352400, - 452080800, - 467802000, - 483530400, - 499251600, - 514980000, - 530701200, - 544615200, - 562150800, - 576064800, - 594205200, - 607514400, - 625654800, - 638964000, - 657104400, - 671018400, - 688554000, - 702468000, - 720003600, - 733917600, - 752058000, - 765367200, - 783507600, - 796816800, - 814957200, - 828871200, - 846406800, - 860320800, - 877856400, - 891770400, - 909306000, - 923220000, - 941360400, - 954669600, - 972810000, - 986119200, - 1004259600, - 1018173600, - 1035709200, - 1049623200, - 1067158800, - 1081072800, - 1099213200, - 1112522400, - 1130662800, - 1143972000, - 1162112400, - 1173607200, - 1194166800, - 1205056800, - 1225616400, - 1236506400, - 1257066000, - 1268560800, - 1289120400, - 1300010400, - 1320570000, - 1331460000, - 1352019600, - 1362909600, - 1383469200, - 1394359200, - 1414918800, - 1425808800, - 1446368400, - 1457863200, - 1478422800, - 1489312800, - 1509872400, - 1520762400, - 1541322000, - 1552212000, - 1572771600, - 1583661600, - 1604214000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -33460 - }, - { - "index": 4, - "is_dst": false, - "offset": -32400 - }, - { - "index": 8, - "is_dst": true, - "offset": -28800 - }, - { - "index": 12, - "is_dst": true, - "offset": -28800 - }, - { - "index": 16, - "is_dst": true, - "offset": -28800 - }, - { - "index": 20, - "is_dst": true, - "offset": -25200 - }, - { - "index": 25, - "is_dst": false, - "offset": -28800 - }, - { - "index": 29, - "is_dst": true, - "offset": -25200 - }, - { - "index": 33, - "is_dst": false, - "offset": -25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-206d649fad594120-e8f7dbba68660182.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-206d649fad594120-e8f7dbba68660182.json deleted file mode 100644 index f10855550..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-206d649fad594120-e8f7dbba68660182.json +++ /dev/null @@ -1,129 +0,0 @@ -{ - "ids": [ - "america/maceio" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1767217028, - -1206957600, - -1191362400, - -1175374800, - -1159826400, - -633819600, - -622069200, - -602283600, - -591832800, - -570747600, - -560210400, - -539125200, - -531352800, - -191365200, - -184197600, - -155163600, - -150069600, - -128898000, - -121125600, - -99954000, - -89589600, - -68418000, - -57967200, - 499748400, - 511236000, - 530593200, - 540266400, - 562129200, - 571197600, - 592974000, - 602042400, - 624423600, - 634701600, - 813726000, - 824004000, - 938919600, - 951616800, - 970974000, - 972180000, - 1003028400, - 1013911200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -8572 - }, - { - "index": 4, - "is_dst": false, - "offset": -10800 - }, - { - "index": 8, - "is_dst": true, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-21007d26526b6cee-86f744a04507488f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-21007d26526b6cee-86f744a04507488f.json deleted file mode 100644 index a725bfedd..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-21007d26526b6cee-86f744a04507488f.json +++ /dev/null @@ -1,307 +0,0 @@ -{ - "ids": [ - "asia/istanbul", - "europe/istanbul", - "turkey" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "I", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000", - "+", - "0", - "4", - "\u0000" - ], - "posix": { - "abbr": "+03", - "offset": 10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 4, - 5, - 4, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 4 - ], - "transitions": [ - -2840147752, - -1869875816, - -1693706400, - -1680490800, - -1570413600, - -1552186800, - -1538359200, - -1522551600, - -1507514400, - -1490583600, - -1440208800, - -1428030000, - -1409709600, - -1396494000, - -931053600, - -922676400, - -917834400, - -892436400, - -875844000, - -764737200, - -744343200, - -733806000, - -716436000, - -701924400, - -684986400, - -670474800, - -654141600, - -639025200, - -622087200, - -606970800, - -590032800, - -575521200, - -235620000, - -194842800, - -177732000, - -165726000, - 107910000, - 121215600, - 133920000, - 152665200, - 164678400, - 184114800, - 196214400, - 215564400, - 228873600, - 245804400, - 260323200, - 267915600, - 428454000, - 433893600, - 468111600, - 482799600, - 496710000, - 512521200, - 528246000, - 543970800, - 559695600, - 575420400, - 591145200, - 606870000, - 622594800, - 638319600, - 654649200, - 670374000, - 686098800, - 701823600, - 717548400, - 733273200, - 748998000, - 764118000, - 780447600, - 796172400, - 811897200, - 828226800, - 846370800, - 859676400, - 877820400, - 891126000, - 909270000, - 922575600, - 941324400, - 954025200, - 972774000, - 985474800, - 1004223600, - 1017529200, - 1035673200, - 1048978800, - 1067122800, - 1080428400, - 1099177200, - 1111878000, - 1130626800, - 1143327600, - 1162076400, - 1174784400, - 1193533200, - 1206838800, - 1224982800, - 1238288400, - 1256432400, - 1269738000, - 1288486800, - 1301274000, - 1319936400, - 1332637200, - 1351386000, - 1364691600, - 1382835600, - 1396227600, - 1414285200, - 1427590800, - 1446944400, - 1459040400, - 1473195600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 6952 - }, - { - "index": 4, - "is_dst": false, - "offset": 7016 - }, - { - "index": 8, - "is_dst": false, - "offset": 7200 - }, - { - "index": 12, - "is_dst": true, - "offset": 10800 - }, - { - "index": 17, - "is_dst": false, - "offset": 10800 - }, - { - "index": 21, - "is_dst": true, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-239c7722f428fac8-a2c18d265a771275.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-239c7722f428fac8-a2c18d265a771275.json deleted file mode 100644 index f4bf095b0..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-239c7722f428fac8-a2c18d265a771275.json +++ /dev/null @@ -1,290 +0,0 @@ -{ - "ids": [ - "america/north_dakota/new_salem" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "M", - "W", - "T", - "\u0000", - "M", - "P", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": { - "abbr": "CDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5 - ], - "transitions": [ - -2717643600, - -1633273200, - -1615132800, - -1601823600, - -1583683200, - -880210800, - -769395600, - -765388800, - -84380400, - -68659200, - -52930800, - -37209600, - -21481200, - -5760000, - 9968400, - 25689600, - 41418000, - 57744000, - 73472400, - 89193600, - 104922000, - 120643200, - 126694800, - 152092800, - 162378000, - 183542400, - 199270800, - 215596800, - 230720400, - 247046400, - 262774800, - 278496000, - 294224400, - 309945600, - 325674000, - 341395200, - 357123600, - 372844800, - 388573200, - 404899200, - 420022800, - 436348800, - 452077200, - 467798400, - 483526800, - 499248000, - 514976400, - 530697600, - 544611600, - 562147200, - 576061200, - 594201600, - 607510800, - 625651200, - 638960400, - 657100800, - 671014800, - 688550400, - 702464400, - 720000000, - 733914000, - 752054400, - 765363600, - 783504000, - 796813200, - 814953600, - 828867600, - 846403200, - 860317200, - 877852800, - 891766800, - 909302400, - 923216400, - 941356800, - 954666000, - 972806400, - 986115600, - 1004256000, - 1018170000, - 1035705600, - 1049619600, - 1067155200, - 1081065600, - 1099206000, - 1112515200, - 1130655600, - 1143964800, - 1162105200, - 1173600000, - 1194159600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -24339 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": true, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -21600 - }, - { - "index": 20, - "is_dst": false, - "offset": -21600 - }, - { - "index": 24, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-2450804cbdb4245e-ed50e5bf669def5d.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-2450804cbdb4245e-ed50e5bf669def5d.json deleted file mode 100644 index 180a59d50..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-2450804cbdb4245e-ed50e5bf669def5d.json +++ /dev/null @@ -1,306 +0,0 @@ -{ - "ids": [ - "america/adak", - "america/atka", - "us/aleutian" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "N", - "S", - "T", - "\u0000", - "N", - "W", - "T", - "\u0000", - "N", - "P", - "T", - "\u0000", - "B", - "S", - "T", - "\u0000", - "B", - "D", - "T", - "\u0000", - "A", - "H", - "S", - "T", - "\u0000", - "H", - "S", - "T", - "\u0000", - "H", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "HST", - "offset": -36000, - "transition": { - "abbr": "HDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 7, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8 - ], - "transitions": [ - -3225223727, - -2188944802, - -880196400, - -769395600, - -765374400, - -86878800, - -21466800, - -5745600, - 9982800, - 25704000, - 41432400, - 57758400, - 73486800, - 89208000, - 104936400, - 120657600, - 126709200, - 152107200, - 162392400, - 183556800, - 199285200, - 215611200, - 230734800, - 247060800, - 262789200, - 278510400, - 294238800, - 309960000, - 325688400, - 341409600, - 357138000, - 372859200, - 388587600, - 404913600, - 420037200, - 436363200, - 439034400, - 452088000, - 467809200, - 483537600, - 499258800, - 514987200, - 530708400, - 544622400, - 562158000, - 576072000, - 594212400, - 607521600, - 625662000, - 638971200, - 657111600, - 671025600, - 688561200, - 702475200, - 720010800, - 733924800, - 752065200, - 765374400, - 783514800, - 796824000, - 814964400, - 828878400, - 846414000, - 860328000, - 877863600, - 891777600, - 909313200, - 923227200, - 941367600, - 954676800, - 972817200, - 986126400, - 1004266800, - 1018180800, - 1035716400, - 1049630400, - 1067166000, - 1081080000, - 1099220400, - 1112529600, - 1130670000, - 1143979200, - 1162119600, - 1173614400, - 1194174000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 44002 - }, - { - "index": 0, - "is_dst": false, - "offset": -42398 - }, - { - "index": 4, - "is_dst": false, - "offset": -39600 - }, - { - "index": 8, - "is_dst": true, - "offset": -36000 - }, - { - "index": 12, - "is_dst": true, - "offset": -36000 - }, - { - "index": 16, - "is_dst": false, - "offset": -39600 - }, - { - "index": 20, - "is_dst": true, - "offset": -36000 - }, - { - "index": 24, - "is_dst": false, - "offset": -36000 - }, - { - "index": 29, - "is_dst": false, - "offset": -36000 - }, - { - "index": 33, - "is_dst": true, - "offset": -32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-24b250ef0928a9e9-5999d4be7c42fb8f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-24b250ef0928a9e9-5999d4be7c42fb8f.json deleted file mode 100644 index 6a849f0a5..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-24b250ef0928a9e9-5999d4be7c42fb8f.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "ids": [ - "africa/ndjamena" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "W", - "A", - "T", - "\u0000", - "W", - "A", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "WAT", - "offset": 3600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1 - ], - "transitions": [ - -1830387612, - 308703600, - 321314400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 3612 - }, - { - "index": 4, - "is_dst": false, - "offset": 3600 - }, - { - "index": 8, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-24bc4f701e560e8f-e2e836c44183123c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-24bc4f701e560e8f-e2e836c44183123c.json deleted file mode 100644 index a909160af..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-24bc4f701e560e8f-e2e836c44183123c.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "ids": [ - "america/argentina/buenos_aires", - "america/buenos_aires" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 6, - 4, - 5, - 4, - 5, - 4 - ], - "transitions": [ - -2372097972, - -1567453392, - -1233432000, - -1222981200, - -1205956800, - -1194037200, - -1172865600, - -1162501200, - -1141329600, - -1130965200, - -1109793600, - -1099429200, - -1078257600, - -1067806800, - -1046635200, - -1036270800, - -1015099200, - -1004734800, - -983563200, - -973198800, - -952027200, - -941576400, - -931032000, - -900882000, - -890337600, - -833749200, - -827265600, - -752274000, - -733780800, - -197326800, - -190843200, - -184194000, - -164491200, - -152658000, - -132955200, - -121122000, - -101419200, - -86821200, - -71092800, - -54766800, - -39038400, - -23317200, - -7588800, - 128142000, - 136605600, - 596948400, - 605066400, - 624423600, - 636516000, - 656478000, - 667965600, - 687927600, - 699415200, - 719377200, - 731469600, - 938919600, - 952052400, - 1198983600, - 1205632800, - 1224385200, - 1237082400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -14028 - }, - { - "index": 4, - "is_dst": false, - "offset": -15408 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -7200 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-25763d8b26764a7a-a87ab997611273f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-25763d8b26764a7a-a87ab997611273f.json deleted file mode 100644 index 7f4623f64..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-25763d8b26764a7a-a87ab997611273f.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "ids": [ - "africa/khartoum" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "A", - "T", - "\u0000", - "C", - "A", - "S", - "T", - "\u0000", - "E", - "A", - "T", - "\u0000" - ], - "posix": { - "abbr": "CAT", - "offset": 7200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 1 - ], - "transitions": [ - -1230775808, - 10360800, - 24786000, - 41810400, - 56322000, - 73432800, - 87944400, - 104882400, - 119480400, - 136332000, - 151016400, - 167781600, - 182552400, - 199231200, - 214174800, - 230680800, - 245710800, - 262735200, - 277246800, - 294184800, - 308782800, - 325634400, - 340405200, - 357084000, - 371941200, - 388533600, - 403477200, - 419983200, - 435013200, - 452037600, - 466635600, - 483487200, - 498171600, - 947930400, - 1509483600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 7808 - }, - { - "index": 4, - "is_dst": false, - "offset": 7200 - }, - { - "index": 8, - "is_dst": true, - "offset": 10800 - }, - { - "index": 13, - "is_dst": false, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-26ac36da2732c840-6194f9b281a9daa7.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-26ac36da2732c840-6194f9b281a9daa7.json deleted file mode 100644 index de8fa4d3c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-26ac36da2732c840-6194f9b281a9daa7.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "ids": [ - "america/argentina/salta" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 2, - 5, - 4, - 5, - 4, - 6, - 4, - 5, - 4 - ], - "transitions": [ - -2372096300, - -1567453392, - -1233432000, - -1222981200, - -1205956800, - -1194037200, - -1172865600, - -1162501200, - -1141329600, - -1130965200, - -1109793600, - -1099429200, - -1078257600, - -1067806800, - -1046635200, - -1036270800, - -1015099200, - -1004734800, - -983563200, - -973198800, - -952027200, - -941576400, - -931032000, - -900882000, - -890337600, - -833749200, - -827265600, - -752274000, - -733780800, - -197326800, - -190843200, - -184194000, - -164491200, - -152658000, - -132955200, - -121122000, - -101419200, - -86821200, - -71092800, - -54766800, - -39038400, - -23317200, - -7588800, - 128142000, - 136605600, - 596948400, - 605066400, - 624423600, - 636516000, - 656478000, - 667965600, - 687931200, - 699415200, - 719377200, - 731469600, - 938919600, - 952052400, - 1198983600, - 1205632800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -15700 - }, - { - "index": 4, - "is_dst": false, - "offset": -15408 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -7200 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-26aecc98f9d83045-70b5f49db89f476d.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-26aecc98f9d83045-70b5f49db89f476d.json deleted file mode 100644 index 8f5a5475c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-26aecc98f9d83045-70b5f49db89f476d.json +++ /dev/null @@ -1,215 +0,0 @@ -{ - "ids": [ - "america/indiana/petersburg" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "C", - "W", - "T", - "\u0000", - "C", - "P", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": { - "abbr": "EDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 5, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 5, - 1, - 2, - 1, - 2, - 5 - ], - "transitions": [ - -2717647200, - -1633276800, - -1615136400, - -1601827200, - -1583686800, - -880214400, - -769395600, - -765392400, - -462996000, - -450291600, - -431539200, - -418237200, - -400089600, - -386787600, - -368640000, - -355338000, - -337190400, - -323888400, - -305740800, - -292438800, - -273686400, - -257965200, - -242236800, - -226515600, - -210787200, - -195066000, - -179337600, - -163616400, - -147888000, - -100112400, - -84384000, - -68662800, - -52934400, - -37213200, - -21484800, - -5763600, - 9964800, - 25686000, - 41414400, - 57740400, - 73468800, - 89190000, - 104918400, - 120639600, - 126691200, - 152089200, - 162374400, - 183538800, - 199267200, - 215593200, - 230716800, - 247042800, - 1143961200, - 1143964800, - 1162105200, - 1173600000, - 1194159600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -20947 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - }, - { - "index": 20, - "is_dst": false, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-26bf0cacd24f77a1-64043bb5dbcfda2b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-26bf0cacd24f77a1-64043bb5dbcfda2b.json deleted file mode 100644 index dd64e1168..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-26bf0cacd24f77a1-64043bb5dbcfda2b.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "ids": [ - "europe/andorra" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "W", - "E", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2177453164, - -733881600, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 364 - }, - { - "index": 4, - "is_dst": false, - "offset": 0 - }, - { - "index": 8, - "is_dst": false, - "offset": 3600 - }, - { - "index": 12, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-273d77751416ce66-9d1655bf8f3b084b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-273d77751416ce66-9d1655bf8f3b084b.json deleted file mode 100644 index e610cda8f..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-273d77751416ce66-9d1655bf8f3b084b.json +++ /dev/null @@ -1,176 +0,0 @@ -{ - "ids": [ - "america/port-au-prince" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "P", - "M", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": { - "abbr": "EDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2524504240, - -1670483460, - 421218000, - 436334400, - 452062800, - 467784000, - 483512400, - 499233600, - 514962000, - 530683200, - 546411600, - 562132800, - 576050400, - 594194400, - 607500000, - 625644000, - 638949600, - 657093600, - 671004000, - 688543200, - 702453600, - 719992800, - 733903200, - 752047200, - 765352800, - 783496800, - 796802400, - 814946400, - 828856800, - 846396000, - 860306400, - 877845600, - 1112504400, - 1130644800, - 1143954000, - 1162094400, - 1331449200, - 1352008800, - 1362898800, - 1383458400, - 1394348400, - 1414908000, - 1425798000, - 1446357600, - 1489302000, - 1509861600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -17360 - }, - { - "index": 4, - "is_dst": false, - "offset": -17340 - }, - { - "index": 9, - "is_dst": false, - "offset": -18000 - }, - { - "index": 13, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-283cf30fce0ee58e-b9587eef2ed46e22.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-283cf30fce0ee58e-b9587eef2ed46e22.json deleted file mode 100644 index 41b804d8f..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-283cf30fce0ee58e-b9587eef2ed46e22.json +++ /dev/null @@ -1,106 +0,0 @@ -{ - "ids": [ - "asia/brunei", - "asia/kuching" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "7", - "3", - "0", - "\u0000", - "+", - "0", - "8", - "\u0000", - "+", - "0", - "8", - "2", - "0", - "\u0000", - "+", - "0", - "9", - "\u0000" - ], - "posix": { - "abbr": "+08", - "offset": 28800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 2 - ], - "transitions": [ - -1383463280, - -1167636600, - -1082448000, - -1074586800, - -1050825600, - -1042964400, - -1019289600, - -1011428400, - -987753600, - -979892400, - -956217600, - -948356400, - -924595200, - -916734000, - -893059200, - -885198000, - -879667200, - -767005200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 26480 - }, - { - "index": 4, - "is_dst": false, - "offset": 27000 - }, - { - "index": 10, - "is_dst": false, - "offset": 28800 - }, - { - "index": 14, - "is_dst": true, - "offset": 30000 - }, - { - "index": 20, - "is_dst": false, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-291cff29f8a99dfe-a55df00754cce7a5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-291cff29f8a99dfe-a55df00754cce7a5.json deleted file mode 100644 index 3e590a7d7..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-291cff29f8a99dfe-a55df00754cce7a5.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "ids": [ - "asia/novokuznetsk" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "7", - "\u0000", - "+", - "0", - "8", - "\u0000" - ], - "posix": { - "abbr": "+07", - "offset": 25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 6, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 1, - 5, - 1, - 2 - ], - "transitions": [ - -1441259328, - -1247551200, - 354906000, - 370713600, - 386442000, - 402249600, - 417978000, - 433785600, - 449600400, - 465332400, - 481057200, - 496782000, - 512506800, - 528231600, - 543956400, - 559681200, - 575406000, - 591130800, - 606855600, - 622580400, - 638305200, - 654634800, - 670359600, - 670363200, - 686088000, - 695764800, - 701809200, - 717534000, - 733258800, - 748983600, - 764708400, - 780433200, - 796158000, - 811882800, - 828212400, - 846356400, - 859662000, - 877806000, - 891111600, - 909255600, - 922561200, - 941310000, - 954010800, - 972759600, - 985460400, - 1004209200, - 1017514800, - 1035658800, - 1048964400, - 1067108400, - 1080414000, - 1099162800, - 1111863600, - 1130612400, - 1143313200, - 1162062000, - 1174762800, - 1193511600, - 1206817200, - 1224961200, - 1238266800, - 1256410800, - 1269716400, - 1269720000, - 1288468800, - 1301169600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 20928 - }, - { - "index": 4, - "is_dst": false, - "offset": 21600 - }, - { - "index": 8, - "is_dst": false, - "offset": 25200 - }, - { - "index": 12, - "is_dst": true, - "offset": 28800 - }, - { - "index": 4, - "is_dst": true, - "offset": 25200 - }, - { - "index": 8, - "is_dst": true, - "offset": 25200 - }, - { - "index": 8, - "is_dst": true, - "offset": 28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-2a2176981e284105-a060adcd628f6f53.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-2a2176981e284105-a060adcd628f6f53.json deleted file mode 100644 index 1f8ecef21..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-2a2176981e284105-a060adcd628f6f53.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "ids": [ - "australia/eucla" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "8", - "4", - "5", - "\u0000", - "+", - "0", - "9", - "4", - "5", - "\u0000" - ], - "posix": { - "abbr": "+0845", - "offset": 31500, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2337928528, - -1672555500, - -1665384300, - -883637100, - -876120300, - -860395500, - -844670700, - 152039700, - 162926100, - 436295700, - 447182100, - 690311700, - 699383700, - 1165079700, - 1174756500, - 1193505300, - 1206810900, - 1224954900, - 1238260500 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 30928 - }, - { - "index": 4, - "is_dst": false, - "offset": 31500 - }, - { - "index": 10, - "is_dst": true, - "offset": 35100 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-2a554d4e97833d6e-120777f752f63146.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-2a554d4e97833d6e-120777f752f63146.json deleted file mode 100644 index ff42fb3a0..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-2a554d4e97833d6e-120777f752f63146.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt+9" - ], - "tzif": { - "designations": [ - "-", - "0", - "9", - "\u0000" - ], - "posix": { - "abbr": "-09", - "offset": -32400, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-2a7fc944a4c2991b-23d4ede40e15baee.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-2a7fc944a4c2991b-23d4ede40e15baee.json deleted file mode 100644 index 459e1d9a9..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-2a7fc944a4c2991b-23d4ede40e15baee.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "ids": [ - "asia/bangkok", - "asia/phnom_penh", - "asia/vientiane", - "indian/christmas" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "B", - "M", - "T", - "\u0000", - "+", - "0", - "7", - "\u0000" - ], - "posix": { - "abbr": "+07", - "offset": 25200, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -2840164924, - -1570084924 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 24124 - }, - { - "index": 4, - "is_dst": false, - "offset": 24124 - }, - { - "index": 8, - "is_dst": false, - "offset": 25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-2a9b3a635fc27340-81046b0173029cfd.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-2a9b3a635fc27340-81046b0173029cfd.json deleted file mode 100644 index 41b260586..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-2a9b3a635fc27340-81046b0173029cfd.json +++ /dev/null @@ -1,71 +0,0 @@ -{ - "ids": [ - "america/paramaribo" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "M", - "T", - "\u0000", - "-", - "0", - "3", - "3", - "0", - "\u0000", - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4 - ], - "transitions": [ - -1861906760, - -1104524348, - -765317964, - 465449400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -13240 - }, - { - "index": 4, - "is_dst": false, - "offset": -13252 - }, - { - "index": 4, - "is_dst": false, - "offset": -13236 - }, - { - "index": 8, - "is_dst": false, - "offset": -12600 - }, - { - "index": 14, - "is_dst": false, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-2ae3e9466dbec3ec-469ede62937732cf.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-2ae3e9466dbec3ec-469ede62937732cf.json deleted file mode 100644 index 2c2cf7553..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-2ae3e9466dbec3ec-469ede62937732cf.json +++ /dev/null @@ -1,214 +0,0 @@ -{ - "ids": [ - "europe/samara" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "+04", - "offset": 14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 5, - 1, - 6, - 7, - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 1, - 5, - 1, - 2 - ], - "transitions": [ - -1593820800, - -1247540400, - 354916800, - 370724400, - 386452800, - 402260400, - 417988800, - 433796400, - 449611200, - 465343200, - 481068000, - 496792800, - 512517600, - 528242400, - 543967200, - 559692000, - 575416800, - 591141600, - 606866400, - 606870000, - 622594800, - 638319600, - 654649200, - 670374000, - 670377600, - 686102400, - 687916800, - 701820000, - 717544800, - 733269600, - 748994400, - 764719200, - 780444000, - 796168800, - 811893600, - 828223200, - 846367200, - 859672800, - 877816800, - 891122400, - 909266400, - 922572000, - 941320800, - 954021600, - 972770400, - 985471200, - 1004220000, - 1017525600, - 1035669600, - 1048975200, - 1067119200, - 1080424800, - 1099173600, - 1111874400, - 1130623200, - 1143324000, - 1162072800, - 1174773600, - 1193522400, - 1206828000, - 1224972000, - 1238277600, - 1256421600, - 1269727200, - 1269730800, - 1288479600, - 1301180400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 12020 - }, - { - "index": 4, - "is_dst": false, - "offset": 10800 - }, - { - "index": 8, - "is_dst": false, - "offset": 14400 - }, - { - "index": 12, - "is_dst": true, - "offset": 18000 - }, - { - "index": 4, - "is_dst": true, - "offset": 14400 - }, - { - "index": 8, - "is_dst": true, - "offset": 14400 - }, - { - "index": 16, - "is_dst": true, - "offset": 10800 - }, - { - "index": 4, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-2b407bee2bf8cbea-da8810ae536ff8ea.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-2b407bee2bf8cbea-da8810ae536ff8ea.json deleted file mode 100644 index ea476aadf..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-2b407bee2bf8cbea-da8810ae536ff8ea.json +++ /dev/null @@ -1,426 +0,0 @@ -{ - "ids": [ - "africa/el_aaiun" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "1", - "\u0000", - "+", - "0", - "0", - "\u0000", - "+", - "0", - "1", - "\u0000" - ], - "posix": { - "abbr": "+01", - "offset": 3600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3 - ], - "transitions": [ - -1136070432, - 198291600, - 199756800, - 207702000, - 231292800, - 244249200, - 265507200, - 271033200, - 1212278400, - 1220223600, - 1243814400, - 1250809200, - 1272758400, - 1281222000, - 1301788800, - 1312066800, - 1335664800, - 1342749600, - 1345428000, - 1348970400, - 1367114400, - 1373162400, - 1376100000, - 1382839200, - 1396144800, - 1403920800, - 1406944800, - 1414288800, - 1427594400, - 1434247200, - 1437271200, - 1445738400, - 1459044000, - 1465092000, - 1468116000, - 1477792800, - 1490493600, - 1495332000, - 1498960800, - 1509242400, - 1521943200, - 1526176800, - 1529200800, - 1557021600, - 1560045600, - 1587261600, - 1590890400, - 1618106400, - 1621130400, - 1648346400, - 1651975200, - 1679191200, - 1682215200, - 1710036000, - 1713060000, - 1740276000, - 1743904800, - 1771120800, - 1774144800, - 1801965600, - 1804989600, - 1832205600, - 1835834400, - 1863050400, - 1866074400, - 1893290400, - 1896919200, - 1924135200, - 1927159200, - 1954980000, - 1958004000, - 1985220000, - 1988848800, - 2016064800, - 2019088800, - 2046304800, - 2049933600, - 2077149600, - 2080778400, - 2107994400, - 2111018400, - 2138234400, - 2141863200, - 2169079200, - 2172103200, - 2199924000, - 2202948000, - 2230164000, - 2233792800, - 2261008800, - 2264032800, - 2291248800, - 2294877600, - 2322093600, - 2325722400, - 2352938400, - 2355962400, - 2383178400, - 2386807200, - 2414023200, - 2417047200, - 2444868000, - 2447892000, - 2475108000, - 2478736800, - 2505952800, - 2508976800, - 2536192800, - 2539821600, - 2567037600, - 2570666400, - 2597882400, - 2600906400, - 2628122400, - 2631751200, - 2658967200, - 2661991200, - 2689812000, - 2692836000, - 2720052000, - 2723680800, - 2750896800, - 2753920800, - 2781136800, - 2784765600, - 2811981600, - 2815610400, - 2842826400, - 2845850400, - 2873066400, - 2876695200, - 2903911200, - 2906935200, - 2934756000, - 2937780000, - 2964996000, - 2968624800, - 2995840800, - 2998864800, - 3026080800, - 3029709600, - 3056925600, - 3060554400, - 3087770400, - 3090794400, - 3118010400, - 3121639200, - 3148855200, - 3151879200, - 3179700000, - 3182724000, - 3209940000, - 3213568800, - 3240784800, - 3243808800, - 3271024800, - 3274653600, - 3301869600, - 3305498400, - 3332714400, - 3335738400, - 3362954400, - 3366583200, - 3393799200, - 3396823200, - 3424644000, - 3427668000, - 3454884000, - 3458512800, - 3485728800, - 3488752800, - 3515968800, - 3519597600, - 3546813600, - 3549837600, - 3577658400, - 3580682400, - 3607898400, - 3611527200, - 3638743200, - 3641767200, - 3669588000, - 3672612000, - 3699828000, - 3703456800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -3168 - }, - { - "index": 4, - "is_dst": false, - "offset": -3600 - }, - { - "index": 8, - "is_dst": false, - "offset": 0 - }, - { - "index": 12, - "is_dst": true, - "offset": 3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-2bd99bb6843e89cf-947053f9d533e599.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-2bd99bb6843e89cf-947053f9d533e599.json deleted file mode 100644 index 01004e859..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-2bd99bb6843e89cf-947053f9d533e599.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt-8" - ], - "tzif": { - "designations": [ - "+", - "0", - "8", - "\u0000" - ], - "posix": { - "abbr": "+08", - "offset": 28800, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-2be99c3dd72ebbf9-bc61c21d5b0d6d30.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-2be99c3dd72ebbf9-bc61c21d5b0d6d30.json deleted file mode 100644 index 674e8aa76..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-2be99c3dd72ebbf9-bc61c21d5b0d6d30.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "ids": [ - "pacific/kiritimati" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "1", - "0", - "4", - "0", - "\u0000", - "-", - "1", - "0", - "\u0000", - "+", - "1", - "4", - "\u0000" - ], - "posix": { - "abbr": "+14", - "offset": 50400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3 - ], - "transitions": [ - -2177415040, - 307622400, - 788868000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -37760 - }, - { - "index": 4, - "is_dst": false, - "offset": -38400 - }, - { - "index": 10, - "is_dst": false, - "offset": -36000 - }, - { - "index": 14, - "is_dst": false, - "offset": 50400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-2c1bb7953877feff-7c31ecf781243146.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-2c1bb7953877feff-7c31ecf781243146.json deleted file mode 100644 index d771f1ee0..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-2c1bb7953877feff-7c31ecf781243146.json +++ /dev/null @@ -1,214 +0,0 @@ -{ - "ids": [ - "america/ciudad_juarez" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "MST", - "offset": -25200, - "transition": { - "abbr": "MDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 2, - 4, - 2, - 4, - 2, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 2, - 1 - ], - "transitions": [ - -1514739600, - -1343149200, - -1234807200, - -1220461200, - -1207159200, - -1191344400, - 828864000, - 846399600, - 860313600, - 877849200, - 891766800, - 909302400, - 923216400, - 941356800, - 954666000, - 972806400, - 989139600, - 1001836800, - 1018170000, - 1035705600, - 1049619600, - 1067155200, - 1081069200, - 1099209600, - 1112518800, - 1130659200, - 1143968400, - 1162108800, - 1175418000, - 1193558400, - 1207472400, - 1225008000, - 1238922000, - 1256457600, - 1268557200, - 1289116800, - 1300006800, - 1320566400, - 1331456400, - 1352016000, - 1362906000, - 1383465600, - 1394355600, - 1414915200, - 1425805200, - 1446364800, - 1457859600, - 1478419200, - 1489309200, - 1509868800, - 1520758800, - 1541318400, - 1552208400, - 1572768000, - 1583658000, - 1604217600, - 1615712400, - 1636272000, - 1647162000, - 1667116800, - 1669788000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -25556 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": false, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-2d819a70236c9f86-f7bfd37ab9ee4e7.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-2d819a70236c9f86-f7bfd37ab9ee4e7.json deleted file mode 100644 index d072eb337..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-2d819a70236c9f86-f7bfd37ab9ee4e7.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt+2" - ], - "tzif": { - "designations": [ - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-02", - "offset": -7200, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3234542952508833-29d7170294df969c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3234542952508833-29d7170294df969c.json deleted file mode 100644 index 8ba7000d9..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3234542952508833-29d7170294df969c.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "ids": [ - "america/monterrey" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2 - ], - "transitions": [ - -1514743200, - -1343149200, - -1234807200, - -1220461200, - -1207159200, - -1191344400, - 576057600, - 594198000, - 828864000, - 846399600, - 860313600, - 877849200, - 891763200, - 909298800, - 923212800, - 941353200, - 954662400, - 972802800, - 989136000, - 1001833200, - 1018166400, - 1035702000, - 1049616000, - 1067151600, - 1081065600, - 1099206000, - 1112515200, - 1130655600, - 1143964800, - 1162105200, - 1175414400, - 1193554800, - 1207468800, - 1225004400, - 1238918400, - 1256454000, - 1270368000, - 1288508400, - 1301817600, - 1319958000, - 1333267200, - 1351407600, - 1365321600, - 1382857200, - 1396771200, - 1414306800, - 1428220800, - 1445756400, - 1459670400, - 1477810800, - 1491120000, - 1509260400, - 1522569600, - 1540710000, - 1554624000, - 1572159600, - 1586073600, - 1603609200, - 1617523200, - 1635663600, - 1648972800, - 1667113200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -24076 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": false, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-33db81d7f03c072e-cf26af3831762b0b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-33db81d7f03c072e-cf26af3831762b0b.json deleted file mode 100644 index ad652a941..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-33db81d7f03c072e-cf26af3831762b0b.json +++ /dev/null @@ -1,285 +0,0 @@ -{ - "ids": [ - "america/yakutat" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "Y", - "S", - "T", - "\u0000", - "Y", - "W", - "T", - "\u0000", - "Y", - "P", - "T", - "\u0000", - "Y", - "D", - "T", - "\u0000", - "A", - "K", - "S", - "T", - "\u0000", - "A", - "K", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AKST", - "offset": -32400, - "transition": { - "abbr": "AKDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6 - ], - "transitions": [ - -3225223727, - -2188953665, - -880203600, - -769395600, - -765381600, - -21474000, - -5752800, - 9975600, - 25696800, - 41425200, - 57751200, - 73479600, - 89200800, - 104929200, - 120650400, - 126702000, - 152100000, - 162385200, - 183549600, - 199278000, - 215604000, - 230727600, - 247053600, - 262782000, - 278503200, - 294231600, - 309952800, - 325681200, - 341402400, - 357130800, - 372852000, - 388580400, - 404906400, - 420030000, - 436356000, - 439030800, - 452084400, - 467805600, - 483534000, - 499255200, - 514983600, - 530704800, - 544618800, - 562154400, - 576068400, - 594208800, - 607518000, - 625658400, - 638967600, - 657108000, - 671022000, - 688557600, - 702471600, - 720007200, - 733921200, - 752061600, - 765370800, - 783511200, - 796820400, - 814960800, - 828874800, - 846410400, - 860324400, - 877860000, - 891774000, - 909309600, - 923223600, - 941364000, - 954673200, - 972813600, - 986122800, - 1004263200, - 1018177200, - 1035712800, - 1049626800, - 1067162400, - 1081076400, - 1099216800, - 1112526000, - 1130666400, - 1143975600, - 1162116000, - 1173610800, - 1194170400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 52865 - }, - { - "index": 0, - "is_dst": false, - "offset": -33535 - }, - { - "index": 4, - "is_dst": false, - "offset": -32400 - }, - { - "index": 8, - "is_dst": true, - "offset": -28800 - }, - { - "index": 12, - "is_dst": true, - "offset": -28800 - }, - { - "index": 16, - "is_dst": true, - "offset": -28800 - }, - { - "index": 20, - "is_dst": false, - "offset": -32400 - }, - { - "index": 25, - "is_dst": true, - "offset": -28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-34047004b336df3e-2c98809401c82e5c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-34047004b336df3e-2c98809401c82e5c.json deleted file mode 100644 index 091b7c3d9..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-34047004b336df3e-2c98809401c82e5c.json +++ /dev/null @@ -1,335 +0,0 @@ -{ - "ids": [ - "europe/gibraltar" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "G", - "M", - "T", - "\u0000", - "B", - "S", - "T", - "\u0000", - "B", - "D", - "S", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 1, - 2, - 1, - 2, - 3, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4 - ], - "transitions": [ - -2821649916, - -1691964000, - -1680472800, - -1664143200, - -1650146400, - -1633903200, - -1617487200, - -1601848800, - -1586037600, - -1570399200, - -1552168800, - -1538344800, - -1522533600, - -1507500000, - -1490565600, - -1473631200, - -1460930400, - -1442786400, - -1428876000, - -1410732000, - -1396216800, - -1379282400, - -1364767200, - -1348437600, - -1333317600, - -1315778400, - -1301263200, - -1284328800, - -1269813600, - -1253484000, - -1238364000, - -1221429600, - -1206914400, - -1189980000, - -1175464800, - -1159135200, - -1143410400, - -1126476000, - -1111960800, - -1095631200, - -1080511200, - -1063576800, - -1049061600, - -1032127200, - -1017612000, - -1001282400, - -986162400, - -969228000, - -950479200, - -942012000, - -904518000, - -896050800, - -875487600, - -864601200, - -844038000, - -832546800, - -812588400, - -798073200, - -781052400, - -772066800, - -764805600, - -748476000, - -733356000, - -719445600, - -717030000, - -706748400, - -699487200, - -687996000, - -668037600, - -654732000, - -636588000, - -622072800, - -605743200, - -590623200, - -574293600, - -558568800, - -542239200, - -527119200, - -512604000, - -496274400, - -481154400, - -464220000, - -449704800, - -432165600, - -417650400, - -401320800, - 378687600, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -1284 - }, - { - "index": 4, - "is_dst": false, - "offset": 0 - }, - { - "index": 8, - "is_dst": true, - "offset": 3600 - }, - { - "index": 12, - "is_dst": true, - "offset": 7200 - }, - { - "index": 17, - "is_dst": false, - "offset": 3600 - }, - { - "index": 21, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-355a4a5906a54477-93a25eca130657a7.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-355a4a5906a54477-93a25eca130657a7.json deleted file mode 100644 index 23ea9b274..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-355a4a5906a54477-93a25eca130657a7.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "ids": [ - "pacific/nauru" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "1", - "3", - "0", - "\u0000", - "+", - "0", - "9", - "\u0000", - "+", - "1", - "2", - "\u0000" - ], - "posix": { - "abbr": "+12", - "offset": 43200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3 - ], - "transitions": [ - -1545131260, - -862918200, - -767350800, - 287418600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 40060 - }, - { - "index": 4, - "is_dst": false, - "offset": 41400 - }, - { - "index": 10, - "is_dst": false, - "offset": 32400 - }, - { - "index": 14, - "is_dst": false, - "offset": 43200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3567a65ce3b07b4a-f971fb2d233e39c4.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3567a65ce3b07b4a-f971fb2d233e39c4.json deleted file mode 100644 index 7a81e2f6e..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3567a65ce3b07b4a-f971fb2d233e39c4.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "ids": [ - "america/fortaleza" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1767216360, - -1206957600, - -1191362400, - -1175374800, - -1159826400, - -633819600, - -622069200, - -602283600, - -591832800, - -570747600, - -560210400, - -539125200, - -531352800, - -191365200, - -184197600, - -155163600, - -150069600, - -128898000, - -121125600, - -99954000, - -89589600, - -68418000, - -57967200, - 499748400, - 511236000, - 530593200, - 540266400, - 562129200, - 571197600, - 592974000, - 602042400, - 624423600, - 634701600, - 938919600, - 951616800, - 970974000, - 972180000, - 1003028400, - 1013911200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -9240 - }, - { - "index": 4, - "is_dst": false, - "offset": -10800 - }, - { - "index": 8, - "is_dst": true, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-36890fddb7a9031e-9536dc9e21edad35.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-36890fddb7a9031e-9536dc9e21edad35.json deleted file mode 100644 index 70446fbbc..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-36890fddb7a9031e-9536dc9e21edad35.json +++ /dev/null @@ -1,210 +0,0 @@ -{ - "ids": [ - "asia/chita" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "8", - "\u0000", - "+", - "0", - "9", - "\u0000", - "+", - "1", - "0", - "\u0000" - ], - "posix": { - "abbr": "+09", - "offset": 32400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 6, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 7, - 1, - 2 - ], - "transitions": [ - -1579419232, - -1247558400, - 354898800, - 370706400, - 386434800, - 402242400, - 417970800, - 433778400, - 449593200, - 465325200, - 481050000, - 496774800, - 512499600, - 528224400, - 543949200, - 559674000, - 575398800, - 591123600, - 606848400, - 622573200, - 638298000, - 654627600, - 670352400, - 670356000, - 686080800, - 695757600, - 701802000, - 717526800, - 733251600, - 748976400, - 764701200, - 780426000, - 796150800, - 811875600, - 828205200, - 846349200, - 859654800, - 877798800, - 891104400, - 909248400, - 922554000, - 941302800, - 954003600, - 972752400, - 985453200, - 1004202000, - 1017507600, - 1035651600, - 1048957200, - 1067101200, - 1080406800, - 1099155600, - 1111856400, - 1130605200, - 1143306000, - 1162054800, - 1174755600, - 1193504400, - 1206810000, - 1224954000, - 1238259600, - 1256403600, - 1269709200, - 1288458000, - 1301158800, - 1414252800, - 1459015200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 27232 - }, - { - "index": 4, - "is_dst": false, - "offset": 28800 - }, - { - "index": 8, - "is_dst": false, - "offset": 32400 - }, - { - "index": 12, - "is_dst": true, - "offset": 36000 - }, - { - "index": 4, - "is_dst": true, - "offset": 32400 - }, - { - "index": 8, - "is_dst": true, - "offset": 32400 - }, - { - "index": 8, - "is_dst": true, - "offset": 36000 - }, - { - "index": 12, - "is_dst": false, - "offset": 36000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-37762e44a2edd792-f8d4f659f37bd065.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-37762e44a2edd792-f8d4f659f37bd065.json deleted file mode 100644 index 01addc30b..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-37762e44a2edd792-f8d4f659f37bd065.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "ids": [ - "asia/nicosia", - "europe/nicosia" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 14400 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2 - ], - "transitions": [ - -1518920008, - 166572000, - 182293200, - 200959200, - 213829200, - 228866400, - 243982800, - 260316000, - 276123600, - 291765600, - 307486800, - 323820000, - 338936400, - 354664800, - 370386000, - 386114400, - 401835600, - 417564000, - 433285200, - 449013600, - 465339600, - 481068000, - 496789200, - 512517600, - 528238800, - 543967200, - 559688400, - 575416800, - 591138000, - 606866400, - 622587600, - 638316000, - 654642000, - 670370400, - 686091600, - 701820000, - 717541200, - 733269600, - 748990800, - 764719200, - 780440400, - 796168800, - 811890000, - 828223200, - 843944400, - 859672800, - 875394000, - 891122400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 8008 - }, - { - "index": 4, - "is_dst": false, - "offset": 7200 - }, - { - "index": 8, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-380c01b13aae6590-c452e791254501.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-380c01b13aae6590-c452e791254501.json deleted file mode 100644 index 7a2d1bc47..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-380c01b13aae6590-c452e791254501.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "ids": [ - "america/argentina/ushuaia" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 6, - 4, - 2, - 4, - 5, - 4 - ], - "transitions": [ - -2372095608, - -1567453392, - -1233432000, - -1222981200, - -1205956800, - -1194037200, - -1172865600, - -1162501200, - -1141329600, - -1130965200, - -1109793600, - -1099429200, - -1078257600, - -1067806800, - -1046635200, - -1036270800, - -1015099200, - -1004734800, - -983563200, - -973198800, - -952027200, - -941576400, - -931032000, - -900882000, - -890337600, - -833749200, - -827265600, - -752274000, - -733780800, - -197326800, - -190843200, - -184194000, - -164491200, - -152658000, - -132955200, - -121122000, - -101419200, - -86821200, - -71092800, - -54766800, - -39038400, - -23317200, - -7588800, - 128142000, - 136605600, - 596948400, - 605066400, - 624423600, - 636516000, - 656478000, - 667965600, - 687927600, - 699415200, - 719377200, - 731469600, - 938919600, - 952052400, - 1085886000, - 1087704000, - 1198983600, - 1205632800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -16392 - }, - { - "index": 4, - "is_dst": false, - "offset": -15408 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -7200 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-38d88ef47726082c-86b88cdb491ca221.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-38d88ef47726082c-86b88cdb491ca221.json deleted file mode 100644 index aeed51687..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-38d88ef47726082c-86b88cdb491ca221.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "ids": [ - "america/guyana" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "4", - "5", - "\u0000", - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-04", - "offset": -14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 1 - ], - "transitions": [ - -1843589241, - -1730577600, - 176096700, - 701841600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -13959 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": false, - "offset": -13500 - }, - { - "index": 14, - "is_dst": false, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3994d21beae7c7b6-3a834f9ef48b6c6c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3994d21beae7c7b6-3a834f9ef48b6c6c.json deleted file mode 100644 index 260ff8e9a..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3994d21beae7c7b6-3a834f9ef48b6c6c.json +++ /dev/null @@ -1,446 +0,0 @@ -{ - "ids": [ - "america/new_york", - "est5edt", - "us/eastern" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000", - "E", - "W", - "T", - "\u0000", - "E", - "P", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": { - "abbr": "EDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2717650800, - -1633280400, - -1615140000, - -1601830800, - -1583690400, - -1570381200, - -1551636000, - -1536512400, - -1523210400, - -1504458000, - -1491760800, - -1473008400, - -1459706400, - -1441558800, - -1428256800, - -1410109200, - -1396807200, - -1378659600, - -1365357600, - -1347210000, - -1333908000, - -1315155600, - -1301853600, - -1283706000, - -1270404000, - -1252256400, - -1238954400, - -1220806800, - -1207504800, - -1189357200, - -1176055200, - -1157302800, - -1144605600, - -1125853200, - -1112551200, - -1094403600, - -1081101600, - -1062954000, - -1049652000, - -1031504400, - -1018202400, - -1000054800, - -986752800, - -968000400, - -955303200, - -936550800, - -923248800, - -905101200, - -891799200, - -880218000, - -769395600, - -765396000, - -747248400, - -733946400, - -715798800, - -702496800, - -684349200, - -671047200, - -652899600, - -639597600, - -620845200, - -608148000, - -589395600, - -576093600, - -557946000, - -544644000, - -526496400, - -513194400, - -495046800, - -481744800, - -463597200, - -447271200, - -431542800, - -415821600, - -400093200, - -384372000, - -368643600, - -352922400, - -337194000, - -321472800, - -305744400, - -289418400, - -273690000, - -257968800, - -242240400, - -226519200, - -210790800, - -195069600, - -179341200, - -163620000, - -147891600, - -131565600, - -116442000, - -100116000, - -84387600, - -68666400, - -52938000, - -37216800, - -21488400, - -5767200, - 9961200, - 25682400, - 41410800, - 57736800, - 73465200, - 89186400, - 104914800, - 120636000, - 126687600, - 152085600, - 162370800, - 183535200, - 199263600, - 215589600, - 230713200, - 247039200, - 262767600, - 278488800, - 294217200, - 309938400, - 325666800, - 341388000, - 357116400, - 372837600, - 388566000, - 404892000, - 420015600, - 436341600, - 452070000, - 467791200, - 483519600, - 499240800, - 514969200, - 530690400, - 544604400, - 562140000, - 576054000, - 594194400, - 607503600, - 625644000, - 638953200, - 657093600, - 671007600, - 688543200, - 702457200, - 719992800, - 733906800, - 752047200, - 765356400, - 783496800, - 796806000, - 814946400, - 828860400, - 846396000, - 860310000, - 877845600, - 891759600, - 909295200, - 923209200, - 941349600, - 954658800, - 972799200, - 986108400, - 1004248800, - 1018162800, - 1035698400, - 1049612400, - 1067148000, - 1081062000, - 1099202400, - 1112511600, - 1130652000, - 1143961200, - 1162101600, - 1173596400, - 1194156000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -17762 - }, - { - "index": 4, - "is_dst": false, - "offset": -18000 - }, - { - "index": 8, - "is_dst": true, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -14400 - }, - { - "index": 16, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3a07d4451f21c9ef-d9574bd8a6e8418c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3a07d4451f21c9ef-d9574bd8a6e8418c.json deleted file mode 100644 index bffc6b94e..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3a07d4451f21c9ef-d9574bd8a6e8418c.json +++ /dev/null @@ -1,270 +0,0 @@ -{ - "ids": [ - "europe/warsaw", - "poland" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "W", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 4, - 5, - 4, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2840145840, - -1717032240, - -1693706400, - -1680483600, - -1663455600, - -1650150000, - -1632006000, - -1618700400, - -1600473600, - -1587168000, - -1501725600, - -931734000, - -857257200, - -844556400, - -828226800, - -812502000, - -796608000, - -778726800, - -762660000, - -748486800, - -733273200, - -715215600, - -701910000, - -684975600, - -670460400, - -654130800, - -639010800, - -397094400, - -386812800, - -371088000, - -355363200, - -334195200, - -323308800, - -307584000, - -291859200, - -271296000, - -260409600, - -239846400, - -228960000, - -208396800, - -197510400, - -176342400, - -166060800, - 228873600, - 243993600, - 260323200, - 276048000, - 291772800, - 307497600, - 323827200, - 338947200, - 354672000, - 370396800, - 386121600, - 401846400, - 417571200, - 433296000, - 449020800, - 465350400, - 481075200, - 496800000, - 512524800, - 528249600, - 543974400, - 559699200, - 567990000, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 5040 - }, - { - "index": 4, - "is_dst": false, - "offset": 5040 - }, - { - "index": 8, - "is_dst": false, - "offset": 3600 - }, - { - "index": 12, - "is_dst": true, - "offset": 7200 - }, - { - "index": 17, - "is_dst": false, - "offset": 7200 - }, - { - "index": 21, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3a5a827f28d118e9-ce1a66b62f86f6b6.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3a5a827f28d118e9-ce1a66b62f86f6b6.json deleted file mode 100644 index 580e0ada4..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3a5a827f28d118e9-ce1a66b62f86f6b6.json +++ /dev/null @@ -1,455 +0,0 @@ -{ - "ids": [ - "america/chicago", - "cst6cdt", - "us/central" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "C", - "W", - "T", - "\u0000", - "C", - "P", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": { - "abbr": "CDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 4, - 5, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2717647200, - -1633276800, - -1615136400, - -1601827200, - -1583686800, - -1563724800, - -1551632400, - -1538928000, - -1520182800, - -1504454400, - -1491757200, - -1473004800, - -1459702800, - -1441555200, - -1428253200, - -1410105600, - -1396803600, - -1378656000, - -1365354000, - -1347206400, - -1333904400, - -1315152000, - -1301850000, - -1283702400, - -1270400400, - -1252252800, - -1238950800, - -1220803200, - -1207501200, - -1189353600, - -1176051600, - -1157299200, - -1144602000, - -1125849600, - -1112547600, - -1094400000, - -1081098000, - -1067788800, - -1045414800, - -1031500800, - -1018198800, - -1000051200, - -986749200, - -967996800, - -955299600, - -936547200, - -923245200, - -905097600, - -891795600, - -880214400, - -769395600, - -765392400, - -747244800, - -733942800, - -715795200, - -702493200, - -684345600, - -671043600, - -652896000, - -639594000, - -620841600, - -608144400, - -589392000, - -576090000, - -557942400, - -544640400, - -526492800, - -513190800, - -495043200, - -481741200, - -463593600, - -447267600, - -431539200, - -415818000, - -400089600, - -384368400, - -368640000, - -352918800, - -337190400, - -321469200, - -305740800, - -289414800, - -273686400, - -257965200, - -242236800, - -226515600, - -210787200, - -195066000, - -179337600, - -163616400, - -147888000, - -131562000, - -116438400, - -100112400, - -84384000, - -68662800, - -52934400, - -37213200, - -21484800, - -5763600, - 9964800, - 25686000, - 41414400, - 57740400, - 73468800, - 89190000, - 104918400, - 120639600, - 126691200, - 152089200, - 162374400, - 183538800, - 199267200, - 215593200, - 230716800, - 247042800, - 262771200, - 278492400, - 294220800, - 309942000, - 325670400, - 341391600, - 357120000, - 372841200, - 388569600, - 404895600, - 420019200, - 436345200, - 452073600, - 467794800, - 483523200, - 499244400, - 514972800, - 530694000, - 544608000, - 562143600, - 576057600, - 594198000, - 607507200, - 625647600, - 638956800, - 657097200, - 671011200, - 688546800, - 702460800, - 719996400, - 733910400, - 752050800, - 765360000, - 783500400, - 796809600, - 814950000, - 828864000, - 846399600, - 860313600, - 877849200, - 891763200, - 909298800, - 923212800, - 941353200, - 954662400, - 972802800, - 986112000, - 1004252400, - 1018166400, - 1035702000, - 1049616000, - 1067151600, - 1081065600, - 1099206000, - 1112515200, - 1130655600, - 1143964800, - 1162105200, - 1173600000, - 1194159600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -21036 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": false, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - }, - { - "index": 20, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3a6fecb09c143b25-69e62db706dcf368.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3a6fecb09c143b25-69e62db706dcf368.json deleted file mode 100644 index cc3bf0a9e..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3a6fecb09c143b25-69e62db706dcf368.json +++ /dev/null @@ -1,274 +0,0 @@ -{ - "ids": [ - "america/edmonton", - "america/yellowknife", - "canada/mountain" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "M", - "W", - "T", - "\u0000", - "M", - "P", - "T", - "\u0000" - ], - "posix": { - "abbr": "MST", - "offset": -25200, - "transition": { - "abbr": "MDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1998663968, - -1632063600, - -1615132800, - -1600614000, - -1596816000, - -1567954800, - -1551628800, - -1536505200, - -1523203200, - -1504450800, - -1491753600, - -1473001200, - -1459699200, - -880210800, - -769395600, - -765388800, - -715791600, - -702489600, - 73472400, - 89193600, - 104922000, - 120643200, - 136371600, - 152092800, - 167821200, - 183542400, - 199270800, - 215596800, - 230720400, - 247046400, - 262774800, - 278496000, - 294224400, - 309945600, - 325674000, - 341395200, - 357123600, - 372844800, - 388573200, - 404899200, - 420022800, - 436348800, - 452077200, - 467798400, - 483526800, - 499248000, - 514976400, - 530697600, - 536482800, - 562147200, - 576061200, - 594201600, - 607510800, - 625651200, - 638960400, - 657100800, - 671014800, - 688550400, - 702464400, - 720000000, - 733914000, - 752054400, - 765363600, - 783504000, - 796813200, - 814953600, - 828867600, - 846403200, - 860317200, - 877852800, - 891766800, - 909302400, - 923216400, - 941356800, - 954666000, - 972806400, - 986115600, - 1004256000, - 1018170000, - 1035705600, - 1049619600, - 1067155200, - 1081069200, - 1099209600, - 1112518800, - 1130659200, - 1143968400, - 1162108800, - 1173603600, - 1194163200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -27232 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": true, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3c8506b1fc96536c-ce036c9ae71dded0.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3c8506b1fc96536c-ce036c9ae71dded0.json deleted file mode 100644 index 1b17d9b67..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3c8506b1fc96536c-ce036c9ae71dded0.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt+1" - ], - "tzif": { - "designations": [ - "-", - "0", - "1", - "\u0000" - ], - "posix": { - "abbr": "-01", - "offset": -3600, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3cc59865618b9844-7dd7f8118a4e046e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3cc59865618b9844-7dd7f8118a4e046e.json deleted file mode 100644 index ce9c54bf5..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3cc59865618b9844-7dd7f8118a4e046e.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt-5" - ], - "tzif": { - "designations": [ - "+", - "0", - "5", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3cc8439b3e85f059-ae8266620634840.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3cc8439b3e85f059-ae8266620634840.json deleted file mode 100644 index 0c462b9bc..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3cc8439b3e85f059-ae8266620634840.json +++ /dev/null @@ -1,273 +0,0 @@ -{ - "ids": [ - "america/cambridge_bay" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000", - "M", - "S", - "T", - "\u0000", - "M", - "W", - "T", - "\u0000", - "M", - "P", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "MST", - "offset": -25200, - "transition": { - "abbr": "MDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 5, - 6, - 7, - 5, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1 - ], - "transitions": [ - -1577923200, - -880210800, - -769395600, - -765388800, - 73472400, - 89193600, - 104922000, - 120643200, - 136371600, - 152092800, - 167821200, - 183542400, - 199270800, - 215596800, - 230720400, - 247046400, - 262774800, - 278496000, - 294224400, - 309945600, - 325674000, - 341395200, - 357123600, - 372844800, - 388573200, - 404899200, - 420022800, - 436348800, - 452077200, - 467798400, - 483526800, - 499248000, - 514976400, - 530697600, - 544611600, - 562147200, - 576061200, - 594201600, - 607510800, - 625651200, - 638960400, - 657100800, - 671014800, - 688550400, - 702464400, - 720000000, - 733914000, - 752054400, - 765363600, - 783504000, - 796813200, - 814953600, - 828867600, - 846403200, - 860317200, - 877852800, - 891766800, - 909302400, - 923216400, - 941356800, - 954662400, - 972802800, - 973400400, - 986115600, - 1004256000, - 1018170000, - 1035705600, - 1049619600, - 1067155200, - 1081069200, - 1099209600, - 1112518800, - 1130659200, - 1143968400, - 1162108800, - 1173603600, - 1194163200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": true, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -21600 - }, - { - "index": 20, - "is_dst": false, - "offset": -21600 - }, - { - "index": 24, - "is_dst": true, - "offset": -18000 - }, - { - "index": 28, - "is_dst": false, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3d390ef79718594a-824dbf7dde31521a.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3d390ef79718594a-824dbf7dde31521a.json deleted file mode 100644 index 48d32d72e..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3d390ef79718594a-824dbf7dde31521a.json +++ /dev/null @@ -1,170 +0,0 @@ -{ - "ids": [ - "america/merida" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1 - ], - "transitions": [ - -1514743200, - 378201600, - 405068400, - 828864000, - 846399600, - 860313600, - 877849200, - 891763200, - 909298800, - 923212800, - 941353200, - 954662400, - 972802800, - 989136000, - 1001833200, - 1018166400, - 1035702000, - 1049616000, - 1067151600, - 1081065600, - 1099206000, - 1112515200, - 1130655600, - 1143964800, - 1162105200, - 1175414400, - 1193554800, - 1207468800, - 1225004400, - 1238918400, - 1256454000, - 1270368000, - 1288508400, - 1301817600, - 1319958000, - 1333267200, - 1351407600, - 1365321600, - 1382857200, - 1396771200, - 1414306800, - 1428220800, - 1445756400, - 1459670400, - 1477810800, - 1491120000, - 1509260400, - 1522569600, - 1540710000, - 1554624000, - 1572159600, - 1586073600, - 1603609200, - 1617523200, - 1635663600, - 1648972800, - 1667113200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -21508 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": false, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3d5473248adfd22d-1b9cabbb6c6a4b3f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3d5473248adfd22d-1b9cabbb6c6a4b3f.json deleted file mode 100644 index 0369c245c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3d5473248adfd22d-1b9cabbb6c6a4b3f.json +++ /dev/null @@ -1,120 +0,0 @@ -{ - "ids": [ - "america/swift_current" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "M", - "W", - "T", - "\u0000", - "M", - "P", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 5 - ], - "transitions": [ - -2030201320, - -1632063600, - -1615132800, - -880210800, - -769395600, - -765388800, - -747241200, - -732729600, - -715791600, - -702489600, - -684342000, - -671040000, - -652892400, - -639590400, - -400086000, - -384364800, - -337186800, - -321465600, - -305737200, - -292435200, - -273682800, - -260985600, - 73472400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -25880 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": true, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -21600 - }, - { - "index": 20, - "is_dst": false, - "offset": -21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3f61f7ebb7b0f5d7-49e94e6f39502420.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3f61f7ebb7b0f5d7-49e94e6f39502420.json deleted file mode 100644 index e79ffbf22..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3f61f7ebb7b0f5d7-49e94e6f39502420.json +++ /dev/null @@ -1,597 +0,0 @@ -{ - "ids": [ - "asia/gaza" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000", - "I", - "S", - "T", - "\u0000", - "I", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 4, - 4 - ] - }, - "time": 180000 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 4, - 4 - ] - }, - "time": 180000 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2185409872, - -933638400, - -923097600, - -919036800, - -857347200, - -844300800, - -825811200, - -812678400, - -794188800, - -779846400, - -762652800, - -748310400, - -731116800, - -399088800, - -386650800, - -368330400, - -355114800, - -336790800, - -323654400, - -305168400, - -292032000, - -273632400, - -260496000, - -242096400, - -228960000, - -210560400, - -197424000, - -178938000, - -165801600, - -147402000, - -134265600, - -115866000, - -102643200, - -84330000, - -81313200, - 142380000, - 150843600, - 167176800, - 178664400, - 334101600, - 337730400, - 452642400, - 462319200, - 482277600, - 494370000, - 516751200, - 526424400, - 545436000, - 558478800, - 576626400, - 589323600, - 609890400, - 620773200, - 638316000, - 651618000, - 669765600, - 683672400, - 701820000, - 715726800, - 733701600, - 747176400, - 765151200, - 778021200, - 796600800, - 810075600, - 820447200, - 828655200, - 843170400, - 860104800, - 874620000, - 891554400, - 906069600, - 924213600, - 939934800, - 956268000, - 971989200, - 987717600, - 1003438800, - 1019167200, - 1034888400, - 1050616800, - 1066338000, - 1082066400, - 1096581600, - 1113516000, - 1128380400, - 1143842400, - 1158872400, - 1175378400, - 1189638000, - 1206655200, - 1219957200, - 1238104800, - 1252015200, - 1269640860, - 1281474000, - 1301608860, - 1312146000, - 1333058400, - 1348178400, - 1364508000, - 1380229200, - 1395957600, - 1414098000, - 1427493600, - 1445551200, - 1458946800, - 1477692000, - 1490396400, - 1509141600, - 1521846000, - 1540591200, - 1553810400, - 1572037200, - 1585346400, - 1603490400, - 1616796000, - 1635458400, - 1648332000, - 1666998000, - 1682726400, - 1698447600, - 1713571200, - 1729897200, - 1744416000, - 1761346800, - 1774656000, - 1792796400, - 1806105600, - 1824850800, - 1837555200, - 1856300400, - 1869004800, - 1887750000, - 1901059200, - 1919199600, - 1932508800, - 1950649200, - 1963958400, - 1982703600, - 1995408000, - 2014153200, - 2026857600, - 2045602800, - 2058307200, - 2077052400, - 2090361600, - 2107897200, - 2121811200, - 2138742000, - 2153260800, - 2168982000, - 2184710400, - 2199826800, - 2216160000, - 2230066800, - 2234304000, - 2234905200, - 2248214400, - 2260911600, - 2264544000, - 2266354800, - 2279664000, - 2291756400, - 2295388800, - 2297804400, - 2311113600, - 2321996400, - 2326233600, - 2329254000, - 2342563200, - 2352841200, - 2356473600, - 2361308400, - 2374012800, - 2383686000, - 2387318400, - 2392758000, - 2405462400, - 2413926000, - 2418163200, - 2424207600, - 2437516800, - 2444770800, - 2448403200, - 2455657200, - 2468966400, - 2475010800, - 2479248000, - 2487106800, - 2500416000, - 2505855600, - 2509488000, - 2519161200, - 2531865600, - 2536700400, - 2540332800, - 2550610800, - 2563315200, - 2566940400, - 2571177600, - 2582060400, - 2595369600, - 2597785200, - 2601417600, - 2613510000, - 2626819200, - 2628025200, - 2632262400, - 2644959600, - 2658268800, - 2658870000, - 2663107200, - 2676409200, - 2693347200, - 2708463600, - 2724192000, - 2739913200, - 2754432000, - 2771362800, - 2785276800, - 2802812400, - 2816121600, - 2834262000, - 2847571200, - 2866316400, - 2879020800, - 2897766000, - 2910470400, - 2929215600, - 2941920000, - 2960665200, - 2973974400, - 2992114800, - 3005424000, - 3023564400, - 3036873600, - 3055618800, - 3068323200, - 3087068400, - 3099772800, - 3117913200, - 3131827200, - 3148758000, - 3163276800, - 3179602800, - 3194726400, - 3209842800, - 3226176000, - 3240687600, - 3244320000, - 3244921200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 8272 - }, - { - "index": 4, - "is_dst": false, - "offset": 7200 - }, - { - "index": 8, - "is_dst": true, - "offset": 10800 - }, - { - "index": 13, - "is_dst": false, - "offset": 7200 - }, - { - "index": 17, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3f6ff680ea89333b-92b04efb5fd8415a.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3f6ff680ea89333b-92b04efb5fd8415a.json deleted file mode 100644 index a9f7f72e9..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3f6ff680ea89333b-92b04efb5fd8415a.json +++ /dev/null @@ -1,208 +0,0 @@ -{ - "ids": [ - "asia/yakutsk" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "8", - "\u0000", - "+", - "0", - "9", - "\u0000", - "+", - "1", - "0", - "\u0000" - ], - "posix": { - "abbr": "+09", - "offset": 32400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 6, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 7, - 2 - ], - "transitions": [ - -1579423138, - -1247558400, - 354898800, - 370706400, - 386434800, - 402242400, - 417970800, - 433778400, - 449593200, - 465325200, - 481050000, - 496774800, - 512499600, - 528224400, - 543949200, - 559674000, - 575398800, - 591123600, - 606848400, - 622573200, - 638298000, - 654627600, - 670352400, - 670356000, - 686080800, - 695757600, - 701802000, - 717526800, - 733251600, - 748976400, - 764701200, - 780426000, - 796150800, - 811875600, - 828205200, - 846349200, - 859654800, - 877798800, - 891104400, - 909248400, - 922554000, - 941302800, - 954003600, - 972752400, - 985453200, - 1004202000, - 1017507600, - 1035651600, - 1048957200, - 1067101200, - 1080406800, - 1099155600, - 1111856400, - 1130605200, - 1143306000, - 1162054800, - 1174755600, - 1193504400, - 1206810000, - 1224954000, - 1238259600, - 1256403600, - 1269709200, - 1288458000, - 1301158800, - 1414252800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 31138 - }, - { - "index": 4, - "is_dst": false, - "offset": 28800 - }, - { - "index": 8, - "is_dst": false, - "offset": 32400 - }, - { - "index": 12, - "is_dst": true, - "offset": 36000 - }, - { - "index": 4, - "is_dst": true, - "offset": 32400 - }, - { - "index": 8, - "is_dst": true, - "offset": 32400 - }, - { - "index": 8, - "is_dst": true, - "offset": 36000 - }, - { - "index": 12, - "is_dst": false, - "offset": 36000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3fc16258c94fd1bd-ada83e71d02884df.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3fc16258c94fd1bd-ada83e71d02884df.json deleted file mode 100644 index ce83c4869..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3fc16258c94fd1bd-ada83e71d02884df.json +++ /dev/null @@ -1,366 +0,0 @@ -{ - "ids": [ - "america/ensenada", - "america/santa_isabel", - "america/tijuana", - "mexico/bajanorte" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "P", - "S", - "T", - "\u0000", - "P", - "D", - "T", - "\u0000", - "P", - "W", - "T", - "\u0000", - "P", - "P", - "T", - "\u0000" - ], - "posix": { - "abbr": "PST", - "offset": -28800, - "transition": { - "abbr": "PDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 3, - 2, - 4, - 5, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -1514739600, - -1451667600, - -1343145600, - -1234803600, - -1222963200, - -1207242000, - -873820800, - -769395600, - -761418000, - -686073600, - -661539600, - -620755200, - -608144400, - -589384800, - -576082800, - -557935200, - -544633200, - -526489200, - -513183600, - -495039600, - -481734000, - -463590000, - -450284400, - -431535600, - -418230000, - -400086000, - -386780400, - -368636400, - -355330800, - -337186800, - -323881200, - -305737200, - -292431600, - -273682800, - -260982000, - -242233200, - -226508400, - -210783600, - -195058800, - -179334000, - -163609200, - -147884400, - -131554800, - -116434800, - -100105200, - -84376800, - -68655600, - -52927200, - -37206000, - -21477600, - -5756400, - 9972000, - 25693200, - 41421600, - 57747600, - 73476000, - 89197200, - 104925600, - 120646800, - 126698400, - 152096400, - 162381600, - 183546000, - 199274400, - 215600400, - 230724000, - 247050000, - 262778400, - 278499600, - 294228000, - 309949200, - 325677600, - 341398800, - 357127200, - 372848400, - 388576800, - 404902800, - 420026400, - 436352400, - 452080800, - 467802000, - 483530400, - 499251600, - 514980000, - 530701200, - 544615200, - 562150800, - 576064800, - 594205200, - 607514400, - 625654800, - 638964000, - 657104400, - 671018400, - 688554000, - 702468000, - 720003600, - 733917600, - 752058000, - 765367200, - 783507600, - 796816800, - 814957200, - 828871200, - 846406800, - 860320800, - 877856400, - 891770400, - 909306000, - 923220000, - 941360400, - 954669600, - 972810000, - 986119200, - 1004259600, - 1018173600, - 1035709200, - 1049623200, - 1067158800, - 1081072800, - 1099213200, - 1112522400, - 1130662800, - 1143972000, - 1162112400, - 1175421600, - 1193562000, - 1207476000, - 1225011600, - 1238925600, - 1256461200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -28084 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": false, - "offset": -28800 - }, - { - "index": 12, - "is_dst": true, - "offset": -25200 - }, - { - "index": 16, - "is_dst": true, - "offset": -25200 - }, - { - "index": 20, - "is_dst": true, - "offset": -25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-3fd85b535272f921-289341425431e5ac.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-3fd85b535272f921-289341425431e5ac.json deleted file mode 100644 index c8d90ad15..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-3fd85b535272f921-289341425431e5ac.json +++ /dev/null @@ -1,208 +0,0 @@ -{ - "ids": [ - "asia/vladivostok" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "9", - "\u0000", - "+", - "1", - "0", - "\u0000", - "+", - "1", - "1", - "\u0000" - ], - "posix": { - "abbr": "+10", - "offset": 36000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 6, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 7, - 2 - ], - "transitions": [ - -1487321251, - -1247562000, - 354895200, - 370702800, - 386431200, - 402238800, - 417967200, - 433774800, - 449589600, - 465321600, - 481046400, - 496771200, - 512496000, - 528220800, - 543945600, - 559670400, - 575395200, - 591120000, - 606844800, - 622569600, - 638294400, - 654624000, - 670348800, - 670352400, - 686077200, - 695754000, - 701798400, - 717523200, - 733248000, - 748972800, - 764697600, - 780422400, - 796147200, - 811872000, - 828201600, - 846345600, - 859651200, - 877795200, - 891100800, - 909244800, - 922550400, - 941299200, - 954000000, - 972748800, - 985449600, - 1004198400, - 1017504000, - 1035648000, - 1048953600, - 1067097600, - 1080403200, - 1099152000, - 1111852800, - 1130601600, - 1143302400, - 1162051200, - 1174752000, - 1193500800, - 1206806400, - 1224950400, - 1238256000, - 1256400000, - 1269705600, - 1288454400, - 1301155200, - 1414249200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 31651 - }, - { - "index": 4, - "is_dst": false, - "offset": 32400 - }, - { - "index": 8, - "is_dst": false, - "offset": 36000 - }, - { - "index": 12, - "is_dst": true, - "offset": 39600 - }, - { - "index": 4, - "is_dst": true, - "offset": 36000 - }, - { - "index": 8, - "is_dst": true, - "offset": 36000 - }, - { - "index": 8, - "is_dst": true, - "offset": 39600 - }, - { - "index": 12, - "is_dst": false, - "offset": 39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-401f78ac94f3eb66-10a91d067a038f6.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-401f78ac94f3eb66-10a91d067a038f6.json deleted file mode 100644 index 14c599f17..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-401f78ac94f3eb66-10a91d067a038f6.json +++ /dev/null @@ -1,245 +0,0 @@ -{ - "ids": [ - "australia/melbourne", - "australia/victoria" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "E", - "S", - "T", - "\u0000", - "A", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AEST", - "offset": 36000, - "transition": { - "abbr": "AEDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 4, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 1, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2 - ], - "transitions": [ - -2364111592, - -1672560000, - -1665388800, - -883641600, - -876124800, - -860400000, - -844675200, - -828345600, - -813225600, - 57686400, - 67968000, - 89136000, - 100022400, - 120585600, - 131472000, - 152035200, - 162921600, - 183484800, - 194976000, - 215539200, - 226425600, - 246988800, - 257875200, - 278438400, - 289324800, - 309888000, - 320774400, - 341337600, - 352224000, - 372787200, - 384278400, - 404841600, - 415728000, - 436291200, - 447177600, - 467740800, - 478627200, - 499190400, - 511286400, - 530035200, - 542736000, - 561484800, - 574790400, - 594144000, - 606240000, - 625593600, - 637689600, - 657043200, - 667929600, - 688492800, - 699379200, - 719942400, - 731433600, - 751996800, - 762883200, - 783446400, - 796147200, - 814896000, - 828201600, - 846345600, - 859651200, - 877795200, - 891100800, - 909244800, - 922550400, - 941299200, - 954000000, - 967305600, - 985449600, - 1004198400, - 1017504000, - 1035648000, - 1048953600, - 1067097600, - 1080403200, - 1099152000, - 1111852800, - 1130601600, - 1143907200, - 1162051200, - 1174752000, - 1193500800, - 1207411200, - 1223136000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 34792 - }, - { - "index": 4, - "is_dst": false, - "offset": 36000 - }, - { - "index": 9, - "is_dst": true, - "offset": 39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-405b02408f1a7725-e49e74db6c602dd7.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-405b02408f1a7725-e49e74db6c602dd7.json deleted file mode 100644 index 77ef18816..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-405b02408f1a7725-e49e74db6c602dd7.json +++ /dev/null @@ -1,89 +0,0 @@ -{ - "ids": [ - "asia/manila" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "S", - "T", - "\u0000", - "P", - "D", - "T", - "\u0000", - "J", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "PST", - "offset": 28800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 4, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -3944621032, - -2219083200, - -1046678400, - -1040115600, - -885024000, - -880016400, - -783594000, - -760093200, - -496224000, - -491562000, - 228326400, - 243702000, - 643219200, - 649177200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -57368 - }, - { - "index": 0, - "is_dst": false, - "offset": 29032 - }, - { - "index": 4, - "is_dst": false, - "offset": 28800 - }, - { - "index": 8, - "is_dst": true, - "offset": 32400 - }, - { - "index": 12, - "is_dst": false, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-40fb52b19ef81b1d-e605f3c58f3339e9.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-40fb52b19ef81b1d-e605f3c58f3339e9.json deleted file mode 100644 index 56ce7a731..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-40fb52b19ef81b1d-e605f3c58f3339e9.json +++ /dev/null @@ -1,179 +0,0 @@ -{ - "ids": [ - "america/mazatlan", - "mexico/bajasur" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "MST", - "offset": -25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 2, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1 - ], - "transitions": [ - -1514739600, - -1343149200, - -1234807200, - -1220461200, - -1207159200, - -1191344400, - -873828000, - 828867600, - 846403200, - 860317200, - 877852800, - 891766800, - 909302400, - 923216400, - 941356800, - 954666000, - 972806400, - 989139600, - 1001836800, - 1018170000, - 1035705600, - 1049619600, - 1067155200, - 1081069200, - 1099209600, - 1112518800, - 1130659200, - 1143968400, - 1162108800, - 1175418000, - 1193558400, - 1207472400, - 1225008000, - 1238922000, - 1256457600, - 1270371600, - 1288512000, - 1301821200, - 1319961600, - 1333270800, - 1351411200, - 1365325200, - 1382860800, - 1396774800, - 1414310400, - 1428224400, - 1445760000, - 1459674000, - 1477814400, - 1491123600, - 1509264000, - 1522573200, - 1540713600, - 1554627600, - 1572163200, - 1586077200, - 1603612800, - 1617526800, - 1635667200, - 1648976400, - 1667116800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -25540 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": false, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-42518274487a5d74-f93177324e5a0553.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-42518274487a5d74-f93177324e5a0553.json deleted file mode 100644 index 83f518ccf..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-42518274487a5d74-f93177324e5a0553.json +++ /dev/null @@ -1,36 +0,0 @@ -{ - "ids": [ - "etc/gmt", - "etc/gmt+0", - "etc/gmt-0", - "etc/gmt0", - "etc/greenwich", - "gmt", - "gmt+0", - "gmt-0", - "gmt0", - "greenwich" - ], - "tzif": { - "designations": [ - "G", - "M", - "T", - "\u0000" - ], - "posix": { - "abbr": "GMT", - "offset": 0, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-425a92f6316d948f-4f954c3bee3a5359.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-425a92f6316d948f-4f954c3bee3a5359.json deleted file mode 100644 index 6859150f4..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-425a92f6316d948f-4f954c3bee3a5359.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "ids": [ - "america/el_salvador" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1546279392, - 547020000, - 559717200, - 578469600, - 591166800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -21408 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-43c01a519dcad360-966c5ee1f11e2b48.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-43c01a519dcad360-966c5ee1f11e2b48.json deleted file mode 100644 index be33b98d8..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-43c01a519dcad360-966c5ee1f11e2b48.json +++ /dev/null @@ -1,353 +0,0 @@ -{ - "ids": [ - "america/vancouver", - "canada/pacific" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "S", - "T", - "\u0000", - "P", - "D", - "T", - "\u0000", - "P", - "W", - "T", - "\u0000", - "P", - "P", - "T", - "\u0000" - ], - "posix": { - "abbr": "PST", - "offset": -28800, - "transition": { - "abbr": "PDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2713880852, - -1632060000, - -1615129200, - -880207200, - -769395600, - -765385200, - -747237600, - -733935600, - -715788000, - -702486000, - -684338400, - -671036400, - -652888800, - -639586800, - -620834400, - -608137200, - -589384800, - -576082800, - -557935200, - -544633200, - -526485600, - -513183600, - -495036000, - -481734000, - -463586400, - -450284400, - -431532000, - -418230000, - -400082400, - -386780400, - -368632800, - -355330800, - -337183200, - -323881200, - -305733600, - -292431600, - -273679200, - -260982000, - -242229600, - -226508400, - -210780000, - -195058800, - -179330400, - -163609200, - -147880800, - -131554800, - -116431200, - -100105200, - -84376800, - -68655600, - -52927200, - -37206000, - -21477600, - -5756400, - 9972000, - 25693200, - 41421600, - 57747600, - 73476000, - 89197200, - 104925600, - 120646800, - 136375200, - 152096400, - 167824800, - 183546000, - 199274400, - 215600400, - 230724000, - 247050000, - 262778400, - 278499600, - 294228000, - 309949200, - 325677600, - 341398800, - 357127200, - 372848400, - 388576800, - 404902800, - 420026400, - 436352400, - 452080800, - 467802000, - 483530400, - 499251600, - 514980000, - 530701200, - 536486400, - 562150800, - 576064800, - 594205200, - 607514400, - 625654800, - 638964000, - 657104400, - 671018400, - 688554000, - 702468000, - 720003600, - 733917600, - 752058000, - 765367200, - 783507600, - 796816800, - 814957200, - 828871200, - 846406800, - 860320800, - 877856400, - 891770400, - 909306000, - 923220000, - 941360400, - 954669600, - 972810000, - 986119200, - 1004259600, - 1018173600, - 1035709200, - 1049623200, - 1067158800, - 1081072800, - 1099213200, - 1112522400, - 1130662800, - 1143972000, - 1162112400, - 1173607200, - 1194166800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -29548 - }, - { - "index": 4, - "is_dst": false, - "offset": -28800 - }, - { - "index": 8, - "is_dst": true, - "offset": -25200 - }, - { - "index": 12, - "is_dst": true, - "offset": -25200 - }, - { - "index": 16, - "is_dst": true, - "offset": -25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-44b31bf3438167a2-b455583aa9f30974.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-44b31bf3438167a2-b455583aa9f30974.json deleted file mode 100644 index ff51760c9..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-44b31bf3438167a2-b455583aa9f30974.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "ids": [ - "australia/brisbane", - "australia/queensland" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "E", - "S", - "T", - "\u0000", - "A", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AEST", - "offset": 36000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2366791928, - -1672560000, - -1665388800, - -883641600, - -876124800, - -860400000, - -844675200, - -828345600, - -813225600, - 57686400, - 67968000, - 625593600, - 636480000, - 657043200, - 667929600, - 688492800, - 699379200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 36728 - }, - { - "index": 4, - "is_dst": false, - "offset": 36000 - }, - { - "index": 9, - "is_dst": true, - "offset": 39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-4529e4629acf0366-8a98a4f342fcdd5c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-4529e4629acf0366-8a98a4f342fcdd5c.json deleted file mode 100644 index e54778c33..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-4529e4629acf0366-8a98a4f342fcdd5c.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "ids": [ - "america/caracas" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "3", - "0", - "\u0000", - "-", - "0", - "4", - "\u0000" - ], - "posix": { - "abbr": "-04", - "offset": -14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3 - ], - "transitions": [ - -2524505536, - -1826739140, - -157750200, - 1197183600, - 1462086000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -16064 - }, - { - "index": 4, - "is_dst": false, - "offset": -16060 - }, - { - "index": 8, - "is_dst": false, - "offset": -16200 - }, - { - "index": 14, - "is_dst": false, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-46dd3b15bf889536-f43b98b1f4ca439c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-46dd3b15bf889536-f43b98b1f4ca439c.json deleted file mode 100644 index 3f820a19f..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-46dd3b15bf889536-f43b98b1f4ca439c.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "ids": [ - "america/menominee" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "C", - "W", - "T", - "\u0000", - "C", - "P", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": { - "abbr": "CDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 5, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2659759773, - -1633276800, - -1615136400, - -1601827200, - -1583686800, - -880214400, - -769395600, - -765392400, - -747244800, - -733942800, - -116438400, - -100112400, - -21484800, - 104914800, - 104918400, - 120639600, - 126691200, - 152089200, - 162374400, - 183538800, - 199267200, - 215593200, - 230716800, - 247042800, - 262771200, - 278492400, - 294220800, - 309942000, - 325670400, - 341391600, - 357120000, - 372841200, - 388569600, - 404895600, - 420019200, - 436345200, - 452073600, - 467794800, - 483523200, - 499244400, - 514972800, - 530694000, - 544608000, - 562143600, - 576057600, - 594198000, - 607507200, - 625647600, - 638956800, - 657097200, - 671011200, - 688546800, - 702460800, - 719996400, - 733910400, - 752050800, - 765360000, - 783500400, - 796809600, - 814950000, - 828864000, - 846399600, - 860313600, - 877849200, - 891763200, - 909298800, - 923212800, - 941353200, - 954662400, - 972802800, - 986112000, - 1004252400, - 1018166400, - 1035702000, - 1049616000, - 1067151600, - 1081065600, - 1099206000, - 1112515200, - 1130655600, - 1143964800, - 1162105200, - 1173600000, - 1194159600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -21027 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - }, - { - "index": 20, - "is_dst": false, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-4738bf3d72913a1b-bb663c1af2098c8f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-4738bf3d72913a1b-bb663c1af2098c8f.json deleted file mode 100644 index 444edc5bd..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-4738bf3d72913a1b-bb663c1af2098c8f.json +++ /dev/null @@ -1,180 +0,0 @@ -{ - "ids": [ - "asia/tbilisi" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "T", - "B", - "M", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000" - ], - "posix": { - "abbr": "+04", - "offset": 14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 5, - 6, - 2, - 6, - 2, - 6, - 2, - 6, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 6, - 2, - 3 - ], - "transitions": [ - -2840151551, - -1441162751, - -405140400, - 354916800, - 370724400, - 386452800, - 402260400, - 417988800, - 433796400, - 449611200, - 465343200, - 481068000, - 496792800, - 512517600, - 528242400, - 543967200, - 559692000, - 575416800, - 591141600, - 606866400, - 622591200, - 638316000, - 654645600, - 670370400, - 670374000, - 686098800, - 701816400, - 717537600, - 733266000, - 748987200, - 764715600, - 780436800, - 796161600, - 811882800, - 828216000, - 877806000, - 891115200, - 909255600, - 922564800, - 941310000, - 954014400, - 972759600, - 985464000, - 1004209200, - 1017518400, - 1035658800, - 1048968000, - 1067108400, - 1080417600, - 1088276400, - 1099177200, - 1111878000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 10751 - }, - { - "index": 4, - "is_dst": false, - "offset": 10751 - }, - { - "index": 9, - "is_dst": false, - "offset": 10800 - }, - { - "index": 13, - "is_dst": false, - "offset": 14400 - }, - { - "index": 17, - "is_dst": true, - "offset": 18000 - }, - { - "index": 9, - "is_dst": true, - "offset": 14400 - }, - { - "index": 13, - "is_dst": true, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-480b0a55dd7bf29e-6157240ddb0d1a76.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-480b0a55dd7bf29e-6157240ddb0d1a76.json deleted file mode 100644 index 65af4a265..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-480b0a55dd7bf29e-6157240ddb0d1a76.json +++ /dev/null @@ -1,305 +0,0 @@ -{ - "ids": [ - "america/nome" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "N", - "S", - "T", - "\u0000", - "N", - "W", - "T", - "\u0000", - "N", - "P", - "T", - "\u0000", - "B", - "S", - "T", - "\u0000", - "B", - "D", - "T", - "\u0000", - "Y", - "S", - "T", - "\u0000", - "A", - "K", - "S", - "T", - "\u0000", - "A", - "K", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AKST", - "offset": -32400, - "transition": { - "abbr": "AKDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 7, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8 - ], - "transitions": [ - -3225223727, - -2188947502, - -880196400, - -769395600, - -765374400, - -86878800, - -21466800, - -5745600, - 9982800, - 25704000, - 41432400, - 57758400, - 73486800, - 89208000, - 104936400, - 120657600, - 126709200, - 152107200, - 162392400, - 183556800, - 199285200, - 215611200, - 230734800, - 247060800, - 262789200, - 278510400, - 294238800, - 309960000, - 325688400, - 341409600, - 357138000, - 372859200, - 388587600, - 404913600, - 420037200, - 436363200, - 439030800, - 452084400, - 467805600, - 483534000, - 499255200, - 514983600, - 530704800, - 544618800, - 562154400, - 576068400, - 594208800, - 607518000, - 625658400, - 638967600, - 657108000, - 671022000, - 688557600, - 702471600, - 720007200, - 733921200, - 752061600, - 765370800, - 783511200, - 796820400, - 814960800, - 828874800, - 846410400, - 860324400, - 877860000, - 891774000, - 909309600, - 923223600, - 941364000, - 954673200, - 972813600, - 986122800, - 1004263200, - 1018177200, - 1035712800, - 1049626800, - 1067162400, - 1081076400, - 1099216800, - 1112526000, - 1130666400, - 1143975600, - 1162116000, - 1173610800, - 1194170400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 46702 - }, - { - "index": 0, - "is_dst": false, - "offset": -39698 - }, - { - "index": 4, - "is_dst": false, - "offset": -39600 - }, - { - "index": 8, - "is_dst": true, - "offset": -36000 - }, - { - "index": 12, - "is_dst": true, - "offset": -36000 - }, - { - "index": 16, - "is_dst": false, - "offset": -39600 - }, - { - "index": 20, - "is_dst": true, - "offset": -36000 - }, - { - "index": 24, - "is_dst": false, - "offset": -32400 - }, - { - "index": 28, - "is_dst": false, - "offset": -32400 - }, - { - "index": 33, - "is_dst": true, - "offset": -28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-486e9282debc62a3-46e6f605f156885a.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-486e9282debc62a3-46e6f605f156885a.json deleted file mode 100644 index 5031055e2..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-486e9282debc62a3-46e6f605f156885a.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "ids": [ - "africa/addis_ababa", - "africa/asmara", - "africa/asmera", - "africa/dar_es_salaam", - "africa/djibouti", - "africa/kampala", - "africa/mogadishu", - "africa/nairobi", - "indian/antananarivo", - "indian/comoro", - "indian/mayotte" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "2", - "3", - "0", - "\u0000", - "E", - "A", - "T", - "\u0000", - "+", - "0", - "2", - "4", - "5", - "\u0000" - ], - "posix": { - "abbr": "EAT", - "offset": 10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 2 - ], - "transitions": [ - -1946168836, - -1309746600, - -1261969200, - -1041388200, - -865305900 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 8836 - }, - { - "index": 4, - "is_dst": false, - "offset": 9000 - }, - { - "index": 10, - "is_dst": false, - "offset": 10800 - }, - { - "index": 14, - "is_dst": false, - "offset": 9900 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-4891d41993ed3f5f-d46a2a9dfaea5f49.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-4891d41993ed3f5f-d46a2a9dfaea5f49.json deleted file mode 100644 index d915c2c25..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-4891d41993ed3f5f-d46a2a9dfaea5f49.json +++ /dev/null @@ -1,360 +0,0 @@ -{ - "ids": [ - "america/fort_nelson" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "S", - "T", - "\u0000", - "P", - "D", - "T", - "\u0000", - "P", - "W", - "T", - "\u0000", - "P", - "P", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "MST", - "offset": -25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 5 - ], - "transitions": [ - -2713880953, - -1632060000, - -1615129200, - -880207200, - -769395600, - -765385200, - -715788000, - -702486000, - -684338400, - -671036400, - -652888800, - -639586800, - -620834400, - -608137200, - -589384800, - -576082800, - -557935200, - -544633200, - -526485600, - -513183600, - -495036000, - -481734000, - -463586400, - -450284400, - -431532000, - -418230000, - -400082400, - -386780400, - -368632800, - -355330800, - -337183200, - -323881200, - -305733600, - -292431600, - -273679200, - -260982000, - -242229600, - -226508400, - -210780000, - -195058800, - -179330400, - -163609200, - -147880800, - -131554800, - -116431200, - -100105200, - -84376800, - -68655600, - -52927200, - -37206000, - -21477600, - -5756400, - 9972000, - 25693200, - 41421600, - 57747600, - 73476000, - 89197200, - 104925600, - 120646800, - 136375200, - 152096400, - 167824800, - 183546000, - 199274400, - 215600400, - 230724000, - 247050000, - 262778400, - 278499600, - 294228000, - 309949200, - 325677600, - 341398800, - 357127200, - 372848400, - 388576800, - 404902800, - 420026400, - 436352400, - 452080800, - 467802000, - 483530400, - 499251600, - 514980000, - 530701200, - 536486400, - 562150800, - 576064800, - 594205200, - 607514400, - 625654800, - 638964000, - 657104400, - 671018400, - 688554000, - 702468000, - 720003600, - 733917600, - 752058000, - 765367200, - 783507600, - 796816800, - 814957200, - 828871200, - 846406800, - 860320800, - 877856400, - 891770400, - 909306000, - 923220000, - 941360400, - 954669600, - 972810000, - 986119200, - 1004259600, - 1018173600, - 1035709200, - 1049623200, - 1067158800, - 1081072800, - 1099213200, - 1112522400, - 1130662800, - 1143972000, - 1162112400, - 1173607200, - 1194166800, - 1205056800, - 1225616400, - 1236506400, - 1257066000, - 1268560800, - 1289120400, - 1300010400, - 1320570000, - 1331460000, - 1352019600, - 1362909600, - 1383469200, - 1394359200, - 1414918800, - 1425808800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -29447 - }, - { - "index": 4, - "is_dst": false, - "offset": -28800 - }, - { - "index": 8, - "is_dst": true, - "offset": -25200 - }, - { - "index": 12, - "is_dst": true, - "offset": -25200 - }, - { - "index": 16, - "is_dst": true, - "offset": -25200 - }, - { - "index": 20, - "is_dst": false, - "offset": -25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-4a65bbe3253254a1-74e23ebae010633f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-4a65bbe3253254a1-74e23ebae010633f.json deleted file mode 100644 index f1b2f34f0..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-4a65bbe3253254a1-74e23ebae010633f.json +++ /dev/null @@ -1,212 +0,0 @@ -{ - "ids": [ - "arctic/longyearbyen", - "atlantic/jan_mayen", - "europe/berlin", - "europe/copenhagen", - "europe/oslo", - "europe/stockholm" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "C", - "E", - "M", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3, - 2, - 1, - 2, - 1, - 2, - 3, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2422054408, - -1693706400, - -1680483600, - -1663455600, - -1650150000, - -1632006000, - -1618700400, - -938905200, - -857257200, - -844556400, - -828226800, - -812502000, - -796777200, - -781052400, - -776563200, - -765936000, - -761180400, - -748479600, - -733273200, - -717631200, - -714610800, - -710380800, - -701910000, - -684975600, - -670460400, - -654130800, - -639010800, - 323830800, - 338950800, - 354675600, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 3208 - }, - { - "index": 4, - "is_dst": false, - "offset": 3600 - }, - { - "index": 8, - "is_dst": true, - "offset": 7200 - }, - { - "index": 13, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-4ab862d6d4b98ff4-80d56c4f33fecd23.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-4ab862d6d4b98ff4-80d56c4f33fecd23.json deleted file mode 100644 index a2d49e9fd..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-4ab862d6d4b98ff4-80d56c4f33fecd23.json +++ /dev/null @@ -1,202 +0,0 @@ -{ - "ids": [ - "europe/kiev", - "europe/kyiv", - "europe/uzhgorod", - "europe/zaporozhye" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "K", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "M", - "S", - "K", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "M", - "S", - "D", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 14400 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 5, - 4, - 5, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2 - ], - "transitions": [ - -2840148124, - -1441159324, - -1247536800, - -892522800, - -857257200, - -844556400, - -828226800, - -825382800, - 354920400, - 370728000, - 386456400, - 402264000, - 417992400, - 433800000, - 449614800, - 465346800, - 481071600, - 496796400, - 512521200, - 528246000, - 543970800, - 559695600, - 575420400, - 591145200, - 606870000, - 622594800, - 638319600, - 646783200, - 686102400, - 701827200, - 717552000, - 733276800, - 749001600, - 764726400, - 780451200, - 796176000, - 811900800, - 828230400, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 7324 - }, - { - "index": 4, - "is_dst": false, - "offset": 7324 - }, - { - "index": 8, - "is_dst": false, - "offset": 7200 - }, - { - "index": 12, - "is_dst": false, - "offset": 10800 - }, - { - "index": 16, - "is_dst": true, - "offset": 7200 - }, - { - "index": 21, - "is_dst": false, - "offset": 3600 - }, - { - "index": 25, - "is_dst": true, - "offset": 14400 - }, - { - "index": 29, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-4c9c946292d76a04-1f61fb9add974458.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-4c9c946292d76a04-1f61fb9add974458.json deleted file mode 100644 index 6165cfb45..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-4c9c946292d76a04-1f61fb9add974458.json +++ /dev/null @@ -1,193 +0,0 @@ -{ - "ids": [ - "asia/oral" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "4", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 5, - 6, - 7, - 6, - 7, - 6, - 7, - 8, - 5, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 2 - ], - "transitions": [ - -1441164324, - -1247540400, - 354913200, - 370720800, - 386445600, - 386449200, - 402256800, - 417985200, - 433792800, - 449607600, - 465339600, - 481064400, - 496789200, - 512514000, - 528238800, - 543963600, - 559688400, - 575413200, - 591138000, - 606862800, - 606866400, - 622591200, - 638316000, - 654645600, - 670370400, - 686095200, - 695772000, - 701816400, - 701820000, - 717544800, - 733269600, - 748994400, - 764719200, - 780444000, - 796168800, - 811893600, - 828223200, - 846367200, - 859672800, - 877816800, - 891122400, - 909266400, - 922572000, - 941320800, - 954021600, - 972770400, - 985471200, - 1004220000, - 1017525600, - 1035669600, - 1048975200, - 1067119200, - 1080424800, - 1099173600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 12324 - }, - { - "index": 4, - "is_dst": false, - "offset": 10800 - }, - { - "index": 8, - "is_dst": false, - "offset": 18000 - }, - { - "index": 12, - "is_dst": true, - "offset": 21600 - }, - { - "index": 12, - "is_dst": false, - "offset": 21600 - }, - { - "index": 16, - "is_dst": true, - "offset": 18000 - }, - { - "index": 8, - "is_dst": true, - "offset": 18000 - }, - { - "index": 16, - "is_dst": false, - "offset": 14400 - }, - { - "index": 8, - "is_dst": true, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-4ccce3697974db1-c9b3ad8e177d2c87.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-4ccce3697974db1-c9b3ad8e177d2c87.json deleted file mode 100644 index c64b4e7db..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-4ccce3697974db1-c9b3ad8e177d2c87.json +++ /dev/null @@ -1,157 +0,0 @@ -{ - "ids": [ - "europe/helsinki", - "europe/mariehamn" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "H", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 14400 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2890258789, - -1535938789, - -875671200, - -859773600, - 354672000, - 370396800, - 386121600, - 401846400, - 410220000, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 5989 - }, - { - "index": 4, - "is_dst": false, - "offset": 5989 - }, - { - "index": 8, - "is_dst": false, - "offset": 7200 - }, - { - "index": 12, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-4db2cfd1785db9cd-a7e3c3c4b72bfcd1.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-4db2cfd1785db9cd-a7e3c3c4b72bfcd1.json deleted file mode 100644 index 2d18e578a..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-4db2cfd1785db9cd-a7e3c3c4b72bfcd1.json +++ /dev/null @@ -1,207 +0,0 @@ -{ - "ids": [ - "asia/tomsk" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "7", - "\u0000", - "+", - "0", - "8", - "\u0000" - ], - "posix": { - "abbr": "+07", - "offset": 25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 6, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 2, - 1, - 2 - ], - "transitions": [ - -1578807591, - -1247551200, - 354906000, - 370713600, - 386442000, - 402249600, - 417978000, - 433785600, - 449600400, - 465332400, - 481057200, - 496782000, - 512506800, - 528231600, - 543956400, - 559681200, - 575406000, - 591130800, - 606855600, - 622580400, - 638305200, - 654634800, - 670359600, - 670363200, - 686088000, - 695764800, - 701809200, - 717534000, - 733258800, - 748983600, - 764708400, - 780433200, - 796158000, - 811882800, - 828212400, - 846356400, - 859662000, - 877806000, - 891111600, - 909255600, - 922561200, - 941310000, - 954010800, - 972759600, - 985460400, - 1004209200, - 1017514800, - 1020193200, - 1035662400, - 1048968000, - 1067112000, - 1080417600, - 1099166400, - 1111867200, - 1130616000, - 1143316800, - 1162065600, - 1174766400, - 1193515200, - 1206820800, - 1224964800, - 1238270400, - 1256414400, - 1269720000, - 1288468800, - 1301169600, - 1414263600, - 1464465600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 20391 - }, - { - "index": 4, - "is_dst": false, - "offset": 21600 - }, - { - "index": 8, - "is_dst": false, - "offset": 25200 - }, - { - "index": 12, - "is_dst": true, - "offset": 28800 - }, - { - "index": 4, - "is_dst": true, - "offset": 25200 - }, - { - "index": 8, - "is_dst": true, - "offset": 25200 - }, - { - "index": 8, - "is_dst": true, - "offset": 28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-4e52d8a7b9ecde7e-764ec3b5c4b8697b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-4e52d8a7b9ecde7e-764ec3b5c4b8697b.json deleted file mode 100644 index 805b19693..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-4e52d8a7b9ecde7e-764ec3b5c4b8697b.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt-7" - ], - "tzif": { - "designations": [ - "+", - "0", - "7", - "\u0000" - ], - "posix": { - "abbr": "+07", - "offset": 25200, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-4eaf76405b17e0d3-8127aac0445a30c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-4eaf76405b17e0d3-8127aac0445a30c.json deleted file mode 100644 index 9a4e05e78..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-4eaf76405b17e0d3-8127aac0445a30c.json +++ /dev/null @@ -1,212 +0,0 @@ -{ - "ids": [ - "atlantic/stanley" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "S", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 5, - 4, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4 - ], - "transitions": [ - -2524507716, - -1824235716, - -1018209600, - -1003093200, - -986760000, - -971643600, - -954705600, - -939589200, - -923256000, - -908139600, - -891806400, - -876690000, - -860356800, - -852066000, - 420609600, - 433306800, - 452052000, - 464151600, - 483501600, - 495601200, - 495604800, - 514350000, - 527054400, - 545799600, - 558504000, - 577249200, - 589953600, - 608698800, - 621403200, - 640753200, - 652852800, - 672202800, - 684907200, - 703652400, - 716356800, - 735102000, - 747806400, - 766551600, - 779256000, - 798001200, - 810705600, - 830055600, - 842760000, - 861505200, - 874209600, - 892954800, - 905659200, - 924404400, - 937108800, - 955854000, - 968558400, - 987310800, - 999410400, - 1019365200, - 1030860000, - 1050814800, - 1062914400, - 1082264400, - 1094364000, - 1113714000, - 1125813600, - 1145163600, - 1157263200, - 1176613200, - 1188712800, - 1208667600, - 1220767200, - 1240117200, - 1252216800, - 1271566800, - 1283666400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -13884 - }, - { - "index": 4, - "is_dst": false, - "offset": -13884 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-4f0ad1968e2955-2efb3a77b1fab152.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-4f0ad1968e2955-2efb3a77b1fab152.json deleted file mode 100644 index 52c0ed52b..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-4f0ad1968e2955-2efb3a77b1fab152.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "ids": [ - "asia/aqtobe" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 5, - 6, - 1, - 7, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -1441165720, - -1247544000, - 354913200, - 370720800, - 386445600, - 386449200, - 402256800, - 417985200, - 433792800, - 449607600, - 465339600, - 481064400, - 496789200, - 512514000, - 528238800, - 543963600, - 559688400, - 575413200, - 591138000, - 606862800, - 622587600, - 638312400, - 654642000, - 670366800, - 670370400, - 686095200, - 695772000, - 701816400, - 717541200, - 733266000, - 748990800, - 764715600, - 780440400, - 796165200, - 811890000, - 828219600, - 846363600, - 859669200, - 877813200, - 891118800, - 909262800, - 922568400, - 941317200, - 954018000, - 972766800, - 985467600, - 1004216400, - 1017522000, - 1035666000, - 1048971600, - 1067115600, - 1080421200, - 1099170000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 13720 - }, - { - "index": 4, - "is_dst": false, - "offset": 14400 - }, - { - "index": 8, - "is_dst": false, - "offset": 18000 - }, - { - "index": 12, - "is_dst": true, - "offset": 21600 - }, - { - "index": 12, - "is_dst": false, - "offset": 21600 - }, - { - "index": 4, - "is_dst": true, - "offset": 18000 - }, - { - "index": 8, - "is_dst": true, - "offset": 18000 - }, - { - "index": 8, - "is_dst": true, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-4fd8d72ac04d9a5d-f4e62c0d904434c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-4fd8d72ac04d9a5d-f4e62c0d904434c.json deleted file mode 100644 index b339e3acf..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-4fd8d72ac04d9a5d-f4e62c0d904434c.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "ids": [ - "europe/tirane" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1767230360, - -932346000, - -857257200, - -844556400, - -843519600, - 136854000, - 149896800, - 168130800, - 181432800, - 199839600, - 213141600, - 231894000, - 244591200, - 263257200, - 276040800, - 294706800, - 307490400, - 326156400, - 339458400, - 357087600, - 370389600, - 389142000, - 402444000, - 419468400, - 433807200, - 449622000, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 4760 - }, - { - "index": 4, - "is_dst": false, - "offset": 3600 - }, - { - "index": 8, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-5060a985014097b1-b97674a55f240560.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-5060a985014097b1-b97674a55f240560.json deleted file mode 100644 index 1eda4b3b4..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-5060a985014097b1-b97674a55f240560.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "ids": [ - "america/barbados" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "S", - "T", - "\u0000", - "A", - "D", - "T", - "\u0000", - "-", - "0", - "3", - "3", - "0", - "\u0000" - ], - "posix": { - "abbr": "AST", - "offset": -14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1841256091, - -874263600, - -862682400, - -841604400, - -830714400, - -811882800, - -798660000, - 234943200, - 244616400, - 261554400, - 276066000, - 293004000, - 307515600, - 325058400, - 338706000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -14309 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": true, - "offset": -12600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-50abe32c287395c8-f3b8793b29f50da4.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-50abe32c287395c8-f3b8793b29f50da4.json deleted file mode 100644 index 086a87f42..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-50abe32c287395c8-f3b8793b29f50da4.json +++ /dev/null @@ -1,68 +0,0 @@ -{ - "ids": [ - "asia/rangoon", - "asia/yangon", - "indian/cocos" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "R", - "M", - "T", - "\u0000", - "+", - "0", - "6", - "3", - "0", - "\u0000", - "+", - "0", - "9", - "\u0000" - ], - "posix": { - "abbr": "+0630", - "offset": 23400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2 - ], - "transitions": [ - -2840163887, - -1577946287, - -873268200, - -778410000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 23087 - }, - { - "index": 4, - "is_dst": false, - "offset": 23087 - }, - { - "index": 8, - "is_dst": false, - "offset": 23400 - }, - { - "index": 14, - "is_dst": false, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-50fc3fea132b4f4c-b7cbf9b6d86ba04f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-50fc3fea132b4f4c-b7cbf9b6d86ba04f.json deleted file mode 100644 index 0990c7845..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-50fc3fea132b4f4c-b7cbf9b6d86ba04f.json +++ /dev/null @@ -1,292 +0,0 @@ -{ - "ids": [ - "america/denver", - "america/shiprock", - "mst7mdt", - "navajo", - "us/mountain" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "M", - "W", - "T", - "\u0000", - "M", - "P", - "T", - "\u0000" - ], - "posix": { - "abbr": "MST", - "offset": -25200, - "transition": { - "abbr": "MDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2717643600, - -1633273200, - -1615132800, - -1601823600, - -1583683200, - -1570374000, - -1551628800, - -1538924400, - -1534089600, - -880210800, - -769395600, - -765388800, - -147884400, - -131558400, - -116434800, - -100108800, - -84380400, - -68659200, - -52930800, - -37209600, - -21481200, - -5760000, - 9968400, - 25689600, - 41418000, - 57744000, - 73472400, - 89193600, - 104922000, - 120643200, - 126694800, - 152092800, - 162378000, - 183542400, - 199270800, - 215596800, - 230720400, - 247046400, - 262774800, - 278496000, - 294224400, - 309945600, - 325674000, - 341395200, - 357123600, - 372844800, - 388573200, - 404899200, - 420022800, - 436348800, - 452077200, - 467798400, - 483526800, - 499248000, - 514976400, - 530697600, - 544611600, - 562147200, - 576061200, - 594201600, - 607510800, - 625651200, - 638960400, - 657100800, - 671014800, - 688550400, - 702464400, - 720000000, - 733914000, - 752054400, - 765363600, - 783504000, - 796813200, - 814953600, - 828867600, - 846403200, - 860317200, - 877852800, - 891766800, - 909302400, - 923216400, - 941356800, - 954666000, - 972806400, - 986115600, - 1004256000, - 1018170000, - 1035705600, - 1049619600, - 1067155200, - 1081069200, - 1099209600, - 1112518800, - 1130659200, - 1143968400, - 1162108800, - 1173603600, - 1194163200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -25196 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": true, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-513821d5372dc2c3-5fa78ecbf57b0a98.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-513821d5372dc2c3-5fa78ecbf57b0a98.json deleted file mode 100644 index 6d9fa259b..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-513821d5372dc2c3-5fa78ecbf57b0a98.json +++ /dev/null @@ -1,318 +0,0 @@ -{ - "ids": [ - "europe/monaco", - "europe/paris" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "M", - "T", - "\u0000", - "W", - "E", - "T", - "\u0000", - "W", - "E", - "S", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "W", - "E", - "M", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 4, - 5, - 4, - 5, - 4, - 6, - 3, - 6, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5 - ], - "transitions": [ - -2486592561, - -1855958961, - -1689814800, - -1680397200, - -1665363600, - -1648342800, - -1635123600, - -1616893200, - -1604278800, - -1585443600, - -1574038800, - -1552266000, - -1539997200, - -1520557200, - -1507510800, - -1490576400, - -1470618000, - -1459126800, - -1444006800, - -1427677200, - -1411952400, - -1396227600, - -1379293200, - -1364778000, - -1348448400, - -1333328400, - -1316394000, - -1301274000, - -1284339600, - -1269824400, - -1253494800, - -1238374800, - -1221440400, - -1206925200, - -1191200400, - -1175475600, - -1160355600, - -1143421200, - -1127696400, - -1111971600, - -1096851600, - -1080522000, - -1063587600, - -1049072400, - -1033347600, - -1017622800, - -1002502800, - -986173200, - -969238800, - -950490000, - -942012000, - -932436000, - -857257200, - -844556400, - -828226800, - -812502000, - -800071200, - -796266000, - -781052400, - -766623600, - 196819200, - 212540400, - 228877200, - 243997200, - 260326800, - 276051600, - 291776400, - 307501200, - 323830800, - 338950800, - 354675600, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 561 - }, - { - "index": 4, - "is_dst": false, - "offset": 561 - }, - { - "index": 8, - "is_dst": false, - "offset": 0 - }, - { - "index": 12, - "is_dst": true, - "offset": 3600 - }, - { - "index": 17, - "is_dst": true, - "offset": 7200 - }, - { - "index": 22, - "is_dst": false, - "offset": 3600 - }, - { - "index": 26, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-52291e736a34e36b-a04ada7792646f50.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-52291e736a34e36b-a04ada7792646f50.json deleted file mode 100644 index 39439d74c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-52291e736a34e36b-a04ada7792646f50.json +++ /dev/null @@ -1,299 +0,0 @@ -{ - "ids": [ - "asia/damascus" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "+03", - "offset": 10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3 - ], - "transitions": [ - -1577931912, - -1568592000, - -1554080400, - -1537142400, - -1522630800, - -1505692800, - -1491181200, - -1474243200, - -1459126800, - -242265600, - -228877200, - -210556800, - -197427600, - -178934400, - -165718800, - -147398400, - -134269200, - -116467200, - -102646800, - -84326400, - -71110800, - -52704000, - -39488400, - -21168000, - -7952400, - 10368000, - 23583600, - 41904000, - 55119600, - 73526400, - 86742000, - 105062400, - 118278000, - 136598400, - 149814000, - 168134400, - 181350000, - 199756800, - 212972400, - 231292800, - 241916400, - 262828800, - 273452400, - 418694400, - 433810800, - 450316800, - 465433200, - 508896000, - 529196400, - 541555200, - 562633200, - 574387200, - 594255600, - 607305600, - 623199600, - 638928000, - 654649200, - 670456800, - 686264400, - 702684000, - 717886800, - 733096800, - 748904400, - 765151200, - 780958800, - 796687200, - 812494800, - 828309600, - 844117200, - 859759200, - 875653200, - 891208800, - 907189200, - 922917600, - 938725200, - 954540000, - 970347600, - 986076000, - 1001883600, - 1017612000, - 1033419600, - 1049148000, - 1064955600, - 1080770400, - 1096578000, - 1112306400, - 1128114000, - 1143842400, - 1158872400, - 1175205600, - 1193950800, - 1207260000, - 1225486800, - 1238104800, - 1256850000, - 1270159200, - 1288299600, - 1301608800, - 1319749200, - 1333058400, - 1351198800, - 1364508000, - 1382648400, - 1395957600, - 1414702800, - 1427407200, - 1446152400, - 1458856800, - 1477602000, - 1490911200, - 1509051600, - 1522360800, - 1540501200, - 1553810400, - 1571950800, - 1585260000, - 1604005200, - 1616709600, - 1635454800, - 1648159200, - 1666904400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 8712 - }, - { - "index": 4, - "is_dst": false, - "offset": 7200 - }, - { - "index": 8, - "is_dst": true, - "offset": 10800 - }, - { - "index": 13, - "is_dst": false, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-5473a3220fbbe20b-79e52cbb001b87ba.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-5473a3220fbbe20b-79e52cbb001b87ba.json deleted file mode 100644 index 013a01111..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-5473a3220fbbe20b-79e52cbb001b87ba.json +++ /dev/null @@ -1,262 +0,0 @@ -{ - "ids": [ - "europe/rome", - "europe/san_marino", - "europe/vatican" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "R", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -3252098996, - -2403565200, - -1690765200, - -1680487200, - -1664758800, - -1648951200, - -1635123600, - -1616896800, - -1604278800, - -1585533600, - -1571014800, - -1555293600, - -932432400, - -857257200, - -844556400, - -828226800, - -812502000, - -798073200, - -781052400, - -766717200, - -750898800, - -733359600, - -719456400, - -701917200, - -689209200, - -670460400, - -114051600, - -103168800, - -81997200, - -71715600, - -50547600, - -40266000, - -18493200, - -8211600, - 12956400, - 23238000, - 43801200, - 54687600, - 75855600, - 86742000, - 107910000, - 118191600, - 138754800, - 149641200, - 170809200, - 181090800, - 202258800, - 212540400, - 233103600, - 243990000, - 265158000, - 276044400, - 296607600, - 307494000, - 323830800, - 338950800, - 354675600, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 2996 - }, - { - "index": 4, - "is_dst": false, - "offset": 2996 - }, - { - "index": 8, - "is_dst": false, - "offset": 3600 - }, - { - "index": 12, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-55bb5ee9b0a529a6-98d21d4ca15517ce.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-55bb5ee9b0a529a6-98d21d4ca15517ce.json deleted file mode 100644 index dc4ba33ad..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-55bb5ee9b0a529a6-98d21d4ca15517ce.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "ids": [ - "america/glace_bay" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "S", - "T", - "\u0000", - "A", - "D", - "T", - "\u0000", - "A", - "W", - "T", - "\u0000", - "A", - "P", - "T", - "\u0000" - ], - "posix": { - "abbr": "AST", - "offset": -14400, - "transition": { - "abbr": "ADT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2131646412, - -1632074400, - -1615143600, - -880221600, - -769395600, - -765399600, - -526500000, - -513198000, - 73461600, - 89182800, - 104911200, - 120632400, - 136360800, - 152082000, - 167810400, - 183531600, - 199260000, - 215586000, - 230709600, - 247035600, - 262764000, - 278485200, - 294213600, - 309934800, - 325663200, - 341384400, - 357112800, - 372834000, - 388562400, - 404888400, - 420012000, - 436338000, - 452066400, - 467787600, - 483516000, - 499237200, - 514965600, - 530686800, - 544600800, - 562136400, - 576050400, - 594190800, - 607500000, - 625640400, - 638949600, - 657090000, - 671004000, - 688539600, - 702453600, - 719989200, - 733903200, - 752043600, - 765352800, - 783493200, - 796802400, - 814942800, - 828856800, - 846392400, - 860306400, - 877842000, - 891756000, - 909291600, - 923205600, - 941346000, - 954655200, - 972795600, - 986104800, - 1004245200, - 1018159200, - 1035694800, - 1049608800, - 1067144400, - 1081058400, - 1099198800, - 1112508000, - 1130648400, - 1143957600, - 1162098000, - 1173592800, - 1194152400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -14388 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-55ec396d83237537-2757249da95de592.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-55ec396d83237537-2757249da95de592.json deleted file mode 100644 index 2c40c1bf1..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-55ec396d83237537-2757249da95de592.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "ids": [ - "asia/samarkand" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -1441168073, - -1247544000, - 354913200, - 370720800, - 386445600, - 386449200, - 402256800, - 417985200, - 433792800, - 449607600, - 465339600, - 481064400, - 496789200, - 512514000, - 528238800, - 543963600, - 559688400, - 575413200, - 591138000, - 606862800, - 622587600, - 638312400, - 654642000, - 670366800, - 686091600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 16073 - }, - { - "index": 4, - "is_dst": false, - "offset": 14400 - }, - { - "index": 8, - "is_dst": false, - "offset": 18000 - }, - { - "index": 12, - "is_dst": true, - "offset": 21600 - }, - { - "index": 12, - "is_dst": false, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-55eedcdc6ff1f85-9ba1e126f74a77e5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-55eedcdc6ff1f85-9ba1e126f74a77e5.json deleted file mode 100644 index 9056c5ebe..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-55eedcdc6ff1f85-9ba1e126f74a77e5.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "ids": [ - "atlantic/cape_verde" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "2", - "\u0000", - "-", - "0", - "1", - "\u0000" - ], - "posix": { - "abbr": "-01", - "offset": -3600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3 - ], - "transitions": [ - -1830376800, - -862610400, - -764118000, - 186120000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -5644 - }, - { - "index": 4, - "is_dst": false, - "offset": -7200 - }, - { - "index": 8, - "is_dst": true, - "offset": -3600 - }, - { - "index": 8, - "is_dst": false, - "offset": -3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-57ad9603575ed991-1d15542a8eef34bf.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-57ad9603575ed991-1d15542a8eef34bf.json deleted file mode 100644 index c80db39e4..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-57ad9603575ed991-1d15542a8eef34bf.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "ids": [ - "pacific/fakaofo" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "1", - "1", - "\u0000", - "+", - "1", - "3", - "\u0000" - ], - "posix": { - "abbr": "+13", - "offset": 46800, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -2177411704, - 1325242800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -41096 - }, - { - "index": 4, - "is_dst": false, - "offset": -39600 - }, - { - "index": 8, - "is_dst": false, - "offset": 46800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-5890af4975eb815-75673c114065f7fd.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-5890af4975eb815-75673c114065f7fd.json deleted file mode 100644 index 9df1edb6a..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-5890af4975eb815-75673c114065f7fd.json +++ /dev/null @@ -1,205 +0,0 @@ -{ - "ids": [ - "asia/beirut" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 0 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 0 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2840149320, - -1570413600, - -1552186800, - -1538359200, - -1522551600, - -1507514400, - -1490583600, - -1473645600, - -1460948400, - -399866400, - -386650800, - -368330400, - -355114800, - -336794400, - -323578800, - -305172000, - -291956400, - -273636000, - -260420400, - 78012000, - 86734800, - 105055200, - 118270800, - 136591200, - 149806800, - 168127200, - 181342800, - 199749600, - 212965200, - 231285600, - 244501200, - 262735200, - 275950800, - 452210400, - 466722000, - 483746400, - 498258000, - 515282400, - 529794000, - 546818400, - 561330000, - 581119200, - 592952400, - 610754400, - 624488400, - 641512800, - 656024400, - 673048800, - 687560400, - 704671200, - 718146000, - 733269600, - 748990800, - 764719200, - 780440400, - 796168800, - 811890000, - 828223200, - 843944400, - 859672800, - 875394000, - 891122400, - 906843600, - 922572000, - 941317200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 8520 - }, - { - "index": 4, - "is_dst": false, - "offset": 7200 - }, - { - "index": 8, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-59d5e08cb19672f5-b7f671d6b920b900.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-59d5e08cb19672f5-b7f671d6b920b900.json deleted file mode 100644 index f75065fb8..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-59d5e08cb19672f5-b7f671d6b920b900.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "ids": [ - "africa/johannesburg", - "africa/maseru", - "africa/mbabane" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "S", - "A", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "SAST", - "offset": 7200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2458173120, - -2109288600, - -860976000, - -845254800, - -829526400, - -813805200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 6720 - }, - { - "index": 4, - "is_dst": false, - "offset": 5400 - }, - { - "index": 4, - "is_dst": false, - "offset": 7200 - }, - { - "index": 4, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-5a1de33f302092c9-4b58fc984bc5f5d3.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-5a1de33f302092c9-4b58fc984bc5f5d3.json deleted file mode 100644 index f8af43cbe..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-5a1de33f302092c9-4b58fc984bc5f5d3.json +++ /dev/null @@ -1,239 +0,0 @@ -{ - "ids": [ - "europe/minsk" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "M", - "S", - "K", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "M", - "S", - "D", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "+03", - "offset": 10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 5, - 4, - 5, - 4, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 8 - ], - "transitions": [ - -2840147416, - -1441158600, - -1247536800, - -899780400, - -857257200, - -844556400, - -828226800, - -812502000, - -804650400, - 354920400, - 370728000, - 386456400, - 402264000, - 417992400, - 433800000, - 449614800, - 465346800, - 481071600, - 496796400, - 512521200, - 528246000, - 543970800, - 559695600, - 575420400, - 591145200, - 606870000, - 622594800, - 670374000, - 686102400, - 701827200, - 717552000, - 733276800, - 749001600, - 764726400, - 780451200, - 796176000, - 811900800, - 828230400, - 846374400, - 859680000, - 877824000, - 891129600, - 909273600, - 922579200, - 941328000, - 954028800, - 972777600, - 985478400, - 1004227200, - 1017532800, - 1035676800, - 1048982400, - 1067126400, - 1080432000, - 1099180800, - 1111881600, - 1130630400, - 1143331200, - 1162080000, - 1174780800, - 1193529600, - 1206835200, - 1224979200, - 1238284800, - 1256428800, - 1269734400, - 1288483200, - 1301184000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 6616 - }, - { - "index": 4, - "is_dst": false, - "offset": 6600 - }, - { - "index": 8, - "is_dst": false, - "offset": 7200 - }, - { - "index": 12, - "is_dst": false, - "offset": 10800 - }, - { - "index": 16, - "is_dst": true, - "offset": 7200 - }, - { - "index": 21, - "is_dst": false, - "offset": 3600 - }, - { - "index": 25, - "is_dst": true, - "offset": 14400 - }, - { - "index": 29, - "is_dst": true, - "offset": 10800 - }, - { - "index": 34, - "is_dst": false, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-5a8de8f20b18b43-9e2dca5c597242e0.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-5a8de8f20b18b43-9e2dca5c597242e0.json deleted file mode 100644 index 337dde134..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-5a8de8f20b18b43-9e2dca5c597242e0.json +++ /dev/null @@ -1,191 +0,0 @@ -{ - "ids": [ - "asia/atyrau" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "4", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 5, - 6, - 7, - 8, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 2 - ], - "transitions": [ - -1441164464, - -1247540400, - 370724400, - 386445600, - 386449200, - 402256800, - 417985200, - 433792800, - 449607600, - 465339600, - 481064400, - 496789200, - 512514000, - 528238800, - 543963600, - 559688400, - 575413200, - 591138000, - 606862800, - 622587600, - 638312400, - 654642000, - 670366800, - 670370400, - 686095200, - 695772000, - 701816400, - 717541200, - 733266000, - 748990800, - 764715600, - 780440400, - 796165200, - 811890000, - 828219600, - 846363600, - 859669200, - 877813200, - 891118800, - 909262800, - 922568400, - 922572000, - 941320800, - 954021600, - 972770400, - 985471200, - 1004220000, - 1017525600, - 1035669600, - 1048975200, - 1067119200, - 1080424800, - 1099173600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 12464 - }, - { - "index": 4, - "is_dst": false, - "offset": 10800 - }, - { - "index": 8, - "is_dst": false, - "offset": 18000 - }, - { - "index": 12, - "is_dst": false, - "offset": 21600 - }, - { - "index": 12, - "is_dst": true, - "offset": 21600 - }, - { - "index": 16, - "is_dst": true, - "offset": 18000 - }, - { - "index": 8, - "is_dst": true, - "offset": 18000 - }, - { - "index": 16, - "is_dst": false, - "offset": 14400 - }, - { - "index": 8, - "is_dst": true, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-5cb26c449b2278f2-f5c80683b8771e4.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-5cb26c449b2278f2-f5c80683b8771e4.json deleted file mode 100644 index 0cdde7121..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-5cb26c449b2278f2-f5c80683b8771e4.json +++ /dev/null @@ -1,162 +0,0 @@ -{ - "ids": [ - "europe/busingen", - "europe/vaduz", - "europe/zurich" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "B", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -3675198848, - -2385246586, - -904435200, - -891129600, - -872985600, - -859680000, - 347151600, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 2048 - }, - { - "index": 4, - "is_dst": false, - "offset": 1786 - }, - { - "index": 8, - "is_dst": false, - "offset": 3600 - }, - { - "index": 12, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-5d69c15d2c4f26ae-c8cb897f97bb314e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-5d69c15d2c4f26ae-c8cb897f97bb314e.json deleted file mode 100644 index df1235d8c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-5d69c15d2c4f26ae-c8cb897f97bb314e.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "ids": [ - "america/metlakatla" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "S", - "T", - "\u0000", - "P", - "W", - "T", - "\u0000", - "P", - "P", - "T", - "\u0000", - "P", - "D", - "T", - "\u0000", - "A", - "K", - "S", - "T", - "\u0000", - "A", - "K", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AKST", - "offset": -32400, - "transition": { - "abbr": "AKDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 6, - 7, - 6, - 7, - 6, - 7, - 2, - 6 - ], - "transitions": [ - -3225223727, - -2188955622, - -880207200, - -769395600, - -765385200, - -21477600, - -5756400, - 9972000, - 25693200, - 41421600, - 57747600, - 73476000, - 89197200, - 104925600, - 120646800, - 126698400, - 152096400, - 162381600, - 183546000, - 199274400, - 215600400, - 230724000, - 247050000, - 262778400, - 278499600, - 294228000, - 309949200, - 325677600, - 341398800, - 357127200, - 372848400, - 388576800, - 404902800, - 420026400, - 436352400, - 1446372000, - 1457866800, - 1478426400, - 1489316400, - 1509876000, - 1520766000, - 1541325600, - 1547978400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 54822 - }, - { - "index": 0, - "is_dst": false, - "offset": -31578 - }, - { - "index": 4, - "is_dst": false, - "offset": -28800 - }, - { - "index": 8, - "is_dst": true, - "offset": -25200 - }, - { - "index": 12, - "is_dst": true, - "offset": -25200 - }, - { - "index": 16, - "is_dst": true, - "offset": -25200 - }, - { - "index": 20, - "is_dst": false, - "offset": -32400 - }, - { - "index": 25, - "is_dst": true, - "offset": -28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-5e245c7be541fe52-ff12499b7e2497cc.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-5e245c7be541fe52-ff12499b7e2497cc.json deleted file mode 100644 index b0ad780c4..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-5e245c7be541fe52-ff12499b7e2497cc.json +++ /dev/null @@ -1,256 +0,0 @@ -{ - "ids": [ - "america/godthab", - "america/nuuk" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-02", - "offset": -7200, - "transition": { - "abbr": "-01", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 0 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": -3600 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3 - ], - "transitions": [ - -1686083584, - 323845200, - 338950800, - 354675600, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000, - 859683600, - 877827600, - 891133200, - 909277200, - 922582800, - 941331600, - 954032400, - 972781200, - 985482000, - 1004230800, - 1017536400, - 1035680400, - 1048986000, - 1067130000, - 1080435600, - 1099184400, - 1111885200, - 1130634000, - 1143334800, - 1162083600, - 1174784400, - 1193533200, - 1206838800, - 1224982800, - 1238288400, - 1256432400, - 1269738000, - 1288486800, - 1301187600, - 1319936400, - 1332637200, - 1351386000, - 1364691600, - 1382835600, - 1396141200, - 1414285200, - 1427590800, - 1445734800, - 1459040400, - 1477789200, - 1490490000, - 1509238800, - 1521939600, - 1540688400, - 1553994000, - 1572138000, - 1585443600, - 1603587600, - 1616893200, - 1635642000, - 1648342800, - 1667091600, - 1679792400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -12416 - }, - { - "index": 4, - "is_dst": false, - "offset": -10800 - }, - { - "index": 8, - "is_dst": true, - "offset": -7200 - }, - { - "index": 8, - "is_dst": false, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-5eec9cd299aa076f-58319b6fef37bd5b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-5eec9cd299aa076f-58319b6fef37bd5b.json deleted file mode 100644 index b12409611..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-5eec9cd299aa076f-58319b6fef37bd5b.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "ids": [ - "etc/uct", - "etc/universal", - "etc/utc", - "etc/zulu", - "uct", - "universal", - "utc", - "zulu" - ], - "tzif": { - "designations": [ - "U", - "T", - "C", - "\u0000" - ], - "posix": { - "abbr": "UTC", - "offset": 0, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-5fd210f528e95871-fc49dea0efb99a13.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-5fd210f528e95871-fc49dea0efb99a13.json deleted file mode 100644 index 05f3efeb7..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-5fd210f528e95871-fc49dea0efb99a13.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "ids": [ - "europe/astrakhan" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000" - ], - "posix": { - "abbr": "+04", - "offset": 14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 5, - 1, - 2, - 4, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 2, - 1, - 2 - ], - "transitions": [ - -1441249932, - -1247540400, - 354916800, - 370724400, - 386452800, - 402260400, - 417988800, - 433796400, - 449611200, - 465343200, - 481068000, - 496792800, - 512517600, - 528242400, - 543967200, - 559692000, - 575416800, - 591141600, - 606866400, - 606870000, - 622594800, - 638319600, - 654649200, - 670374000, - 701820000, - 701823600, - 717548400, - 733273200, - 748998000, - 764722800, - 780447600, - 796172400, - 811897200, - 828226800, - 846370800, - 859676400, - 877820400, - 891126000, - 909270000, - 922575600, - 941324400, - 954025200, - 972774000, - 985474800, - 1004223600, - 1017529200, - 1035673200, - 1048978800, - 1067122800, - 1080428400, - 1099177200, - 1111878000, - 1130626800, - 1143327600, - 1162076400, - 1174777200, - 1193526000, - 1206831600, - 1224975600, - 1238281200, - 1256425200, - 1269730800, - 1288479600, - 1301180400, - 1414274400, - 1459033200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 11532 - }, - { - "index": 4, - "is_dst": false, - "offset": 10800 - }, - { - "index": 8, - "is_dst": false, - "offset": 14400 - }, - { - "index": 12, - "is_dst": true, - "offset": 18000 - }, - { - "index": 4, - "is_dst": true, - "offset": 14400 - }, - { - "index": 8, - "is_dst": true, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-609a1c759abb0f9e-553eae2fe9cd2dba.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-609a1c759abb0f9e-553eae2fe9cd2dba.json deleted file mode 100644 index 954ef3f02..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-609a1c759abb0f9e-553eae2fe9cd2dba.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "ids": [ - "america/porto_velho" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-04", - "offset": -14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1767210264, - -1206954000, - -1191358800, - -1175371200, - -1159822800, - -633816000, - -622065600, - -602280000, - -591829200, - -570744000, - -560206800, - -539121600, - -531349200, - -191361600, - -184194000, - -155160000, - -150066000, - -128894400, - -121122000, - -99950400, - -89586000, - -68414400, - -57963600, - 499752000, - 511239600, - 530596800, - 540270000, - 562132800, - 571201200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -15336 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-6156cfed77f2a26c-c8df75ccc9a7c2cb.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-6156cfed77f2a26c-c8df75ccc9a7c2cb.json deleted file mode 100644 index b844e37b1..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-6156cfed77f2a26c-c8df75ccc9a7c2cb.json +++ /dev/null @@ -1,219 +0,0 @@ -{ - "ids": [ - "asia/irkutsk" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "I", - "M", - "T", - "\u0000", - "+", - "0", - "7", - "\u0000", - "+", - "0", - "8", - "\u0000", - "+", - "0", - "9", - "\u0000" - ], - "posix": { - "abbr": "+08", - "offset": 28800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 5, - 6, - 2, - 7, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 8, - 3 - ], - "transitions": [ - -2840165825, - -1575874625, - -1247554800, - 354902400, - 370710000, - 386438400, - 402246000, - 417974400, - 433782000, - 449596800, - 465328800, - 481053600, - 496778400, - 512503200, - 528228000, - 543952800, - 559677600, - 575402400, - 591127200, - 606852000, - 622576800, - 638301600, - 654631200, - 670356000, - 670359600, - 686084400, - 695761200, - 701805600, - 717530400, - 733255200, - 748980000, - 764704800, - 780429600, - 796154400, - 811879200, - 828208800, - 846352800, - 859658400, - 877802400, - 891108000, - 909252000, - 922557600, - 941306400, - 954007200, - 972756000, - 985456800, - 1004205600, - 1017511200, - 1035655200, - 1048960800, - 1067104800, - 1080410400, - 1099159200, - 1111860000, - 1130608800, - 1143309600, - 1162058400, - 1174759200, - 1193508000, - 1206813600, - 1224957600, - 1238263200, - 1256407200, - 1269712800, - 1288461600, - 1301162400, - 1414256400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 25025 - }, - { - "index": 4, - "is_dst": false, - "offset": 25025 - }, - { - "index": 8, - "is_dst": false, - "offset": 25200 - }, - { - "index": 12, - "is_dst": false, - "offset": 28800 - }, - { - "index": 16, - "is_dst": true, - "offset": 32400 - }, - { - "index": 8, - "is_dst": true, - "offset": 28800 - }, - { - "index": 12, - "is_dst": true, - "offset": 28800 - }, - { - "index": 12, - "is_dst": true, - "offset": 32400 - }, - { - "index": 16, - "is_dst": false, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-6196bbf525d4d50a-c71f929438c03168.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-6196bbf525d4d50a-c71f929438c03168.json deleted file mode 100644 index e64fd25b1..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-6196bbf525d4d50a-c71f929438c03168.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "ids": [ - "hst", - "pacific/honolulu", - "pacific/johnston", - "us/hawaii" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "H", - "S", - "T", - "\u0000", - "H", - "D", - "T", - "\u0000", - "H", - "W", - "T", - "\u0000", - "H", - "P", - "T", - "\u0000" - ], - "posix": { - "abbr": "HST", - "offset": -36000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 4, - 1, - 5 - ], - "transitions": [ - -2334101314, - -1157283000, - -1155436200, - -880198200, - -769395600, - -765376200, - -712150200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -37886 - }, - { - "index": 4, - "is_dst": false, - "offset": -37800 - }, - { - "index": 8, - "is_dst": true, - "offset": -34200 - }, - { - "index": 12, - "is_dst": true, - "offset": -34200 - }, - { - "index": 16, - "is_dst": true, - "offset": -34200 - }, - { - "index": 4, - "is_dst": false, - "offset": -36000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-622cbc57a076ea5d-8c48d3d26580be3e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-622cbc57a076ea5d-8c48d3d26580be3e.json deleted file mode 100644 index 1fde0c02c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-622cbc57a076ea5d-8c48d3d26580be3e.json +++ /dev/null @@ -1,191 +0,0 @@ -{ - "ids": [ - "asia/qyzylorda" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 5, - 6, - 2, - 7, - 8, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 4, - 2 - ], - "transitions": [ - -1441167712, - -1247544000, - 354913200, - 370720800, - 386445600, - 386449200, - 402256800, - 417985200, - 433792800, - 449607600, - 465339600, - 481064400, - 496789200, - 512514000, - 528238800, - 543963600, - 559688400, - 575413200, - 591138000, - 606862800, - 622587600, - 638312400, - 654642000, - 670366800, - 670370400, - 686095200, - 695768400, - 701812800, - 701816400, - 717541200, - 733266000, - 748990800, - 764715600, - 780440400, - 796165200, - 811890000, - 828219600, - 846363600, - 859669200, - 877813200, - 891118800, - 909262800, - 922568400, - 941317200, - 954018000, - 972766800, - 985467600, - 1004216400, - 1017522000, - 1035666000, - 1048971600, - 1067115600, - 1080421200, - 1099170000, - 1545328800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 15712 - }, - { - "index": 4, - "is_dst": false, - "offset": 14400 - }, - { - "index": 8, - "is_dst": false, - "offset": 18000 - }, - { - "index": 12, - "is_dst": true, - "offset": 21600 - }, - { - "index": 12, - "is_dst": false, - "offset": 21600 - }, - { - "index": 4, - "is_dst": true, - "offset": 18000 - }, - { - "index": 8, - "is_dst": true, - "offset": 18000 - }, - { - "index": 12, - "is_dst": true, - "offset": 25200 - }, - { - "index": 8, - "is_dst": true, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-6268b48b2e959066-972e87b290937aa1.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-6268b48b2e959066-972e87b290937aa1.json deleted file mode 100644 index 13d5391a2..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-6268b48b2e959066-972e87b290937aa1.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "ids": [ - "asia/pyongyang" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "K", - "S", - "T", - "\u0000", - "J", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "KST", - "offset": 32400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 1, - 3 - ], - "transitions": [ - -1948782180, - -1830414600, - -768646800, - 1439564400, - 1525446000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 30180 - }, - { - "index": 4, - "is_dst": false, - "offset": 30600 - }, - { - "index": 8, - "is_dst": false, - "offset": 32400 - }, - { - "index": 4, - "is_dst": false, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-638a1ae9aef4e05b-2b1a4febecd034f5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-638a1ae9aef4e05b-2b1a4febecd034f5.json deleted file mode 100644 index b3860a7ee..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-638a1ae9aef4e05b-2b1a4febecd034f5.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "ids": [ - "europe/malta" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2403478684, - -1690765200, - -1680487200, - -1664758800, - -1648951200, - -1635123600, - -1616896800, - -1604278800, - -1585533600, - -1571014800, - -1555293600, - -932432400, - -857257200, - -844556400, - -828226800, - -812588400, - -798073200, - -781052400, - -766717200, - -750898800, - -733359600, - -719456400, - -701917200, - -689209200, - -670460400, - -114051600, - -103168800, - -81997200, - -71715600, - -50547600, - -40266000, - -18493200, - -8211600, - 12956400, - 23238000, - 43801200, - 54687600, - 75855600, - 86742000, - 102380400, - 118105200, - 135730800, - 148518000, - 167187600, - 180489600, - 198637200, - 211939200, - 230086800, - 243388800, - 261536400, - 274838400, - 292986000, - 306288000, - 323312400, - 338342400, - 347151600, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 3484 - }, - { - "index": 4, - "is_dst": false, - "offset": 3600 - }, - { - "index": 8, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-6415eb3f74777957-e97d06555e16796e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-6415eb3f74777957-e97d06555e16796e.json deleted file mode 100644 index 5962557dc..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-6415eb3f74777957-e97d06555e16796e.json +++ /dev/null @@ -1,313 +0,0 @@ -{ - "ids": [ - "cet", - "europe/amsterdam", - "europe/brussels", - "europe/luxembourg", - "met" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "B", - "M", - "T", - "\u0000", - "W", - "E", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "W", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3 - ], - "transitions": [ - -2840141850, - -2450995200, - -1740355200, - -1693702800, - -1680483600, - -1663455600, - -1650150000, - -1632006000, - -1618700400, - -1613826000, - -1604278800, - -1585530000, - -1574038800, - -1552266000, - -1539997200, - -1520557200, - -1507510800, - -1490576400, - -1473642000, - -1459126800, - -1444006800, - -1427677200, - -1411952400, - -1396227600, - -1379293200, - -1364778000, - -1348448400, - -1333328400, - -1316394000, - -1301263200, - -1284328800, - -1269813600, - -1253484000, - -1238364000, - -1221429600, - -1206914400, - -1191189600, - -1175464800, - -1160344800, - -1143410400, - -1127685600, - -1111960800, - -1096840800, - -1080511200, - -1063576800, - -1049061600, - -1033336800, - -1017612000, - -1002492000, - -986162400, - -969228000, - -950479200, - -942012000, - -934668000, - -857257200, - -844556400, - -828226800, - -812502000, - -798073200, - -781052400, - -766623600, - -745455600, - -733273200, - 228877200, - 243997200, - 260326800, - 276051600, - 291776400, - 307501200, - 323830800, - 338950800, - 354675600, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 1050 - }, - { - "index": 4, - "is_dst": false, - "offset": 1050 - }, - { - "index": 8, - "is_dst": false, - "offset": 0 - }, - { - "index": 12, - "is_dst": false, - "offset": 3600 - }, - { - "index": 16, - "is_dst": true, - "offset": 7200 - }, - { - "index": 21, - "is_dst": true, - "offset": 3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-6493d17f054bfdfb-9ba300c9d5b440df.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-6493d17f054bfdfb-9ba300c9d5b440df.json deleted file mode 100644 index 4b7ecc42f..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-6493d17f054bfdfb-9ba300c9d5b440df.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "ids": [ - "pacific/guadalcanal", - "pacific/pohnpei", - "pacific/ponape" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "1", - "\u0000" - ], - "posix": { - "abbr": "+11", - "offset": 39600, - "transition": null - }, - "transition_types": [ - 1 - ], - "transitions": [ - -1806748788 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 38388 - }, - { - "index": 4, - "is_dst": false, - "offset": 39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-650685fe5c95ce2a-25adc63d7a5cf37e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-650685fe5c95ce2a-25adc63d7a5cf37e.json deleted file mode 100644 index a23095961..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-650685fe5c95ce2a-25adc63d7a5cf37e.json +++ /dev/null @@ -1,221 +0,0 @@ -{ - "ids": [ - "asia/tehran", - "iran" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "T", - "M", - "T", - "\u0000", - "+", - "0", - "3", - "3", - "0", - "\u0000", - "+", - "0", - "4", - "3", - "0", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000" - ], - "posix": { - "abbr": "+0330", - "offset": 12600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 5, - 4, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -1704165944, - -1090466744, - 227820600, - 246223800, - 259617600, - 271108800, - 279576000, - 296598600, - 306531000, - 322432200, - 338499000, - 673216200, - 685481400, - 701209800, - 717103800, - 732745800, - 748639800, - 764281800, - 780175800, - 795817800, - 811711800, - 827353800, - 843247800, - 858976200, - 874870200, - 890512200, - 906406200, - 922048200, - 937942200, - 953584200, - 969478200, - 985206600, - 1001100600, - 1016742600, - 1032636600, - 1048278600, - 1064172600, - 1079814600, - 1095708600, - 1111437000, - 1127331000, - 1206045000, - 1221939000, - 1237667400, - 1253561400, - 1269203400, - 1285097400, - 1300739400, - 1316633400, - 1332275400, - 1348169400, - 1363897800, - 1379791800, - 1395433800, - 1411327800, - 1426969800, - 1442863800, - 1458505800, - 1474399800, - 1490128200, - 1506022200, - 1521664200, - 1537558200, - 1553200200, - 1569094200, - 1584736200, - 1600630200, - 1616358600, - 1632252600, - 1647894600, - 1663788600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 12344 - }, - { - "index": 4, - "is_dst": false, - "offset": 12344 - }, - { - "index": 8, - "is_dst": false, - "offset": 12600 - }, - { - "index": 14, - "is_dst": true, - "offset": 16200 - }, - { - "index": 20, - "is_dst": false, - "offset": 14400 - }, - { - "index": 24, - "is_dst": true, - "offset": 18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-65401a13577707c6-3c816ecb1222096.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-65401a13577707c6-3c816ecb1222096.json deleted file mode 100644 index 514584593..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-65401a13577707c6-3c816ecb1222096.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt-6" - ], - "tzif": { - "designations": [ - "+", - "0", - "6", - "\u0000" - ], - "posix": { - "abbr": "+06", - "offset": 21600, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-65badfa9c283e8d3-582b0756bd73cccd.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-65badfa9c283e8d3-582b0756bd73cccd.json deleted file mode 100644 index a50583bf1..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-65badfa9c283e8d3-582b0756bd73cccd.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "ids": [ - "asia/hovd" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "7", - "\u0000", - "+", - "0", - "8", - "\u0000" - ], - "posix": { - "abbr": "+07", - "offset": 25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2032927596, - 252439200, - 417978000, - 433785600, - 449600400, - 465321600, - 481050000, - 496771200, - 512499600, - 528220800, - 543949200, - 559670400, - 575398800, - 591120000, - 606848400, - 622569600, - 638298000, - 654624000, - 670352400, - 686073600, - 701802000, - 717523200, - 733251600, - 748972800, - 764701200, - 780422400, - 796150800, - 811872000, - 828205200, - 843926400, - 859654800, - 875376000, - 891104400, - 906825600, - 988398000, - 1001700000, - 1017428400, - 1033149600, - 1048878000, - 1064599200, - 1080327600, - 1096048800, - 1111777200, - 1127498400, - 1143226800, - 1159552800, - 1427482800, - 1443196800, - 1458932400, - 1474646400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 21996 - }, - { - "index": 4, - "is_dst": false, - "offset": 21600 - }, - { - "index": 8, - "is_dst": false, - "offset": 25200 - }, - { - "index": 12, - "is_dst": true, - "offset": 28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-66a5515c6139ad2d-b15540da5416d9d.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-66a5515c6139ad2d-b15540da5416d9d.json deleted file mode 100644 index 09403d884..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-66a5515c6139ad2d-b15540da5416d9d.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "ids": [ - "america/la_paz" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "B", - "S", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000" - ], - "posix": { - "abbr": "-04", - "offset": -14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3 - ], - "transitions": [ - -2524505244, - -1205954844, - -1192307244 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -16356 - }, - { - "index": 4, - "is_dst": false, - "offset": -16356 - }, - { - "index": 8, - "is_dst": true, - "offset": -12756 - }, - { - "index": 12, - "is_dst": false, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-66fc406d3b90ff90-3c65fcd4692120b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-66fc406d3b90ff90-3c65fcd4692120b.json deleted file mode 100644 index 105d202be..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-66fc406d3b90ff90-3c65fcd4692120b.json +++ /dev/null @@ -1,127 +0,0 @@ -{ - "ids": [ - "africa/juba" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "A", - "T", - "\u0000", - "C", - "A", - "S", - "T", - "\u0000", - "E", - "A", - "T", - "\u0000" - ], - "posix": { - "abbr": "CAT", - "offset": 7200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 1 - ], - "transitions": [ - -1230775588, - 10360800, - 24786000, - 41810400, - 56322000, - 73432800, - 87944400, - 104882400, - 119480400, - 136332000, - 151016400, - 167781600, - 182552400, - 199231200, - 214174800, - 230680800, - 245710800, - 262735200, - 277246800, - 294184800, - 308782800, - 325634400, - 340405200, - 357084000, - 371941200, - 388533600, - 403477200, - 419983200, - 435013200, - 452037600, - 466635600, - 483487200, - 498171600, - 947930400, - 1612126800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 7588 - }, - { - "index": 4, - "is_dst": false, - "offset": 7200 - }, - { - "index": 8, - "is_dst": true, - "offset": 10800 - }, - { - "index": 13, - "is_dst": false, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-6797b3dc466b8334-d830c99377d63c38.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-6797b3dc466b8334-d830c99377d63c38.json deleted file mode 100644 index d1647e9b1..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-6797b3dc466b8334-d830c99377d63c38.json +++ /dev/null @@ -1,42 +0,0 @@ -{ - "ids": [ - "pacific/marquesas" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "9", - "3", - "0", - "\u0000" - ], - "posix": { - "abbr": "-0930", - "offset": -34200, - "transition": null - }, - "transition_types": [ - 1 - ], - "transitions": [ - -1806676920 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -33480 - }, - { - "index": 4, - "is_dst": false, - "offset": -34200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-67d3e39540d85c91-16a76df7ea37cc86.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-67d3e39540d85c91-16a76df7ea37cc86.json deleted file mode 100644 index a7a7e10a6..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-67d3e39540d85c91-16a76df7ea37cc86.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "ids": [ - "atlantic/faeroe", - "atlantic/faroe" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "W", - "E", - "T", - "\u0000", - "W", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "WET", - "offset": 0, - "transition": { - "abbr": "WEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 3600 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1955748776, - 347155200, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -1624 - }, - { - "index": 4, - "is_dst": false, - "offset": 0 - }, - { - "index": 8, - "is_dst": true, - "offset": 3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-68b74f8e8d191761-13c01789896a8ab1.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-68b74f8e8d191761-13c01789896a8ab1.json deleted file mode 100644 index 9addb8345..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-68b74f8e8d191761-13c01789896a8ab1.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "ids": [ - "pacific/midway", - "pacific/pago_pago", - "pacific/samoa", - "us/samoa" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "S", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "SST", - "offset": -39600, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -2445424632, - -1861879032 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 45432 - }, - { - "index": 0, - "is_dst": false, - "offset": -40968 - }, - { - "index": 4, - "is_dst": false, - "offset": -39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-69530af9af6cd0cb-266a2af4d1028345.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-69530af9af6cd0cb-266a2af4d1028345.json deleted file mode 100644 index 65887db41..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-69530af9af6cd0cb-266a2af4d1028345.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "ids": [ - "america/hermosillo" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "MST", - "offset": -25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 2, - 1, - 3, - 1, - 3, - 1, - 3, - 1 - ], - "transitions": [ - -1514739600, - -1343149200, - -1234807200, - -1220461200, - -1207159200, - -1191344400, - -873828000, - 828867600, - 846403200, - 860317200, - 877852800, - 891766800, - 909302400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -26632 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": false, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-6a52098e032992a5-bba19e0a651fd245.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-6a52098e032992a5-bba19e0a651fd245.json deleted file mode 100644 index 988236efe..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-6a52098e032992a5-bba19e0a651fd245.json +++ /dev/null @@ -1,284 +0,0 @@ -{ - "ids": [ - "atlantic/bermuda" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "B", - "M", - "T", - "\u0000", - "B", - "S", - "T", - "\u0000", - "A", - "S", - "T", - "\u0000", - "A", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AST", - "offset": -14400, - "transition": { - "abbr": "ADT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3 - ], - "transitions": [ - -2524506042, - -1664307642, - -1648932042, - -1632080442, - -1618692042, - -1262281242, - -882727200, - -858538800, - -845229600, - -825879600, - -814384800, - -793825200, - -782935200, - -762375600, - -713988000, - -703710000, - -681933600, - -672865200, - -650484000, - -641415600, - -618429600, - -609966000, - -586980000, - -578516400, - -555530400, - -546462000, - -429127200, - -415825200, - 136360800, - 152082000, - 167810400, - 183531600, - 199260000, - 215586000, - 230709600, - 247035600, - 262764000, - 278485200, - 294213600, - 309934800, - 325663200, - 341384400, - 357112800, - 372834000, - 388562400, - 404888400, - 420012000, - 436338000, - 452066400, - 467787600, - 483516000, - 499237200, - 514965600, - 530686800, - 544600800, - 562136400, - 576050400, - 594190800, - 607500000, - 625640400, - 638949600, - 657090000, - 671004000, - 688539600, - 702453600, - 719989200, - 733903200, - 752043600, - 765352800, - 783493200, - 796802400, - 814942800, - 828856800, - 846392400, - 860306400, - 877842000, - 891756000, - 909291600, - 923205600, - 941346000, - 954655200, - 972795600, - 986104800, - 1004245200, - 1018159200, - 1035694800, - 1049608800, - 1067144400, - 1081058400, - 1099198800, - 1112508000, - 1130648400, - 1143957600, - 1162098000, - 1173592800, - 1194152400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -15558 - }, - { - "index": 4, - "is_dst": false, - "offset": -15558 - }, - { - "index": 8, - "is_dst": true, - "offset": -11958 - }, - { - "index": 12, - "is_dst": false, - "offset": -14400 - }, - { - "index": 16, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-6ad7cbb6af2e6144-23c1965c29d4f40e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-6ad7cbb6af2e6144-23c1965c29d4f40e.json deleted file mode 100644 index 20192e783..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-6ad7cbb6af2e6144-23c1965c29d4f40e.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "ids": [ - "europe/saratov" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000" - ], - "posix": { - "abbr": "+04", - "offset": 14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 5, - 1, - 5, - 1, - 2, - 4, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 2, - 1, - 2 - ], - "transitions": [ - -1593820800, - -1247540400, - 354916800, - 370724400, - 386452800, - 402260400, - 417988800, - 433796400, - 449611200, - 465343200, - 481068000, - 496792800, - 512517600, - 528242400, - 543967200, - 559692000, - 575416800, - 575420400, - 591145200, - 606870000, - 622594800, - 638319600, - 654649200, - 670374000, - 701820000, - 701823600, - 717548400, - 733273200, - 748998000, - 764722800, - 780447600, - 796172400, - 811897200, - 828226800, - 846370800, - 859676400, - 877820400, - 891126000, - 909270000, - 922575600, - 941324400, - 954025200, - 972774000, - 985474800, - 1004223600, - 1017529200, - 1035673200, - 1048978800, - 1067122800, - 1080428400, - 1099177200, - 1111878000, - 1130626800, - 1143327600, - 1162076400, - 1174777200, - 1193526000, - 1206831600, - 1224975600, - 1238281200, - 1256425200, - 1269730800, - 1288479600, - 1301180400, - 1414274400, - 1480806000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 11058 - }, - { - "index": 4, - "is_dst": false, - "offset": 10800 - }, - { - "index": 8, - "is_dst": false, - "offset": 14400 - }, - { - "index": 12, - "is_dst": true, - "offset": 18000 - }, - { - "index": 4, - "is_dst": true, - "offset": 14400 - }, - { - "index": 8, - "is_dst": true, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-6bfb62f5e4b63e4a-e415221176acbc2e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-6bfb62f5e4b63e4a-e415221176acbc2e.json deleted file mode 100644 index f6a1e43c8..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-6bfb62f5e4b63e4a-e415221176acbc2e.json +++ /dev/null @@ -1,415 +0,0 @@ -{ - "ids": [ - "europe/belfast", - "europe/guernsey", - "europe/isle_of_man", - "europe/jersey", - "europe/london", - "gb", - "gb-eire" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "G", - "M", - "T", - "\u0000", - "B", - "S", - "T", - "\u0000", - "B", - "D", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "GMT", - "offset": 0, - "transition": { - "abbr": "BST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 3600 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 1, - 2, - 1, - 2, - 3, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -3852662325, - -1691964000, - -1680472800, - -1664143200, - -1650146400, - -1633903200, - -1617487200, - -1601848800, - -1586037600, - -1570399200, - -1552168800, - -1538344800, - -1522533600, - -1507500000, - -1490565600, - -1473631200, - -1460930400, - -1442786400, - -1428876000, - -1410732000, - -1396216800, - -1379282400, - -1364767200, - -1348437600, - -1333317600, - -1315778400, - -1301263200, - -1284328800, - -1269813600, - -1253484000, - -1238364000, - -1221429600, - -1206914400, - -1189980000, - -1175464800, - -1159135200, - -1143410400, - -1126476000, - -1111960800, - -1095631200, - -1080511200, - -1063576800, - -1049061600, - -1032127200, - -1017612000, - -1001282400, - -986162400, - -969228000, - -950479200, - -942012000, - -904518000, - -896050800, - -875487600, - -864601200, - -844038000, - -832546800, - -812588400, - -798073200, - -781052400, - -772066800, - -764805600, - -748476000, - -733356000, - -719445600, - -717030000, - -706748400, - -699487200, - -687996000, - -668037600, - -654732000, - -636588000, - -622072800, - -605743200, - -590623200, - -574293600, - -558568800, - -542239200, - -527119200, - -512604000, - -496274400, - -481154400, - -464220000, - -449704800, - -432165600, - -417650400, - -401320800, - -386200800, - -369266400, - -354751200, - -337816800, - -323301600, - -306972000, - -291852000, - -276732000, - -257983200, - -245282400, - -226533600, - -213228000, - -195084000, - -182383200, - -163634400, - -150933600, - -132184800, - -119484000, - -100735200, - -88034400, - -68680800, - -59004000, - -37242000, - 57722400, - 69818400, - 89172000, - 101268000, - 120621600, - 132717600, - 152071200, - 164167200, - 183520800, - 196221600, - 214970400, - 227671200, - 246420000, - 259120800, - 278474400, - 290570400, - 309924000, - 322020000, - 341373600, - 354675600, - 372819600, - 386125200, - 404269200, - 417574800, - 435718800, - 449024400, - 467773200, - 481078800, - 499222800, - 512528400, - 530672400, - 543978000, - 562122000, - 575427600, - 593571600, - 606877200, - 625626000, - 638326800, - 657075600, - 670381200, - 688525200, - 701830800, - 719974800, - 733280400, - 751424400, - 764730000, - 782874000, - 796179600, - 814323600, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -75 - }, - { - "index": 4, - "is_dst": false, - "offset": 0 - }, - { - "index": 8, - "is_dst": true, - "offset": 3600 - }, - { - "index": 12, - "is_dst": true, - "offset": 7200 - }, - { - "index": 8, - "is_dst": false, - "offset": 3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-6d168cde30b3c19-c33293d102bea483.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-6d168cde30b3c19-c33293d102bea483.json deleted file mode 100644 index a0bc0a88c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-6d168cde30b3c19-c33293d102bea483.json +++ /dev/null @@ -1,56 +0,0 @@ -{ - "ids": [ - "asia/kathmandu", - "asia/katmandu" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "5", - "3", - "0", - "\u0000", - "+", - "0", - "5", - "4", - "5", - "\u0000" - ], - "posix": { - "abbr": "+0545", - "offset": 20700, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -1577943676, - 504901800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 20476 - }, - { - "index": 4, - "is_dst": false, - "offset": 19800 - }, - { - "index": 10, - "is_dst": false, - "offset": 20700 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-6d3285599a38ae5a-2cd0d5b4e23bce4f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-6d3285599a38ae5a-2cd0d5b4e23bce4f.json deleted file mode 100644 index 95f4efea7..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-6d3285599a38ae5a-2cd0d5b4e23bce4f.json +++ /dev/null @@ -1,216 +0,0 @@ -{ - "ids": [ - "europe/bratislava", - "europe/prague" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "G", - "M", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -3786829064, - -2469401864, - -1693706400, - -1680483600, - -1663455600, - -1650150000, - -1632006000, - -1618700400, - -938905200, - -857257200, - -844556400, - -828226800, - -812502000, - -796777200, - -781052400, - -765327600, - -746578800, - -733359600, - -728517600, - -721260000, - -701910000, - -684975600, - -670460400, - -654217200, - -639010800, - 291776400, - 307501200, - 323830800, - 338950800, - 354675600, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 3464 - }, - { - "index": 4, - "is_dst": false, - "offset": 3464 - }, - { - "index": 8, - "is_dst": false, - "offset": 3600 - }, - { - "index": 12, - "is_dst": true, - "offset": 7200 - }, - { - "index": 17, - "is_dst": false, - "offset": 0 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-6fbdbfed85292c81-a2a3eeb444b4a763.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-6fbdbfed85292c81-a2a3eeb444b4a763.json deleted file mode 100644 index 253e66d07..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-6fbdbfed85292c81-a2a3eeb444b4a763.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "ids": [ - "america/atikokan", - "america/cayman", - "america/coral_harbour", - "america/panama", - "est" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -2524502512, - -1946918424 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -19088 - }, - { - "index": 4, - "is_dst": false, - "offset": -19176 - }, - { - "index": 8, - "is_dst": false, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-6fbdea510dc8bdff-1c377d454abefd4b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-6fbdea510dc8bdff-1c377d454abefd4b.json deleted file mode 100644 index d2a7b0364..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-6fbdea510dc8bdff-1c377d454abefd4b.json +++ /dev/null @@ -1,151 +0,0 @@ -{ - "ids": [ - "america/cancun" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 3, - 2, - 4, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 2 - ], - "transitions": [ - -1514743200, - 378201600, - 410504400, - 828864000, - 846399600, - 860313600, - 877849200, - 891759600, - 902037600, - 909298800, - 923212800, - 941353200, - 954662400, - 972802800, - 989136000, - 1001833200, - 1018166400, - 1035702000, - 1049616000, - 1067151600, - 1081065600, - 1099206000, - 1112515200, - 1130655600, - 1143964800, - 1162105200, - 1175414400, - 1193554800, - 1207468800, - 1225004400, - 1238918400, - 1256454000, - 1270368000, - 1288508400, - 1301817600, - 1319958000, - 1333267200, - 1351407600, - 1365321600, - 1382857200, - 1396771200, - 1414306800, - 1422777600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -20824 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": false, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-70408e1d981309b7-f46acc01dc93a185.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-70408e1d981309b7-f46acc01dc93a185.json deleted file mode 100644 index 6bb31c7c2..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-70408e1d981309b7-f46acc01dc93a185.json +++ /dev/null @@ -1,292 +0,0 @@ -{ - "ids": [ - "america/boise" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "S", - "T", - "\u0000", - "P", - "D", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "M", - "W", - "T", - "\u0000", - "M", - "P", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "MST", - "offset": -25200, - "transition": { - "abbr": "MDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 5, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3 - ], - "transitions": [ - -2717640000, - -1633269600, - -1615129200, - -1601820000, - -1583679600, - -1471788000, - -880210800, - -769395600, - -765388800, - -84380400, - -68659200, - -52930800, - -37209600, - -21481200, - -5760000, - 9968400, - 25689600, - 41418000, - 57744000, - 73472400, - 89193600, - 104922000, - 120643200, - 129114000, - 152092800, - 162378000, - 183542400, - 199270800, - 215596800, - 230720400, - 247046400, - 262774800, - 278496000, - 294224400, - 309945600, - 325674000, - 341395200, - 357123600, - 372844800, - 388573200, - 404899200, - 420022800, - 436348800, - 452077200, - 467798400, - 483526800, - 499248000, - 514976400, - 530697600, - 544611600, - 562147200, - 576061200, - 594201600, - 607510800, - 625651200, - 638960400, - 657100800, - 671014800, - 688550400, - 702464400, - 720000000, - 733914000, - 752054400, - 765363600, - 783504000, - 796813200, - 814953600, - 828867600, - 846403200, - 860317200, - 877852800, - 891766800, - 909302400, - 923216400, - 941356800, - 954666000, - 972806400, - 986115600, - 1004256000, - 1018170000, - 1035705600, - 1049619600, - 1067155200, - 1081069200, - 1099209600, - 1112518800, - 1130659200, - 1143968400, - 1162108800, - 1173603600, - 1194163200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -27889 - }, - { - "index": 4, - "is_dst": false, - "offset": -28800 - }, - { - "index": 8, - "is_dst": true, - "offset": -25200 - }, - { - "index": 12, - "is_dst": false, - "offset": -25200 - }, - { - "index": 16, - "is_dst": true, - "offset": -21600 - }, - { - "index": 20, - "is_dst": true, - "offset": -21600 - }, - { - "index": 24, - "is_dst": true, - "offset": -21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-70c6eef1cba9528e-5199b0504e9a3124.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-70c6eef1cba9528e-5199b0504e9a3124.json deleted file mode 100644 index d0a5127ab..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-70c6eef1cba9528e-5199b0504e9a3124.json +++ /dev/null @@ -1,444 +0,0 @@ -{ - "ids": [ - "africa/casablanca" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "0", - "\u0000", - "+", - "0", - "1", - "\u0000" - ], - "posix": { - "abbr": "+01", - "offset": 3600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2 - ], - "transitions": [ - -1773012580, - -956361600, - -950490000, - -942019200, - -761187600, - -617241600, - -605149200, - -81432000, - -71110800, - 141264000, - 147222000, - 199756800, - 207702000, - 231292800, - 244249200, - 265507200, - 271033200, - 448243200, - 504918000, - 1212278400, - 1220223600, - 1243814400, - 1250809200, - 1272758400, - 1281222000, - 1301788800, - 1312066800, - 1335664800, - 1342749600, - 1345428000, - 1348970400, - 1367114400, - 1373162400, - 1376100000, - 1382839200, - 1396144800, - 1403920800, - 1406944800, - 1414288800, - 1427594400, - 1434247200, - 1437271200, - 1445738400, - 1459044000, - 1465092000, - 1468116000, - 1477792800, - 1490493600, - 1495332000, - 1498960800, - 1509242400, - 1521943200, - 1526176800, - 1529200800, - 1557021600, - 1560045600, - 1587261600, - 1590890400, - 1618106400, - 1621130400, - 1648346400, - 1651975200, - 1679191200, - 1682215200, - 1710036000, - 1713060000, - 1740276000, - 1743904800, - 1771120800, - 1774144800, - 1801965600, - 1804989600, - 1832205600, - 1835834400, - 1863050400, - 1866074400, - 1893290400, - 1896919200, - 1924135200, - 1927159200, - 1954980000, - 1958004000, - 1985220000, - 1988848800, - 2016064800, - 2019088800, - 2046304800, - 2049933600, - 2077149600, - 2080778400, - 2107994400, - 2111018400, - 2138234400, - 2141863200, - 2169079200, - 2172103200, - 2199924000, - 2202948000, - 2230164000, - 2233792800, - 2261008800, - 2264032800, - 2291248800, - 2294877600, - 2322093600, - 2325722400, - 2352938400, - 2355962400, - 2383178400, - 2386807200, - 2414023200, - 2417047200, - 2444868000, - 2447892000, - 2475108000, - 2478736800, - 2505952800, - 2508976800, - 2536192800, - 2539821600, - 2567037600, - 2570666400, - 2597882400, - 2600906400, - 2628122400, - 2631751200, - 2658967200, - 2661991200, - 2689812000, - 2692836000, - 2720052000, - 2723680800, - 2750896800, - 2753920800, - 2781136800, - 2784765600, - 2811981600, - 2815610400, - 2842826400, - 2845850400, - 2873066400, - 2876695200, - 2903911200, - 2906935200, - 2934756000, - 2937780000, - 2964996000, - 2968624800, - 2995840800, - 2998864800, - 3026080800, - 3029709600, - 3056925600, - 3060554400, - 3087770400, - 3090794400, - 3118010400, - 3121639200, - 3148855200, - 3151879200, - 3179700000, - 3182724000, - 3209940000, - 3213568800, - 3240784800, - 3243808800, - 3271024800, - 3274653600, - 3301869600, - 3305498400, - 3332714400, - 3335738400, - 3362954400, - 3366583200, - 3393799200, - 3396823200, - 3424644000, - 3427668000, - 3454884000, - 3458512800, - 3485728800, - 3488752800, - 3515968800, - 3519597600, - 3546813600, - 3549837600, - 3577658400, - 3580682400, - 3607898400, - 3611527200, - 3638743200, - 3641767200, - 3669588000, - 3672612000, - 3699828000, - 3703456800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -1820 - }, - { - "index": 4, - "is_dst": false, - "offset": 0 - }, - { - "index": 8, - "is_dst": true, - "offset": 3600 - }, - { - "index": 8, - "is_dst": false, - "offset": 3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-715448d734f9507a-7302d18d11a181dd.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-715448d734f9507a-7302d18d11a181dd.json deleted file mode 100644 index a75e6e0d2..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-715448d734f9507a-7302d18d11a181dd.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "ids": [ - "america/argentina/tucuman" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 2, - 5, - 4, - 5, - 4, - 6, - 4, - 2, - 4, - 5, - 4, - 5, - 4 - ], - "transitions": [ - -2372096348, - -1567453392, - -1233432000, - -1222981200, - -1205956800, - -1194037200, - -1172865600, - -1162501200, - -1141329600, - -1130965200, - -1109793600, - -1099429200, - -1078257600, - -1067806800, - -1046635200, - -1036270800, - -1015099200, - -1004734800, - -983563200, - -973198800, - -952027200, - -941576400, - -931032000, - -900882000, - -890337600, - -833749200, - -827265600, - -752274000, - -733780800, - -197326800, - -190843200, - -184194000, - -164491200, - -152658000, - -132955200, - -121122000, - -101419200, - -86821200, - -71092800, - -54766800, - -39038400, - -23317200, - -7588800, - 128142000, - 136605600, - 596948400, - 605066400, - 624423600, - 636516000, - 656478000, - 667965600, - 687931200, - 699415200, - 719377200, - 731469600, - 938919600, - 952052400, - 1086058800, - 1087099200, - 1198983600, - 1205632800, - 1224385200, - 1237082400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -15652 - }, - { - "index": 4, - "is_dst": false, - "offset": -15408 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -7200 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7238398358c87edf-a5cb25a6b805007a.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7238398358c87edf-a5cb25a6b805007a.json deleted file mode 100644 index 0bf9b7f2e..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7238398358c87edf-a5cb25a6b805007a.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "ids": [ - "pacific/noumea" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "1", - "\u0000", - "+", - "1", - "2", - "\u0000" - ], - "posix": { - "abbr": "+11", - "offset": 39600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1829387148, - 250002000, - 257342400, - 281451600, - 288878400, - 849366000, - 857228400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 39948 - }, - { - "index": 4, - "is_dst": false, - "offset": 39600 - }, - { - "index": 8, - "is_dst": true, - "offset": 43200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7241c1457aae4357-d2e7c6b0bd66fc1f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7241c1457aae4357-d2e7c6b0bd66fc1f.json deleted file mode 100644 index f8a675372..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7241c1457aae4357-d2e7c6b0bd66fc1f.json +++ /dev/null @@ -1,164 +0,0 @@ -{ - "ids": [ - "asia/baghdad" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "B", - "M", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000", - "+", - "0", - "4", - "\u0000" - ], - "posix": { - "abbr": "+03", - "offset": 10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2524532260, - -1641005856, - 389048400, - 402264000, - 417906000, - 433800000, - 449614800, - 465422400, - 481150800, - 496792800, - 512517600, - 528242400, - 543967200, - 559692000, - 575416800, - 591141600, - 606866400, - 622591200, - 638316000, - 654645600, - 670464000, - 686275200, - 702086400, - 717897600, - 733622400, - 749433600, - 765158400, - 780969600, - 796694400, - 812505600, - 828316800, - 844128000, - 859852800, - 875664000, - 891388800, - 907200000, - 922924800, - 938736000, - 954547200, - 970358400, - 986083200, - 1001894400, - 1017619200, - 1033430400, - 1049155200, - 1064966400, - 1080777600, - 1096588800, - 1112313600, - 1128124800, - 1143849600, - 1159660800, - 1175385600, - 1191196800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 10660 - }, - { - "index": 4, - "is_dst": false, - "offset": 10656 - }, - { - "index": 8, - "is_dst": false, - "offset": 10800 - }, - { - "index": 12, - "is_dst": true, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7285bd926fe2dc70-a041a982b5779b95.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7285bd926fe2dc70-a041a982b5779b95.json deleted file mode 100644 index 64f20be40..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7285bd926fe2dc70-a041a982b5779b95.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "ids": [ - "pacific/niue" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "1", - "1", - "2", - "0", - "\u0000", - "-", - "1", - "1", - "\u0000" - ], - "posix": { - "abbr": "-11", - "offset": -39600, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -543069620, - -173623200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -40780 - }, - { - "index": 4, - "is_dst": false, - "offset": -40800 - }, - { - "index": 10, - "is_dst": false, - "offset": -39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-72be3d5f2c49eb87-de0695b7e0ab50f7.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-72be3d5f2c49eb87-de0695b7e0ab50f7.json deleted file mode 100644 index 59d1bcb62..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-72be3d5f2c49eb87-de0695b7e0ab50f7.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "ids": [ - "pacific/tahiti" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "1", - "0", - "\u0000" - ], - "posix": { - "abbr": "-10", - "offset": -36000, - "transition": null - }, - "transition_types": [ - 1 - ], - "transitions": [ - -1806674504 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -35896 - }, - { - "index": 4, - "is_dst": false, - "offset": -36000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7459e3ffacdde5a6-5b9a96aca6c99104.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7459e3ffacdde5a6-5b9a96aca6c99104.json deleted file mode 100644 index 87c50707d..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7459e3ffacdde5a6-5b9a96aca6c99104.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "ids": [ - "asia/dubai", - "asia/muscat", - "indian/mahe", - "indian/reunion" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "4", - "\u0000" - ], - "posix": { - "abbr": "+04", - "offset": 14400, - "transition": null - }, - "transition_types": [ - 1 - ], - "transitions": [ - -1577936472 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 13272 - }, - { - "index": 4, - "is_dst": false, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7481a99701104a1c-42dd4c78895fac48.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7481a99701104a1c-42dd4c78895fac48.json deleted file mode 100644 index cc821fe7a..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7481a99701104a1c-42dd4c78895fac48.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "ids": [ - "america/recife" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1767217224, - -1206957600, - -1191362400, - -1175374800, - -1159826400, - -633819600, - -622069200, - -602283600, - -591832800, - -570747600, - -560210400, - -539125200, - -531352800, - -191365200, - -184197600, - -155163600, - -150069600, - -128898000, - -121125600, - -99954000, - -89589600, - -68418000, - -57967200, - 499748400, - 511236000, - 530593200, - 540266400, - 562129200, - 571197600, - 592974000, - 602042400, - 624423600, - 634701600, - 938919600, - 951616800, - 970974000, - 971575200, - 1003028400, - 1013911200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -8376 - }, - { - "index": 4, - "is_dst": false, - "offset": -10800 - }, - { - "index": 8, - "is_dst": true, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-748e0c2c22be393e-66902e29ced208b9.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-748e0c2c22be393e-66902e29ced208b9.json deleted file mode 100644 index 29f3bbd09..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-748e0c2c22be393e-66902e29ced208b9.json +++ /dev/null @@ -1,231 +0,0 @@ -{ - "ids": [ - "asia/amman" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "+03", - "offset": 10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3 - ], - "transitions": [ - -1230776624, - 108165600, - 118270800, - 136591200, - 149806800, - 168127200, - 181342800, - 199749600, - 215643600, - 231285600, - 244501200, - 262735200, - 275950800, - 481154400, - 496962000, - 512949600, - 528670800, - 544399200, - 560120400, - 575848800, - 592174800, - 610581600, - 623624400, - 641167200, - 655074000, - 671839200, - 685918800, - 702856800, - 717973200, - 733701600, - 749422800, - 765151200, - 779662800, - 797205600, - 811116000, - 828655200, - 843170400, - 860104800, - 874620000, - 891554400, - 906069600, - 930780000, - 938124000, - 954367200, - 970178400, - 985816800, - 1001628000, - 1017352800, - 1033077600, - 1048802400, - 1066946400, - 1080252000, - 1097791200, - 1112306400, - 1128031200, - 1143756000, - 1161900000, - 1175205600, - 1193349600, - 1206655200, - 1225404000, - 1238104800, - 1256853600, - 1269554400, - 1288303200, - 1301608800, - 1319752800, - 1333058400, - 1387486800, - 1395957600, - 1414706400, - 1427407200, - 1446156000, - 1459461600, - 1477605600, - 1490911200, - 1509055200, - 1522360800, - 1540504800, - 1553810400, - 1571954400, - 1585260000, - 1604008800, - 1616709600, - 1635458400, - 1645740000, - 1666908000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 8624 - }, - { - "index": 4, - "is_dst": false, - "offset": 7200 - }, - { - "index": 8, - "is_dst": true, - "offset": 10800 - }, - { - "index": 13, - "is_dst": false, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-74fc38128e80b92d-ea279bdf64aaaad5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-74fc38128e80b92d-ea279bdf64aaaad5.json deleted file mode 100644 index ce2cbdc61..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-74fc38128e80b92d-ea279bdf64aaaad5.json +++ /dev/null @@ -1,256 +0,0 @@ -{ - "ids": [ - "asia/famagusta" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 14400 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3, - 1 - ], - "transitions": [ - -1518920148, - 166572000, - 182293200, - 200959200, - 213829200, - 228866400, - 243982800, - 260316000, - 276123600, - 291765600, - 307486800, - 323820000, - 338936400, - 354664800, - 370386000, - 386114400, - 401835600, - 417564000, - 433285200, - 449013600, - 465339600, - 481068000, - 496789200, - 512517600, - 528238800, - 543967200, - 559688400, - 575416800, - 591138000, - 606866400, - 622587600, - 638316000, - 654642000, - 670370400, - 686091600, - 701820000, - 717541200, - 733269600, - 748990800, - 764719200, - 780440400, - 796168800, - 811890000, - 828223200, - 843944400, - 859672800, - 875394000, - 891122400, - 909277200, - 922582800, - 941331600, - 954032400, - 972781200, - 985482000, - 1004230800, - 1017536400, - 1035680400, - 1048986000, - 1067130000, - 1080435600, - 1099184400, - 1111885200, - 1130634000, - 1143334800, - 1162083600, - 1174784400, - 1193533200, - 1206838800, - 1224982800, - 1238288400, - 1256432400, - 1269738000, - 1288486800, - 1301187600, - 1319936400, - 1332637200, - 1351386000, - 1364691600, - 1382835600, - 1396141200, - 1414285200, - 1427590800, - 1445734800, - 1459040400, - 1473282000, - 1509238800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 8148 - }, - { - "index": 4, - "is_dst": false, - "offset": 7200 - }, - { - "index": 8, - "is_dst": true, - "offset": 10800 - }, - { - "index": 13, - "is_dst": false, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-754b9e4bdb20aa95-77c7439359a52211.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-754b9e4bdb20aa95-77c7439359a52211.json deleted file mode 100644 index 2ffb3bbeb..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-754b9e4bdb20aa95-77c7439359a52211.json +++ /dev/null @@ -1,191 +0,0 @@ -{ - "ids": [ - "america/fort_wayne", - "america/indiana/indianapolis", - "america/indianapolis", - "us/east-indiana" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "C", - "W", - "T", - "\u0000", - "C", - "P", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": { - "abbr": "EDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 5, - 1, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5 - ], - "transitions": [ - -2717647200, - -1633276800, - -1615136400, - -1601827200, - -1583686800, - -900259200, - -891795600, - -880214400, - -769395600, - -765392400, - -757360800, - -733942800, - -715795200, - -702493200, - -684345600, - -671043600, - -652896000, - -639594000, - -620841600, - -608144400, - -589392000, - -576090000, - -557942400, - -544640400, - -526492800, - -513190800, - -495043200, - -481741200, - -463593600, - -386787600, - -368640000, - -21488400, - -5767200, - 9961200, - 25682400, - 1143961200, - 1162101600, - 1173596400, - 1194156000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -20678 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - }, - { - "index": 20, - "is_dst": false, - "offset": -18000 - }, - { - "index": 24, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-758d7fde6833ba8c-d84310396ec3a33c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-758d7fde6833ba8c-d84310396ec3a33c.json deleted file mode 100644 index b89a0050f..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-758d7fde6833ba8c-d84310396ec3a33c.json +++ /dev/null @@ -1,297 +0,0 @@ -{ - "ids": [ - "asia/jerusalem", - "asia/tel_aviv", - "israel" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "J", - "M", - "T", - "\u0000", - "I", - "S", - "T", - "\u0000", - "I", - "D", - "T", - "\u0000", - "I", - "D", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "IST", - "offset": 7200, - "transition": { - "abbr": "IDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 4, - 4 - ] - }, - "time": 93600 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2840149254, - -1641003640, - -933638400, - -923097600, - -919036800, - -857347200, - -844300800, - -825811200, - -812678400, - -794188800, - -779846400, - -762652800, - -748310400, - -731116800, - -681955200, - -673228800, - -667958400, - -652320000, - -636422400, - -622080000, - -608947200, - -591840000, - -572486400, - -558576000, - -542851200, - -527731200, - -514425600, - -490838400, - -482976000, - -459388800, - -451526400, - -428544000, - -418262400, - -400118400, - -387417600, - 142380000, - 150843600, - 167176800, - 178664400, - 334101600, - 337730400, - 452642400, - 462319200, - 482277600, - 494370000, - 516751200, - 526424400, - 545436000, - 558478800, - 576626400, - 589323600, - 609890400, - 620773200, - 638316000, - 651618000, - 669765600, - 683672400, - 701820000, - 715726800, - 733701600, - 747176400, - 765151200, - 778021200, - 796600800, - 810075600, - 826840800, - 842821200, - 858895200, - 874184400, - 890344800, - 905029200, - 923011200, - 936313200, - 955670400, - 970783200, - 986770800, - 1001282400, - 1017356400, - 1033941600, - 1048806000, - 1065132000, - 1081292400, - 1095804000, - 1112313600, - 1128812400, - 1143763200, - 1159657200, - 1175212800, - 1189897200, - 1206662400, - 1223161200, - 1238112000, - 1254006000, - 1269561600, - 1284246000, - 1301616000, - 1317510000, - 1333065600, - 1348354800, - 1364515200, - 1382828400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 8454 - }, - { - "index": 4, - "is_dst": false, - "offset": 8440 - }, - { - "index": 8, - "is_dst": false, - "offset": 7200 - }, - { - "index": 12, - "is_dst": true, - "offset": 10800 - }, - { - "index": 16, - "is_dst": true, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7599edfd11a3db64-addf895f655cd955.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7599edfd11a3db64-addf895f655cd955.json deleted file mode 100644 index 9e7d8ac35..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7599edfd11a3db64-addf895f655cd955.json +++ /dev/null @@ -1,347 +0,0 @@ -{ - "ids": [ - "america/kentucky/louisville", - "america/louisville" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "C", - "W", - "T", - "\u0000", - "C", - "P", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": { - "abbr": "EDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 2, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5 - ], - "transitions": [ - -2717647200, - -1633276800, - -1615136400, - -1601827200, - -1583686800, - -1535904000, - -1525280400, - -905097600, - -891795600, - -880214400, - -769395600, - -765392400, - -747251940, - -744224400, - -620841600, - -608144400, - -589392000, - -576090000, - -557942400, - -544640400, - -526492800, - -513190800, - -495043200, - -481741200, - -463593600, - -450291600, - -431539200, - -415818000, - -400089600, - -384368400, - -368640000, - -352918800, - -337190400, - -321469200, - -305740800, - -289414800, - -273686400, - -266432400, - -52938000, - -37216800, - -21488400, - -5767200, - 9961200, - 25682400, - 41410800, - 57736800, - 73465200, - 89186400, - 104914800, - 120636000, - 126687600, - 152089200, - 162370800, - 183535200, - 199263600, - 215589600, - 230713200, - 247039200, - 262767600, - 278488800, - 294217200, - 309938400, - 325666800, - 341388000, - 357116400, - 372837600, - 388566000, - 404892000, - 420015600, - 436341600, - 452070000, - 467791200, - 483519600, - 499240800, - 514969200, - 530690400, - 544604400, - 562140000, - 576054000, - 594194400, - 607503600, - 625644000, - 638953200, - 657093600, - 671007600, - 688543200, - 702457200, - 719992800, - 733906800, - 752047200, - 765356400, - 783496800, - 796806000, - 814946400, - 828860400, - 846396000, - 860310000, - 877845600, - 891759600, - 909295200, - 923209200, - 941349600, - 954658800, - 972799200, - 986108400, - 1004248800, - 1018162800, - 1035698400, - 1049612400, - 1067148000, - 1081062000, - 1099202400, - 1112511600, - 1130652000, - 1143961200, - 1162101600, - 1173596400, - 1194156000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -20582 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - }, - { - "index": 20, - "is_dst": false, - "offset": -18000 - }, - { - "index": 24, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-75a476630c4f3c06-e72c659d6de7a6e3.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-75a476630c4f3c06-e72c659d6de7a6e3.json deleted file mode 100644 index bc31213fb..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-75a476630c4f3c06-e72c659d6de7a6e3.json +++ /dev/null @@ -1,149 +0,0 @@ -{ - "ids": [ - "america/araguaina" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1767214032, - -1206957600, - -1191362400, - -1175374800, - -1159826400, - -633819600, - -622069200, - -602283600, - -591832800, - -570747600, - -560210400, - -539125200, - -531352800, - -191365200, - -184197600, - -155163600, - -150069600, - -128898000, - -121125600, - -99954000, - -89589600, - -68418000, - -57967200, - 499748400, - 511236000, - 530593200, - 540266400, - 562129200, - 571197600, - 592974000, - 602042400, - 624423600, - 634701600, - 813726000, - 824004000, - 844570800, - 856058400, - 876106800, - 888717600, - 908074800, - 919562400, - 938919600, - 951616800, - 970974000, - 982461600, - 1003028400, - 1013911200, - 1036292400, - 1045360800, - 1350788400, - 1361066400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -11568 - }, - { - "index": 4, - "is_dst": false, - "offset": -10800 - }, - { - "index": 8, - "is_dst": true, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7622c5c99b380b37-2702b81d3e1cfe0.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7622c5c99b380b37-2702b81d3e1cfe0.json deleted file mode 100644 index 102440aa6..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7622c5c99b380b37-2702b81d3e1cfe0.json +++ /dev/null @@ -1,253 +0,0 @@ -{ - "ids": [ - "europe/chisinau", - "europe/tiraspol" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "B", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "M", - "S", - "K", - "\u0000", - "M", - "S", - "D", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 5, - 6, - 5, - 6, - 5, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3 - ], - "transitions": [ - -2840147720, - -1637114100, - -1213148664, - -1187056800, - -1175479200, - -1159754400, - -1144029600, - -1127700000, - -1111975200, - -1096250400, - -1080525600, - -1064800800, - -1049076000, - -1033351200, - -1017626400, - -1001901600, - -986176800, - -970452000, - -954727200, - -927165600, - -898138800, - -857257200, - -844556400, - -828226800, - -812502000, - -800157600, - 354920400, - 370728000, - 386456400, - 402264000, - 417992400, - 433800000, - 449614800, - 465346800, - 481071600, - 496796400, - 512521200, - 528246000, - 543970800, - 559695600, - 575420400, - 591145200, - 606870000, - 622594800, - 638319600, - 641944800, - 654652800, - 670377600, - 686102400, - 694216800, - 717541200, - 733269600, - 748990800, - 764719200, - 780440400, - 796168800, - 811890000, - 828223200, - 846363600, - 859680000, - 877824000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 6920 - }, - { - "index": 4, - "is_dst": false, - "offset": 6900 - }, - { - "index": 8, - "is_dst": false, - "offset": 6264 - }, - { - "index": 12, - "is_dst": false, - "offset": 7200 - }, - { - "index": 16, - "is_dst": true, - "offset": 10800 - }, - { - "index": 21, - "is_dst": true, - "offset": 7200 - }, - { - "index": 26, - "is_dst": false, - "offset": 3600 - }, - { - "index": 30, - "is_dst": false, - "offset": 10800 - }, - { - "index": 34, - "is_dst": true, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-762fa57e245bdc0d-352c68b251c31c03.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-762fa57e245bdc0d-352c68b251c31c03.json deleted file mode 100644 index a02bf7cc3..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-762fa57e245bdc0d-352c68b251c31c03.json +++ /dev/null @@ -1,54 +0,0 @@ -{ - "ids": [ - "asia/thimbu", - "asia/thimphu" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "5", - "3", - "0", - "\u0000", - "+", - "0", - "6", - "\u0000" - ], - "posix": { - "abbr": "+06", - "offset": 21600, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -706341516, - 560025000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 21516 - }, - { - "index": 4, - "is_dst": false, - "offset": 19800 - }, - { - "index": 10, - "is_dst": false, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-768158f1c3d3089e-dfea3469a05d6339.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-768158f1c3d3089e-dfea3469a05d6339.json deleted file mode 100644 index fc72b191c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-768158f1c3d3089e-dfea3469a05d6339.json +++ /dev/null @@ -1,305 +0,0 @@ -{ - "ids": [ - "america/sitka" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "S", - "T", - "\u0000", - "P", - "W", - "T", - "\u0000", - "P", - "P", - "T", - "\u0000", - "P", - "D", - "T", - "\u0000", - "Y", - "D", - "T", - "\u0000", - "Y", - "S", - "T", - "\u0000", - "A", - "K", - "S", - "T", - "\u0000", - "A", - "K", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AKST", - "offset": -32400, - "transition": { - "abbr": "AKDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 6, - 7, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8 - ], - "transitions": [ - -3225223727, - -2188954727, - -880207200, - -769395600, - -765385200, - -21477600, - -5756400, - 9972000, - 25693200, - 41421600, - 57747600, - 73476000, - 89197200, - 104925600, - 120646800, - 126698400, - 152096400, - 162381600, - 183546000, - 199274400, - 215600400, - 230724000, - 247050000, - 262778400, - 278499600, - 294228000, - 309949200, - 325677600, - 341398800, - 357127200, - 372848400, - 388576800, - 404902800, - 420026400, - 436352400, - 436356000, - 439030800, - 452084400, - 467805600, - 483534000, - 499255200, - 514983600, - 530704800, - 544618800, - 562154400, - 576068400, - 594208800, - 607518000, - 625658400, - 638967600, - 657108000, - 671022000, - 688557600, - 702471600, - 720007200, - 733921200, - 752061600, - 765370800, - 783511200, - 796820400, - 814960800, - 828874800, - 846410400, - 860324400, - 877860000, - 891774000, - 909309600, - 923223600, - 941364000, - 954673200, - 972813600, - 986122800, - 1004263200, - 1018177200, - 1035712800, - 1049626800, - 1067162400, - 1081076400, - 1099216800, - 1112526000, - 1130666400, - 1143975600, - 1162116000, - 1173610800, - 1194170400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 53927 - }, - { - "index": 0, - "is_dst": false, - "offset": -32473 - }, - { - "index": 4, - "is_dst": false, - "offset": -28800 - }, - { - "index": 8, - "is_dst": true, - "offset": -25200 - }, - { - "index": 12, - "is_dst": true, - "offset": -25200 - }, - { - "index": 16, - "is_dst": true, - "offset": -25200 - }, - { - "index": 20, - "is_dst": true, - "offset": -28800 - }, - { - "index": 24, - "is_dst": false, - "offset": -32400 - }, - { - "index": 28, - "is_dst": false, - "offset": -32400 - }, - { - "index": 33, - "is_dst": true, - "offset": -28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7776a42ce751a29e-3bde63b22d9189c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7776a42ce751a29e-3bde63b22d9189c.json deleted file mode 100644 index d7cb34069..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7776a42ce751a29e-3bde63b22d9189c.json +++ /dev/null @@ -1,124 +0,0 @@ -{ - "ids": [ - "america/danmarkshavn" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000", - "G", - "M", - "T", - "\u0000" - ], - "posix": { - "abbr": "GMT", - "offset": 0, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3 - ], - "transitions": [ - -1686091520, - 323845200, - 338950800, - 354675600, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 820465200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -4480 - }, - { - "index": 4, - "is_dst": false, - "offset": -10800 - }, - { - "index": 8, - "is_dst": true, - "offset": -7200 - }, - { - "index": 12, - "is_dst": false, - "offset": 0 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-794b5729aca99b8f-96eba8d93ea036a2.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-794b5729aca99b8f-96eba8d93ea036a2.json deleted file mode 100644 index 3dcfd6128..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-794b5729aca99b8f-96eba8d93ea036a2.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ids": [ - "australia/darwin", - "australia/north" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "C", - "S", - "T", - "\u0000", - "A", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "ACST", - "offset": 34200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2364108200, - -2230189200, - -1672558200, - -1665387000, - -883639800, - -876123000, - -860398200, - -844673400, - -828343800, - -813223800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 31400 - }, - { - "index": 4, - "is_dst": false, - "offset": 32400 - }, - { - "index": 4, - "is_dst": false, - "offset": 34200 - }, - { - "index": 9, - "is_dst": true, - "offset": 37800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-79a67056f030a883-59c34b5443e3cc3d.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-79a67056f030a883-59c34b5443e3cc3d.json deleted file mode 100644 index f87490d4f..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-79a67056f030a883-59c34b5443e3cc3d.json +++ /dev/null @@ -1,41 +0,0 @@ -{ - "ids": [ - "asia/kashgar", - "asia/urumqi" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "6", - "\u0000" - ], - "posix": { - "abbr": "+06", - "offset": 21600, - "transition": null - }, - "transition_types": [ - 1 - ], - "transitions": [ - -1325483420 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 21020 - }, - { - "index": 4, - "is_dst": false, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7a158f0aed162547-7dd30eccd8451b28.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7a158f0aed162547-7dd30eccd8451b28.json deleted file mode 100644 index 1942951bc..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7a158f0aed162547-7dd30eccd8451b28.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "ids": [ - "asia/dushanbe" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "7", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 1 - ], - "transitions": [ - -1441168512, - -1247547600, - 354909600, - 370717200, - 386445600, - 402253200, - 417981600, - 433789200, - 449604000, - 465336000, - 481060800, - 496785600, - 512510400, - 528235200, - 543960000, - 559684800, - 575409600, - 591134400, - 606859200, - 622584000, - 638308800, - 654638400, - 670363200, - 684363600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 16512 - }, - { - "index": 4, - "is_dst": false, - "offset": 18000 - }, - { - "index": 8, - "is_dst": false, - "offset": 21600 - }, - { - "index": 12, - "is_dst": true, - "offset": 25200 - }, - { - "index": 8, - "is_dst": true, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7aa0aebc84b44c67-f375627c14fa2115.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7aa0aebc84b44c67-f375627c14fa2115.json deleted file mode 100644 index ca7f50c17..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7aa0aebc84b44c67-f375627c14fa2115.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "ids": [ - "africa/sao_tome" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "G", - "M", - "T", - "\u0000", - "W", - "A", - "T", - "\u0000" - ], - "posix": { - "abbr": "GMT", - "offset": 0, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2 - ], - "transitions": [ - -2713912016, - -1830384000, - 1514768400, - 1546304400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 1616 - }, - { - "index": 0, - "is_dst": false, - "offset": -2205 - }, - { - "index": 4, - "is_dst": false, - "offset": 0 - }, - { - "index": 8, - "is_dst": false, - "offset": 3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7ba4aaa7dba09bb0-2aa6fb9f2a4ab805.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7ba4aaa7dba09bb0-2aa6fb9f2a4ab805.json deleted file mode 100644 index 08dc06307..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7ba4aaa7dba09bb0-2aa6fb9f2a4ab805.json +++ /dev/null @@ -1,212 +0,0 @@ -{ - "ids": [ - "america/ojinaga" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": { - "abbr": "CDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 2, - 4, - 2, - 4, - 2, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 2 - ], - "transitions": [ - -1514739600, - -1343149200, - -1234807200, - -1220461200, - -1207159200, - -1191344400, - 828864000, - 846399600, - 860313600, - 877849200, - 891766800, - 909302400, - 923216400, - 941356800, - 954666000, - 972806400, - 989139600, - 1001836800, - 1018170000, - 1035705600, - 1049619600, - 1067155200, - 1081069200, - 1099209600, - 1112518800, - 1130659200, - 1143968400, - 1162108800, - 1175418000, - 1193558400, - 1207472400, - 1225008000, - 1238922000, - 1256457600, - 1268557200, - 1289116800, - 1300006800, - 1320566400, - 1331456400, - 1352016000, - 1362906000, - 1383465600, - 1394355600, - 1414915200, - 1425805200, - 1446364800, - 1457859600, - 1478419200, - 1489309200, - 1509868800, - 1520758800, - 1541318400, - 1552208400, - 1572768000, - 1583658000, - 1604217600, - 1615712400, - 1636272000, - 1647162000, - 1667116800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -25060 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": false, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7bce416a66d38e42-793d2b644cd6f3eb.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7bce416a66d38e42-793d2b644cd6f3eb.json deleted file mode 100644 index cab70ab8c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7bce416a66d38e42-793d2b644cd6f3eb.json +++ /dev/null @@ -1,66 +0,0 @@ -{ - "ids": [ - "asia/tokyo", - "japan" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "J", - "S", - "T", - "\u0000", - "J", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "JST", - "offset": 32400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2587712400, - -683802000, - -672310800, - -654771600, - -640861200, - -620298000, - -609411600, - -588848400, - -577962000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 33539 - }, - { - "index": 4, - "is_dst": false, - "offset": 32400 - }, - { - "index": 8, - "is_dst": true, - "offset": 36000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7be16635ecf890b5-5e2d960c86ca6fd.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7be16635ecf890b5-5e2d960c86ca6fd.json deleted file mode 100644 index c45740daf..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7be16635ecf890b5-5e2d960c86ca6fd.json +++ /dev/null @@ -1,210 +0,0 @@ -{ - "ids": [ - "asia/magadan" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "0", - "\u0000", - "+", - "1", - "1", - "\u0000", - "+", - "1", - "2", - "\u0000" - ], - "posix": { - "abbr": "+11", - "offset": 39600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 6, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 7, - 1, - 2 - ], - "transitions": [ - -1441188192, - -1247565600, - 354891600, - 370699200, - 386427600, - 402235200, - 417963600, - 433771200, - 449586000, - 465318000, - 481042800, - 496767600, - 512492400, - 528217200, - 543942000, - 559666800, - 575391600, - 591116400, - 606841200, - 622566000, - 638290800, - 654620400, - 670345200, - 670348800, - 686073600, - 695750400, - 701794800, - 717519600, - 733244400, - 748969200, - 764694000, - 780418800, - 796143600, - 811868400, - 828198000, - 846342000, - 859647600, - 877791600, - 891097200, - 909241200, - 922546800, - 941295600, - 953996400, - 972745200, - 985446000, - 1004194800, - 1017500400, - 1035644400, - 1048950000, - 1067094000, - 1080399600, - 1099148400, - 1111849200, - 1130598000, - 1143298800, - 1162047600, - 1174748400, - 1193497200, - 1206802800, - 1224946800, - 1238252400, - 1256396400, - 1269702000, - 1288450800, - 1301151600, - 1414245600, - 1461427200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 36192 - }, - { - "index": 4, - "is_dst": false, - "offset": 36000 - }, - { - "index": 8, - "is_dst": false, - "offset": 39600 - }, - { - "index": 12, - "is_dst": true, - "offset": 43200 - }, - { - "index": 4, - "is_dst": true, - "offset": 39600 - }, - { - "index": 8, - "is_dst": true, - "offset": 39600 - }, - { - "index": 8, - "is_dst": true, - "offset": 43200 - }, - { - "index": 12, - "is_dst": false, - "offset": 43200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7cca7c8a1af35285-66221a65fff0e11c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7cca7c8a1af35285-66221a65fff0e11c.json deleted file mode 100644 index 7a19d8948..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7cca7c8a1af35285-66221a65fff0e11c.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "ids": [ - "asia/dili" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "8", - "\u0000", - "+", - "0", - "9", - "\u0000" - ], - "posix": { - "abbr": "+09", - "offset": 32400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2 - ], - "transitions": [ - -1830412800, - -879152400, - 199897200, - 969120000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 30140 - }, - { - "index": 4, - "is_dst": false, - "offset": 28800 - }, - { - "index": 8, - "is_dst": false, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7d33da447360d55c-c69632f4c906e5b4.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7d33da447360d55c-c69632f4c906e5b4.json deleted file mode 100644 index a48c8a4b2..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7d33da447360d55c-c69632f4c906e5b4.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "ids": [ - "europe/madrid" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "W", - "E", - "T", - "\u0000", - "W", - "E", - "S", - "T", - "\u0000", - "W", - "E", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3, - 2, - 1, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4 - ], - "transitions": [ - -2177452800, - -1631926800, - -1616889600, - -1601168400, - -1585353600, - -1442451600, - -1427673600, - -1379293200, - -1364774400, - -1348448400, - -1333324800, - -1316390400, - -1301270400, - -1284339600, - -1269820800, - -1026954000, - -1017619200, - -1001898000, - -999482400, - -986090400, - -954115200, - -940208400, - -873079200, - -862621200, - -842839200, - -828320400, - -811389600, - -796870800, - -779940000, - -765421200, - -748490400, - -733971600, - -652327200, - -639018000, - 135122400, - 150246000, - 166572000, - 181695600, - 196812000, - 212540400, - 228866400, - 243990000, - 260326800, - 276051600, - 291776400, - 307501200, - 323830800, - 338950800, - 354675600, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -884 - }, - { - "index": 4, - "is_dst": false, - "offset": 0 - }, - { - "index": 8, - "is_dst": true, - "offset": 3600 - }, - { - "index": 13, - "is_dst": true, - "offset": 7200 - }, - { - "index": 18, - "is_dst": false, - "offset": 3600 - }, - { - "index": 22, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7d7635957a94c158-766ce2696284ce25.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7d7635957a94c158-766ce2696284ce25.json deleted file mode 100644 index 9f8134f57..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7d7635957a94c158-766ce2696284ce25.json +++ /dev/null @@ -1,311 +0,0 @@ -{ - "ids": [ - "america/punta_arenas" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "S", - "M", - "T", - "\u0000", - "-", - "0", - "5", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 3, - 2, - 3, - 4, - 2, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 6 - ], - "transitions": [ - -2524504580, - -1892661435, - -1688410800, - -1619205435, - -1593806400, - -1335986235, - -1335985200, - -1317585600, - -1304362800, - -1286049600, - -1272826800, - -1254513600, - -1241290800, - -1222977600, - -1209754800, - -1191355200, - -1178132400, - -870552000, - -865278000, - -736632000, - -718056000, - -713649600, - -36619200, - -23922000, - -3355200, - 7527600, - 24465600, - 37767600, - 55915200, - 69217200, - 87969600, - 100666800, - 118209600, - 132116400, - 150868800, - 163566000, - 182318400, - 195620400, - 213768000, - 227070000, - 245217600, - 258519600, - 277272000, - 289969200, - 308721600, - 321418800, - 340171200, - 353473200, - 371620800, - 384922800, - 403070400, - 416372400, - 434520000, - 447822000, - 466574400, - 479271600, - 498024000, - 510721200, - 529473600, - 545194800, - 560923200, - 574225200, - 592372800, - 605674800, - 624427200, - 637124400, - 653457600, - 668574000, - 687326400, - 700628400, - 718776000, - 732078000, - 750225600, - 763527600, - 781675200, - 794977200, - 813729600, - 826426800, - 845179200, - 859690800, - 876628800, - 889930800, - 906868800, - 923194800, - 939528000, - 952830000, - 971582400, - 984279600, - 1003032000, - 1015729200, - 1034481600, - 1047178800, - 1065931200, - 1079233200, - 1097380800, - 1110682800, - 1128830400, - 1142132400, - 1160884800, - 1173582000, - 1192334400, - 1206846000, - 1223784000, - 1237086000, - 1255233600, - 1270350000, - 1286683200, - 1304823600, - 1313899200, - 1335668400, - 1346558400, - 1367118000, - 1378612800, - 1398567600, - 1410062400, - 1463281200, - 1471147200, - 1480820400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -17020 - }, - { - "index": 4, - "is_dst": false, - "offset": -16965 - }, - { - "index": 8, - "is_dst": false, - "offset": -18000 - }, - { - "index": 12, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -14400 - }, - { - "index": 16, - "is_dst": true, - "offset": -10800 - }, - { - "index": 16, - "is_dst": false, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-7ec2120f35e8ce46-7aa687d9d0741907.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-7ec2120f35e8ce46-7aa687d9d0741907.json deleted file mode 100644 index b1bf4b72e..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-7ec2120f35e8ce46-7aa687d9d0741907.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "ids": [ - "america/anguilla", - "america/antigua", - "america/aruba", - "america/blanc-sablon", - "america/curacao", - "america/dominica", - "america/grenada", - "america/guadeloupe", - "america/kralendijk", - "america/lower_princes", - "america/marigot", - "america/montserrat", - "america/port_of_spain", - "america/puerto_rico", - "america/st_barthelemy", - "america/st_kitts", - "america/st_lucia", - "america/st_thomas", - "america/st_vincent", - "america/tortola", - "america/virgin" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "S", - "T", - "\u0000", - "A", - "W", - "T", - "\u0000", - "A", - "P", - "T", - "\u0000" - ], - "posix": { - "abbr": "AST", - "offset": -14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 1 - ], - "transitions": [ - -2233035335, - -873057600, - -769395600, - -765399600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -15865 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-806417e5a9e6e27a-f24440da9fb1e04e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-806417e5a9e6e27a-f24440da9fb1e04e.json deleted file mode 100644 index cb79d513c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-806417e5a9e6e27a-f24440da9fb1e04e.json +++ /dev/null @@ -1,268 +0,0 @@ -{ - "ids": [ - "america/scoresbysund" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "2", - "\u0000", - "-", - "0", - "1", - "\u0000", - "+", - "0", - "0", - "\u0000" - ], - "posix": { - "abbr": "-02", - "offset": -7200, - "transition": { - "abbr": "-01", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 0 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": -3600 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 2 - ], - "transitions": [ - -1686090728, - 323841600, - 338961600, - 354679200, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000, - 859683600, - 877827600, - 891133200, - 909277200, - 922582800, - 941331600, - 954032400, - 972781200, - 985482000, - 1004230800, - 1017536400, - 1035680400, - 1048986000, - 1067130000, - 1080435600, - 1099184400, - 1111885200, - 1130634000, - 1143334800, - 1162083600, - 1174784400, - 1193533200, - 1206838800, - 1224982800, - 1238288400, - 1256432400, - 1269738000, - 1288486800, - 1301187600, - 1319936400, - 1332637200, - 1351386000, - 1364691600, - 1382835600, - 1396141200, - 1414285200, - 1427590800, - 1445734800, - 1459040400, - 1477789200, - 1490490000, - 1509238800, - 1521939600, - 1540688400, - 1553994000, - 1572138000, - 1585443600, - 1603587600, - 1616893200, - 1635642000, - 1648342800, - 1667091600, - 1679792400, - 1698541200, - 1711846800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -5272 - }, - { - "index": 4, - "is_dst": false, - "offset": -7200 - }, - { - "index": 8, - "is_dst": true, - "offset": -3600 - }, - { - "index": 12, - "is_dst": true, - "offset": 0 - }, - { - "index": 8, - "is_dst": false, - "offset": -3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-81a0c2bb7c8a41da-f88cf59346e694a5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-81a0c2bb7c8a41da-f88cf59346e694a5.json deleted file mode 100644 index 311efdfd4..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-81a0c2bb7c8a41da-f88cf59346e694a5.json +++ /dev/null @@ -1,122 +0,0 @@ -{ - "ids": [ - "africa/tripoli", - "libya" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 1, - 2, - 3, - 1, - 2, - 3 - ], - "transitions": [ - -1577926364, - -574902000, - -568087200, - -512175600, - -504928800, - -449888400, - -441856800, - -347158800, - 378684000, - 386463600, - 402271200, - 417999600, - 433807200, - 449622000, - 465429600, - 481590000, - 496965600, - 512953200, - 528674400, - 544230000, - 560037600, - 575852400, - 591660000, - 607388400, - 623196000, - 641775600, - 844034400, - 860108400, - 875916000, - 1352505600, - 1364515200, - 1382659200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 3164 - }, - { - "index": 4, - "is_dst": false, - "offset": 3600 - }, - { - "index": 8, - "is_dst": true, - "offset": 7200 - }, - { - "index": 13, - "is_dst": false, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-83ab6f3e7a54b242-c24ad4c6c2bb4824.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-83ab6f3e7a54b242-c24ad4c6c2bb4824.json deleted file mode 100644 index 5294ce048..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-83ab6f3e7a54b242-c24ad4c6c2bb4824.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "ids": [ - "america/argentina/cordoba", - "america/cordoba", - "america/rosario" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 2, - 5, - 4, - 5, - 4, - 6, - 4, - 5, - 4, - 5, - 4 - ], - "transitions": [ - -2372096592, - -1567453392, - -1233432000, - -1222981200, - -1205956800, - -1194037200, - -1172865600, - -1162501200, - -1141329600, - -1130965200, - -1109793600, - -1099429200, - -1078257600, - -1067806800, - -1046635200, - -1036270800, - -1015099200, - -1004734800, - -983563200, - -973198800, - -952027200, - -941576400, - -931032000, - -900882000, - -890337600, - -833749200, - -827265600, - -752274000, - -733780800, - -197326800, - -190843200, - -184194000, - -164491200, - -152658000, - -132955200, - -121122000, - -101419200, - -86821200, - -71092800, - -54766800, - -39038400, - -23317200, - -7588800, - 128142000, - 136605600, - 596948400, - 605066400, - 624423600, - 636516000, - 656478000, - 667965600, - 687931200, - 699415200, - 719377200, - 731469600, - 938919600, - 952052400, - 1198983600, - 1205632800, - 1224385200, - 1237082400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -15408 - }, - { - "index": 4, - "is_dst": false, - "offset": -15408 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -7200 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-843bd4f4a13e936f-55a131c8ab6ba939.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-843bd4f4a13e936f-55a131c8ab6ba939.json deleted file mode 100644 index 2a8cbf870..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-843bd4f4a13e936f-55a131c8ab6ba939.json +++ /dev/null @@ -1,208 +0,0 @@ -{ - "ids": [ - "asia/srednekolymsk" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "0", - "\u0000", - "+", - "1", - "1", - "\u0000", - "+", - "1", - "2", - "\u0000" - ], - "posix": { - "abbr": "+11", - "offset": 39600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 6, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 7, - 2 - ], - "transitions": [ - -1441188892, - -1247565600, - 354891600, - 370699200, - 386427600, - 402235200, - 417963600, - 433771200, - 449586000, - 465318000, - 481042800, - 496767600, - 512492400, - 528217200, - 543942000, - 559666800, - 575391600, - 591116400, - 606841200, - 622566000, - 638290800, - 654620400, - 670345200, - 670348800, - 686073600, - 695750400, - 701794800, - 717519600, - 733244400, - 748969200, - 764694000, - 780418800, - 796143600, - 811868400, - 828198000, - 846342000, - 859647600, - 877791600, - 891097200, - 909241200, - 922546800, - 941295600, - 953996400, - 972745200, - 985446000, - 1004194800, - 1017500400, - 1035644400, - 1048950000, - 1067094000, - 1080399600, - 1099148400, - 1111849200, - 1130598000, - 1143298800, - 1162047600, - 1174748400, - 1193497200, - 1206802800, - 1224946800, - 1238252400, - 1256396400, - 1269702000, - 1288450800, - 1301151600, - 1414245600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 36892 - }, - { - "index": 4, - "is_dst": false, - "offset": 36000 - }, - { - "index": 8, - "is_dst": false, - "offset": 39600 - }, - { - "index": 12, - "is_dst": true, - "offset": 43200 - }, - { - "index": 4, - "is_dst": true, - "offset": 39600 - }, - { - "index": 8, - "is_dst": true, - "offset": 39600 - }, - { - "index": 8, - "is_dst": true, - "offset": 43200 - }, - { - "index": 12, - "is_dst": false, - "offset": 43200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-84569b5d12891e1e-4073c6842e3e27.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-84569b5d12891e1e-4073c6842e3e27.json deleted file mode 100644 index 5bbd3c656..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-84569b5d12891e1e-4073c6842e3e27.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "ids": [ - "africa/bissau" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "1", - "\u0000", - "G", - "M", - "T", - "\u0000" - ], - "posix": { - "abbr": "GMT", - "offset": 0, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -1830380400, - 157770000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -3740 - }, - { - "index": 4, - "is_dst": false, - "offset": -3600 - }, - { - "index": 8, - "is_dst": false, - "offset": 0 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-8494d6017f05e49d-254b8901f64a11d0.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-8494d6017f05e49d-254b8901f64a11d0.json deleted file mode 100644 index f055e592f..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-8494d6017f05e49d-254b8901f64a11d0.json +++ /dev/null @@ -1,206 +0,0 @@ -{ - "ids": [ - "america/indiana/winamac" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "C", - "W", - "T", - "\u0000", - "C", - "P", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": { - "abbr": "EDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 5, - 6, - 5, - 6, - 5, - 1, - 2, - 1, - 6, - 5 - ], - "transitions": [ - -2717647200, - -1633276800, - -1615136400, - -1601827200, - -1583686800, - -880214400, - -769395600, - -765392400, - -747244800, - -733942800, - -715795200, - -702493200, - -684345600, - -671043600, - -652896000, - -639594000, - -620841600, - -608144400, - -589392000, - -576090000, - -557942400, - -544640400, - -526492800, - -513190800, - -495043200, - -481741200, - -463593600, - -447267600, - -431539200, - -415818000, - -400089600, - -386787600, - -368640000, - -355338000, - -337190400, - -323888400, - -305740800, - -292438800, - -273686400, - -21488400, - -5767200, - 9961200, - 25682400, - 1143961200, - 1143964800, - 1162105200, - 1173600000, - 1194156000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -20785 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - }, - { - "index": 20, - "is_dst": false, - "offset": -18000 - }, - { - "index": 24, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-849b49f0ce1dac82-f9465599b14568d2.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-849b49f0ce1dac82-f9465599b14568d2.json deleted file mode 100644 index 96346e97b..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-849b49f0ce1dac82-f9465599b14568d2.json +++ /dev/null @@ -1,219 +0,0 @@ -{ - "ids": [ - "asia/yekaterinburg" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "M", - "T", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 5, - 6, - 2, - 7, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 8, - 3 - ], - "transitions": [ - -1688270553, - -1592610305, - -1247544000, - 354913200, - 370720800, - 386449200, - 402256800, - 417985200, - 433792800, - 449607600, - 465339600, - 481064400, - 496789200, - 512514000, - 528238800, - 543963600, - 559688400, - 575413200, - 591138000, - 606862800, - 622587600, - 638312400, - 654642000, - 670366800, - 670370400, - 686095200, - 695772000, - 701816400, - 717541200, - 733266000, - 748990800, - 764715600, - 780440400, - 796165200, - 811890000, - 828219600, - 846363600, - 859669200, - 877813200, - 891118800, - 909262800, - 922568400, - 941317200, - 954018000, - 972766800, - 985467600, - 1004216400, - 1017522000, - 1035666000, - 1048971600, - 1067115600, - 1080421200, - 1099170000, - 1111870800, - 1130619600, - 1143320400, - 1162069200, - 1174770000, - 1193518800, - 1206824400, - 1224968400, - 1238274000, - 1256418000, - 1269723600, - 1288472400, - 1301173200, - 1414267200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 14553 - }, - { - "index": 4, - "is_dst": false, - "offset": 13505 - }, - { - "index": 8, - "is_dst": false, - "offset": 14400 - }, - { - "index": 12, - "is_dst": false, - "offset": 18000 - }, - { - "index": 16, - "is_dst": true, - "offset": 21600 - }, - { - "index": 8, - "is_dst": true, - "offset": 18000 - }, - { - "index": 12, - "is_dst": true, - "offset": 18000 - }, - { - "index": 12, - "is_dst": true, - "offset": 21600 - }, - { - "index": 16, - "is_dst": false, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-86245dd795582456-b57cd97a921e48e2.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-86245dd795582456-b57cd97a921e48e2.json deleted file mode 100644 index 9f12a3af3..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-86245dd795582456-b57cd97a921e48e2.json +++ /dev/null @@ -1,208 +0,0 @@ -{ - "ids": [ - "asia/omsk" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "7", - "\u0000" - ], - "posix": { - "abbr": "+06", - "offset": 21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 6, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 7, - 2 - ], - "transitions": [ - -1582088010, - -1247547600, - 354909600, - 370717200, - 386445600, - 402253200, - 417981600, - 433789200, - 449604000, - 465336000, - 481060800, - 496785600, - 512510400, - 528235200, - 543960000, - 559684800, - 575409600, - 591134400, - 606859200, - 622584000, - 638308800, - 654638400, - 670363200, - 670366800, - 686091600, - 695768400, - 701812800, - 717537600, - 733262400, - 748987200, - 764712000, - 780436800, - 796161600, - 811886400, - 828216000, - 846360000, - 859665600, - 877809600, - 891115200, - 909259200, - 922564800, - 941313600, - 954014400, - 972763200, - 985464000, - 1004212800, - 1017518400, - 1035662400, - 1048968000, - 1067112000, - 1080417600, - 1099166400, - 1111867200, - 1130616000, - 1143316800, - 1162065600, - 1174766400, - 1193515200, - 1206820800, - 1224964800, - 1238270400, - 1256414400, - 1269720000, - 1288468800, - 1301169600, - 1414263600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 17610 - }, - { - "index": 4, - "is_dst": false, - "offset": 18000 - }, - { - "index": 8, - "is_dst": false, - "offset": 21600 - }, - { - "index": 12, - "is_dst": true, - "offset": 25200 - }, - { - "index": 4, - "is_dst": true, - "offset": 21600 - }, - { - "index": 8, - "is_dst": true, - "offset": 21600 - }, - { - "index": 8, - "is_dst": true, - "offset": 25200 - }, - { - "index": 12, - "is_dst": false, - "offset": 25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-87649f3d059a10f2-f48f0ec47501bcd5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-87649f3d059a10f2-f48f0ec47501bcd5.json deleted file mode 100644 index 90522112f..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-87649f3d059a10f2-f48f0ec47501bcd5.json +++ /dev/null @@ -1,289 +0,0 @@ -{ - "ids": [ - "america/whitehorse", - "canada/yukon" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "Y", - "S", - "T", - "\u0000", - "Y", - "D", - "T", - "\u0000", - "Y", - "W", - "T", - "\u0000", - "Y", - "P", - "T", - "\u0000", - "Y", - "D", - "D", - "T", - "\u0000", - "P", - "S", - "T", - "\u0000", - "P", - "D", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "MST", - "offset": -25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 5, - 1, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 8 - ], - "transitions": [ - -2188997988, - -1632056400, - -1615125600, - -1596978000, - -1583164800, - -880203600, - -769395600, - -765381600, - -147884400, - -131554800, - -121273200, - 325677600, - 341398800, - 357127200, - 372848400, - 388576800, - 404902800, - 420026400, - 436352400, - 452080800, - 467802000, - 483530400, - 499251600, - 514980000, - 530701200, - 544615200, - 562150800, - 576064800, - 594205200, - 607514400, - 625654800, - 638964000, - 657104400, - 671018400, - 688554000, - 702468000, - 720003600, - 733917600, - 752058000, - 765367200, - 783507600, - 796816800, - 814957200, - 828871200, - 846406800, - 860320800, - 877856400, - 891770400, - 909306000, - 923220000, - 941360400, - 954669600, - 972810000, - 986119200, - 1004259600, - 1018173600, - 1035709200, - 1049623200, - 1067158800, - 1081072800, - 1099213200, - 1112522400, - 1130662800, - 1143972000, - 1162112400, - 1173607200, - 1194166800, - 1205056800, - 1225616400, - 1236506400, - 1257066000, - 1268560800, - 1289120400, - 1300010400, - 1320570000, - 1331460000, - 1352019600, - 1362909600, - 1383469200, - 1394359200, - 1414918800, - 1425808800, - 1446368400, - 1457863200, - 1478422800, - 1489312800, - 1509872400, - 1520762400, - 1541322000, - 1552212000, - 1572771600, - 1583661600, - 1604214000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -32412 - }, - { - "index": 4, - "is_dst": false, - "offset": -32400 - }, - { - "index": 8, - "is_dst": true, - "offset": -28800 - }, - { - "index": 12, - "is_dst": true, - "offset": -28800 - }, - { - "index": 16, - "is_dst": true, - "offset": -28800 - }, - { - "index": 20, - "is_dst": true, - "offset": -25200 - }, - { - "index": 25, - "is_dst": false, - "offset": -28800 - }, - { - "index": 29, - "is_dst": true, - "offset": -25200 - }, - { - "index": 33, - "is_dst": false, - "offset": -25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-87ef4dab5f3e3941-c86ed1ccc3e5a080.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-87ef4dab5f3e3941-c86ed1ccc3e5a080.json deleted file mode 100644 index 68590c1ef..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-87ef4dab5f3e3941-c86ed1ccc3e5a080.json +++ /dev/null @@ -1,229 +0,0 @@ -{ - "ids": [ - "america/resolute" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": { - "abbr": "CDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3, - 2, - 1 - ], - "transitions": [ - -704937600, - 73468800, - 89190000, - 104918400, - 120639600, - 136368000, - 152089200, - 167817600, - 183538800, - 199267200, - 215593200, - 230716800, - 247042800, - 262771200, - 278492400, - 294220800, - 309942000, - 325670400, - 341391600, - 357120000, - 372841200, - 388569600, - 404895600, - 420019200, - 436345200, - 452073600, - 467794800, - 483523200, - 499244400, - 514972800, - 530694000, - 544608000, - 562143600, - 576057600, - 594198000, - 607507200, - 625647600, - 638956800, - 657097200, - 671011200, - 688546800, - 702460800, - 719996400, - 733910400, - 752050800, - 765360000, - 783500400, - 796809600, - 814950000, - 828864000, - 846399600, - 860313600, - 877849200, - 891763200, - 909298800, - 923212800, - 941353200, - 954662400, - 972802800, - 986112000, - 1004252400, - 1018166400, - 1035702000, - 1049616000, - 1067151600, - 1081065600, - 1099206000, - 1112515200, - 1130655600, - 1143964800, - 1162105200, - 1173600000, - 1194159600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": false, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-89cd9f4224d1324a-978016530fd7d10a.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-89cd9f4224d1324a-978016530fd7d10a.json deleted file mode 100644 index 5ea62e22b..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-89cd9f4224d1324a-978016530fd7d10a.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ids": [ - "asia/makassar", - "asia/ujung_pandang" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "M", - "T", - "\u0000", - "+", - "0", - "8", - "\u0000", - "+", - "0", - "9", - "\u0000", - "W", - "I", - "T", - "A", - "\u0000" - ], - "posix": { - "abbr": "WITA", - "offset": 28800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4 - ], - "transitions": [ - -1577951856, - -1172908656, - -880272000, - -766054800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 28656 - }, - { - "index": 4, - "is_dst": false, - "offset": 28656 - }, - { - "index": 8, - "is_dst": false, - "offset": 28800 - }, - { - "index": 12, - "is_dst": false, - "offset": 32400 - }, - { - "index": 16, - "is_dst": false, - "offset": 28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-8a0ec5e44a49e44e-561f04494b166c7f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-8a0ec5e44a49e44e-561f04494b166c7f.json deleted file mode 100644 index bf515992a..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-8a0ec5e44a49e44e-561f04494b166c7f.json +++ /dev/null @@ -1,232 +0,0 @@ -{ - "ids": [ - "nz-chat", - "pacific/chatham" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "2", - "1", - "5", - "\u0000", - "+", - "1", - "2", - "4", - "5", - "\u0000", - "+", - "1", - "3", - "4", - "5", - "\u0000" - ], - "posix": { - "abbr": "+1245", - "offset": 45900, - "transition": { - "abbr": "+1345", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 4, - 1, - 0 - ] - }, - "time": 9900 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 9, - 5, - 0 - ] - }, - "time": 13500 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3 - ], - "transitions": [ - -3192437628, - -757426500, - 152632800, - 162309600, - 183477600, - 194968800, - 215532000, - 226418400, - 246981600, - 257868000, - 278431200, - 289317600, - 309880800, - 320767200, - 341330400, - 352216800, - 372780000, - 384271200, - 404834400, - 415720800, - 436284000, - 447170400, - 467733600, - 478620000, - 499183200, - 510069600, - 530632800, - 541519200, - 562082400, - 573573600, - 594136800, - 605023200, - 623772000, - 637682400, - 655221600, - 669132000, - 686671200, - 700581600, - 718120800, - 732636000, - 749570400, - 764085600, - 781020000, - 795535200, - 812469600, - 826984800, - 844524000, - 858434400, - 875973600, - 889884000, - 907423200, - 921938400, - 938872800, - 953388000, - 970322400, - 984837600, - 1002376800, - 1016287200, - 1033826400, - 1047736800, - 1065276000, - 1079791200, - 1096725600, - 1111240800, - 1128175200, - 1142690400, - 1159624800, - 1174140000, - 1191074400, - 1207404000, - 1222524000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 44028 - }, - { - "index": 4, - "is_dst": false, - "offset": 44100 - }, - { - "index": 10, - "is_dst": false, - "offset": 45900 - }, - { - "index": 16, - "is_dst": true, - "offset": 49500 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-8b129baceef3898a-2b8a55dc1e3a09f6.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-8b129baceef3898a-2b8a55dc1e3a09f6.json deleted file mode 100644 index 8d97d6235..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-8b129baceef3898a-2b8a55dc1e3a09f6.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "ids": [ - "america/manaus", - "brazil/west" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-04", - "offset": -14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1767211196, - -1206954000, - -1191358800, - -1175371200, - -1159822800, - -633816000, - -622065600, - -602280000, - -591829200, - -570744000, - -560206800, - -539121600, - -531349200, - -191361600, - -184194000, - -155160000, - -150066000, - -128894400, - -121122000, - -99950400, - -89586000, - -68414400, - -57963600, - 499752000, - 511239600, - 530596800, - 540270000, - 562132800, - 571201200, - 750830400, - 761713200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -14404 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-8b312fc28eb6d503-4392d67c284fea5d.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-8b312fc28eb6d503-4392d67c284fea5d.json deleted file mode 100644 index 6e9b61837..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-8b312fc28eb6d503-4392d67c284fea5d.json +++ /dev/null @@ -1,78 +0,0 @@ -{ - "ids": [ - "pacific/tongatapu" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "2", - "2", - "0", - "\u0000", - "+", - "1", - "3", - "\u0000", - "+", - "1", - "4", - "\u0000" - ], - "posix": { - "abbr": "+13", - "offset": 46800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -767189952, - -284041200, - 939214800, - 953384400, - 973342800, - 980596800, - 1004792400, - 1012046400, - 1478350800, - 1484398800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 44352 - }, - { - "index": 4, - "is_dst": false, - "offset": 44400 - }, - { - "index": 10, - "is_dst": false, - "offset": 46800 - }, - { - "index": 14, - "is_dst": true, - "offset": 50400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-8b944106b8f9db7e-a806a1ac378ab6f1.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-8b944106b8f9db7e-a806a1ac378ab6f1.json deleted file mode 100644 index b8f9e6733..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-8b944106b8f9db7e-a806a1ac378ab6f1.json +++ /dev/null @@ -1,228 +0,0 @@ -{ - "ids": [ - "asia/ust-nera" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "8", - "\u0000", - "+", - "0", - "9", - "\u0000", - "+", - "1", - "2", - "\u0000", - "+", - "1", - "1", - "\u0000", - "+", - "1", - "0", - "\u0000" - ], - "posix": { - "abbr": "+10", - "offset": 36000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 5, - 6, - 7, - 8, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 9, - 4, - 7 - ], - "transitions": [ - -1579426374, - -1247558400, - 354898800, - 370699200, - 386427600, - 402235200, - 417963600, - 433771200, - 449586000, - 465318000, - 481042800, - 496767600, - 512492400, - 528217200, - 543942000, - 559666800, - 575391600, - 591116400, - 606841200, - 622566000, - 638290800, - 654620400, - 670345200, - 670348800, - 686073600, - 695750400, - 701794800, - 717519600, - 733244400, - 748969200, - 764694000, - 780418800, - 796143600, - 811868400, - 828198000, - 846342000, - 859647600, - 877791600, - 891097200, - 909241200, - 922546800, - 941295600, - 953996400, - 972745200, - 985446000, - 1004194800, - 1017500400, - 1035644400, - 1048950000, - 1067094000, - 1080399600, - 1099148400, - 1111849200, - 1130598000, - 1143298800, - 1162047600, - 1174748400, - 1193497200, - 1206802800, - 1224946800, - 1238252400, - 1256396400, - 1269702000, - 1288450800, - 1301151600, - 1315828800, - 1414249200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 34374 - }, - { - "index": 4, - "is_dst": false, - "offset": 28800 - }, - { - "index": 8, - "is_dst": false, - "offset": 32400 - }, - { - "index": 12, - "is_dst": true, - "offset": 43200 - }, - { - "index": 16, - "is_dst": false, - "offset": 39600 - }, - { - "index": 20, - "is_dst": true, - "offset": 39600 - }, - { - "index": 16, - "is_dst": true, - "offset": 39600 - }, - { - "index": 20, - "is_dst": false, - "offset": 36000 - }, - { - "index": 16, - "is_dst": true, - "offset": 43200 - }, - { - "index": 12, - "is_dst": false, - "offset": 43200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-8bf0f826f4c6e05e-c0ba1a0bf66fcd41.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-8bf0f826f4c6e05e-c0ba1a0bf66fcd41.json deleted file mode 100644 index 3d2010fee..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-8bf0f826f4c6e05e-c0ba1a0bf66fcd41.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "ids": [ - "asia/dacca", - "asia/dhaka" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "H", - "M", - "T", - "\u0000", - "+", - "0", - "6", - "3", - "0", - "\u0000", - "+", - "0", - "5", - "3", - "0", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "7", - "\u0000" - ], - "posix": { - "abbr": "+06", - "offset": 21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 4, - 5, - 4 - ], - "transitions": [ - -2524543300, - -891582800, - -872058600, - -862637400, - -576138600, - 1245430800, - 1262278800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 21700 - }, - { - "index": 4, - "is_dst": false, - "offset": 21200 - }, - { - "index": 8, - "is_dst": false, - "offset": 23400 - }, - { - "index": 14, - "is_dst": false, - "offset": 19800 - }, - { - "index": 20, - "is_dst": false, - "offset": 21600 - }, - { - "index": 24, - "is_dst": true, - "offset": 25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-8c010856ba3febe1-794ed33019fb3c76.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-8c010856ba3febe1-794ed33019fb3c76.json deleted file mode 100644 index 501cf6fd4..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-8c010856ba3febe1-794ed33019fb3c76.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "factory" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000" - ], - "posix": { - "abbr": "-00", - "offset": 0, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-8e1e620dda961a84-c314a4d123572dd5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-8e1e620dda961a84-c314a4d123572dd5.json deleted file mode 100644 index b114f12b9..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-8e1e620dda961a84-c314a4d123572dd5.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "ids": [ - "europe/vilnius" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "W", - "M", - "T", - "\u0000", - "K", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "M", - "S", - "K", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "M", - "S", - "D", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 14400 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 5, - 6, - 3, - 6, - 3, - 6, - 5, - 7, - 5, - 7, - 5, - 7, - 5, - 7, - 5, - 7, - 5, - 7, - 5, - 7, - 5, - 7, - 5, - 8, - 4, - 8, - 4, - 8, - 4, - 8, - 4, - 8, - 4, - 8, - 4, - 8, - 4, - 8, - 4, - 8, - 4, - 6, - 3, - 6, - 4 - ], - "transitions": [ - -2840146876, - -1672536240, - -1585100136, - -1561251600, - -1553565600, - -928198800, - -900126000, - -857257200, - -844556400, - -828226800, - -812502000, - -802144800, - 354920400, - 370728000, - 386456400, - 402264000, - 417992400, - 433800000, - 449614800, - 465346800, - 481071600, - 496796400, - 512521200, - 528246000, - 543970800, - 559695600, - 575420400, - 591145200, - 606870000, - 622598400, - 638323200, - 654652800, - 670377600, - 686102400, - 701827200, - 717552000, - 733276800, - 749001600, - 764726400, - 780451200, - 796176000, - 811900800, - 828230400, - 846374400, - 859680000, - 877824000, - 891133200, - 909277200, - 922582800, - 941331600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 6076 - }, - { - "index": 4, - "is_dst": false, - "offset": 5040 - }, - { - "index": 8, - "is_dst": false, - "offset": 5736 - }, - { - "index": 12, - "is_dst": false, - "offset": 3600 - }, - { - "index": 16, - "is_dst": false, - "offset": 7200 - }, - { - "index": 20, - "is_dst": false, - "offset": 10800 - }, - { - "index": 24, - "is_dst": true, - "offset": 7200 - }, - { - "index": 29, - "is_dst": true, - "offset": 14400 - }, - { - "index": 33, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-8e605032c3ce6342-8e8c475fa3f937cd.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-8e605032c3ce6342-8e8c475fa3f937cd.json deleted file mode 100644 index 4a87559e1..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-8e605032c3ce6342-8e8c475fa3f937cd.json +++ /dev/null @@ -1,112 +0,0 @@ -{ - "ids": [ - "america/santarem" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3 - ], - "transitions": [ - -1767212472, - -1206954000, - -1191358800, - -1175371200, - -1159822800, - -633816000, - -622065600, - -602280000, - -591829200, - -570744000, - -560206800, - -539121600, - -531349200, - -191361600, - -184194000, - -155160000, - -150066000, - -128894400, - -121122000, - -99950400, - -89586000, - -68414400, - -57963600, - 499752000, - 511239600, - 530596800, - 540270000, - 562132800, - 571201200, - 1214280000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -13128 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - }, - { - "index": 8, - "is_dst": false, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-8fec2819cc677405-41b20931ae9a4c40.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-8fec2819cc677405-41b20931ae9a4c40.json deleted file mode 100644 index dba688325..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-8fec2819cc677405-41b20931ae9a4c40.json +++ /dev/null @@ -1,307 +0,0 @@ -{ - "ids": [ - "america/juneau" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "S", - "T", - "\u0000", - "P", - "W", - "T", - "\u0000", - "P", - "P", - "T", - "\u0000", - "P", - "D", - "T", - "\u0000", - "Y", - "S", - "T", - "\u0000", - "Y", - "D", - "T", - "\u0000", - "A", - "K", - "S", - "T", - "\u0000", - "A", - "K", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AKST", - "offset": -32400, - "transition": { - "abbr": "AKDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 6, - 7, - 2, - 5, - 2, - 5, - 2, - 5, - 7, - 6, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8 - ], - "transitions": [ - -3225223727, - -2188954939, - -880207200, - -769395600, - -765385200, - -21477600, - -5756400, - 9972000, - 25693200, - 41421600, - 57747600, - 73476000, - 89197200, - 104925600, - 120646800, - 126698400, - 152096400, - 162381600, - 183546000, - 199274400, - 215600400, - 230724000, - 247050000, - 262778400, - 278499600, - 294228000, - 309949200, - 325677600, - 325681200, - 341402400, - 357127200, - 372848400, - 388576800, - 404902800, - 420026400, - 436352400, - 436356000, - 439030800, - 452084400, - 467805600, - 483534000, - 499255200, - 514983600, - 530704800, - 544618800, - 562154400, - 576068400, - 594208800, - 607518000, - 625658400, - 638967600, - 657108000, - 671022000, - 688557600, - 702471600, - 720007200, - 733921200, - 752061600, - 765370800, - 783511200, - 796820400, - 814960800, - 828874800, - 846410400, - 860324400, - 877860000, - 891774000, - 909309600, - 923223600, - 941364000, - 954673200, - 972813600, - 986122800, - 1004263200, - 1018177200, - 1035712800, - 1049626800, - 1067162400, - 1081076400, - 1099216800, - 1112526000, - 1130666400, - 1143975600, - 1162116000, - 1173610800, - 1194170400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 54139 - }, - { - "index": 0, - "is_dst": false, - "offset": -32261 - }, - { - "index": 4, - "is_dst": false, - "offset": -28800 - }, - { - "index": 8, - "is_dst": true, - "offset": -25200 - }, - { - "index": 12, - "is_dst": true, - "offset": -25200 - }, - { - "index": 16, - "is_dst": true, - "offset": -25200 - }, - { - "index": 20, - "is_dst": false, - "offset": -32400 - }, - { - "index": 24, - "is_dst": true, - "offset": -28800 - }, - { - "index": 28, - "is_dst": false, - "offset": -32400 - }, - { - "index": 33, - "is_dst": true, - "offset": -28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-905f75931d73bd53-eab3826a5e584977.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-905f75931d73bd53-eab3826a5e584977.json deleted file mode 100644 index 249fcaba2..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-905f75931d73bd53-eab3826a5e584977.json +++ /dev/null @@ -1,60 +0,0 @@ -{ - "ids": [ - "pacific/galapagos" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "5", - "\u0000", - "-", - "0", - "6", - "\u0000" - ], - "posix": { - "abbr": "-06", - "offset": -21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2 - ], - "transitions": [ - -1230746496, - 504939600, - 722930400, - 728888400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -21504 - }, - { - "index": 4, - "is_dst": false, - "offset": -18000 - }, - { - "index": 8, - "is_dst": false, - "offset": -21600 - }, - { - "index": 4, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-90e0499f7b80422b-73d31a89f022a14f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-90e0499f7b80422b-73d31a89f022a14f.json deleted file mode 100644 index 156ea11d4..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-90e0499f7b80422b-73d31a89f022a14f.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "ids": [ - "america/porto_acre", - "america/rio_branco", - "brazil/acre" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "5", - "\u0000", - "-", - "0", - "4", - "\u0000" - ], - "posix": { - "abbr": "-05", - "offset": -18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 1 - ], - "transitions": [ - -1767209328, - -1206950400, - -1191355200, - -1175367600, - -1159819200, - -633812400, - -622062000, - -602276400, - -591825600, - -570740400, - -560203200, - -539118000, - -531345600, - -191358000, - -184190400, - -155156400, - -150062400, - -128890800, - -121118400, - -99946800, - -89582400, - -68410800, - -57960000, - 499755600, - 511243200, - 530600400, - 540273600, - 562136400, - 571204800, - 1214283600, - 1384056000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -16272 - }, - { - "index": 4, - "is_dst": false, - "offset": -18000 - }, - { - "index": 8, - "is_dst": true, - "offset": -14400 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-916c7f697e6af49e-c0ec219c595d0da3.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-916c7f697e6af49e-c0ec219c595d0da3.json deleted file mode 100644 index ac494b965..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-916c7f697e6af49e-c0ec219c595d0da3.json +++ /dev/null @@ -1,485 +0,0 @@ -{ - "ids": [ - "america/st_johns", - "canada/newfoundland" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "N", - "S", - "T", - "\u0000", - "N", - "D", - "T", - "\u0000", - "N", - "W", - "T", - "\u0000", - "N", - "P", - "T", - "\u0000", - "N", - "D", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "NST", - "offset": -12600, - "transition": { - "abbr": "NDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 5, - 6, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 7, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4 - ], - "transitions": [ - -2713897748, - -1664130548, - -1650137348, - -1632076148, - -1615145348, - -1598650148, - -1590100148, - -1567286948, - -1551565748, - -1535837348, - -1520116148, - -1503782948, - -1488666548, - -1472333348, - -1457216948, - -1440883748, - -1425767348, - -1409434148, - -1394317748, - -1377984548, - -1362263348, - -1346534948, - -1330813748, - -1314480548, - -1299364148, - -1283030948, - -1267914548, - -1251581348, - -1236464948, - -1220131748, - -1205015348, - -1188682148, - -1172960948, - -1156627748, - -1141511348, - -1125178148, - -1110061748, - -1096921748, - -1093728600, - -1078612200, - -1061670600, - -1048973400, - -1030221000, - -1017523800, - -998771400, - -986074200, - -966717000, - -954624600, - -935267400, - -922570200, - -903817800, - -891120600, - -872368200, - -769395600, - -765401400, - -746044200, - -733347000, - -714594600, - -701897400, - -683145000, - -670447800, - -651695400, - -638998200, - -619641000, - -606943800, - -589401000, - -576099000, - -557951400, - -544649400, - -526501800, - -513199800, - -495052200, - -481750200, - -463602600, - -450300600, - -431548200, - -418246200, - -400098600, - -386796600, - -368649000, - -355347000, - -337199400, - -323897400, - -305749800, - -289423800, - -273695400, - -257974200, - -242245800, - -226524600, - -210796200, - -195075000, - -179346600, - -163625400, - -147897000, - -131571000, - -116447400, - -100121400, - -84393000, - -68671800, - -52943400, - -37222200, - -21493800, - -5772600, - 9955800, - 25677000, - 41405400, - 57731400, - 73459800, - 89181000, - 104909400, - 120630600, - 136359000, - 152080200, - 167808600, - 183529800, - 199258200, - 215584200, - 230707800, - 247033800, - 262762200, - 278483400, - 294211800, - 309933000, - 325661400, - 341382600, - 357111000, - 372832200, - 388560600, - 404886600, - 420010200, - 436336200, - 452064600, - 467785800, - 483514200, - 499235400, - 514963800, - 530685000, - 544591860, - 562127460, - 576041460, - 594178260, - 607491060, - 625631460, - 638940660, - 657081060, - 670995060, - 688530660, - 702444660, - 719980260, - 733894260, - 752034660, - 765343860, - 783484260, - 796793460, - 814933860, - 828847860, - 846383460, - 860297460, - 877833060, - 891747060, - 909282660, - 923196660, - 941337060, - 954646260, - 972786660, - 986095860, - 1004236260, - 1018150260, - 1035685860, - 1049599860, - 1067135460, - 1081049460, - 1099189860, - 1112499060, - 1130639460, - 1143948660, - 1162089060, - 1173583860, - 1194143460, - 1205033460, - 1225593060, - 1236483060, - 1257042660, - 1268537460, - 1289097060, - 1299987060 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -12652 - }, - { - "index": 4, - "is_dst": false, - "offset": -12652 - }, - { - "index": 8, - "is_dst": true, - "offset": -9052 - }, - { - "index": 4, - "is_dst": false, - "offset": -12600 - }, - { - "index": 8, - "is_dst": true, - "offset": -9000 - }, - { - "index": 12, - "is_dst": true, - "offset": -9000 - }, - { - "index": 16, - "is_dst": true, - "offset": -9000 - }, - { - "index": 20, - "is_dst": true, - "offset": -5400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-93ba37d78a84866e-4c82d79d9fbe1b20.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-93ba37d78a84866e-4c82d79d9fbe1b20.json deleted file mode 100644 index 48783a263..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-93ba37d78a84866e-4c82d79d9fbe1b20.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "ids": [ - "america/belem" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1767213964, - -1206957600, - -1191362400, - -1175374800, - -1159826400, - -633819600, - -622069200, - -602283600, - -591832800, - -570747600, - -560210400, - -539125200, - -531352800, - -191365200, - -184197600, - -155163600, - -150069600, - -128898000, - -121125600, - -99954000, - -89589600, - -68418000, - -57967200, - 499748400, - 511236000, - 530593200, - 540266400, - 562129200, - 571197600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -11636 - }, - { - "index": 4, - "is_dst": false, - "offset": -10800 - }, - { - "index": 8, - "is_dst": true, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-94731e7a96e16727-f7e568c187e89260.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-94731e7a96e16727-f7e568c187e89260.json deleted file mode 100644 index 353721666..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-94731e7a96e16727-f7e568c187e89260.json +++ /dev/null @@ -1,109 +0,0 @@ -{ - "ids": [ - "asia/chongqing", - "asia/chungking", - "asia/harbin", - "asia/shanghai", - "prc" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": 28800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2177481943, - -1600675200, - -1585904400, - -933667200, - -922093200, - -908870400, - -888829200, - -881049600, - -767869200, - -745833600, - -733827600, - -716889600, - -699613200, - -683884800, - -670669200, - -652348800, - -650019600, - 515527200, - 527014800, - 545162400, - 558464400, - 577216800, - 589914000, - 608666400, - 621968400, - 640116000, - 653418000, - 671565600, - 684867600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 29143 - }, - { - "index": 4, - "is_dst": false, - "offset": 28800 - }, - { - "index": 8, - "is_dst": true, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-95eb641ddc74061f-48fa3b19778decc4.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-95eb641ddc74061f-48fa3b19778decc4.json deleted file mode 100644 index d0448237b..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-95eb641ddc74061f-48fa3b19778decc4.json +++ /dev/null @@ -1,211 +0,0 @@ -{ - "ids": [ - "america/mexico_city", - "mexico/general" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "C", - "W", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 2, - 4, - 2, - 4, - 2, - 5, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2 - ], - "transitions": [ - -1514739600, - -1343149200, - -1234807200, - -1220461200, - -1207159200, - -1191344400, - -975261600, - -963169200, - -917114400, - -907354800, - -821901600, - -810068400, - -627501600, - -612990000, - 828864000, - 846399600, - 860313600, - 877849200, - 891763200, - 909298800, - 923212800, - 941353200, - 954662400, - 972802800, - 989136000, - 1001833200, - 1018166400, - 1035702000, - 1049616000, - 1067151600, - 1081065600, - 1099206000, - 1112515200, - 1130655600, - 1143964800, - 1162105200, - 1175414400, - 1193554800, - 1207468800, - 1225004400, - 1238918400, - 1256454000, - 1270368000, - 1288508400, - 1301817600, - 1319958000, - 1333267200, - 1351407600, - 1365321600, - 1382857200, - 1396771200, - 1414306800, - 1428220800, - 1445756400, - 1459670400, - 1477810800, - 1491120000, - 1509260400, - 1522569600, - 1540710000, - 1554624000, - 1572159600, - 1586073600, - 1603609200, - 1617523200, - 1635663600, - 1648972800, - 1667113200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -23796 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": false, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - }, - { - "index": 20, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-96a7050f6c4d3e34-df2aeb55ad5efcf6.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-96a7050f6c4d3e34-df2aeb55ad5efcf6.json deleted file mode 100644 index e8e43d88d..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-96a7050f6c4d3e34-df2aeb55ad5efcf6.json +++ /dev/null @@ -1,395 +0,0 @@ -{ - "ids": [ - "eire", - "europe/dublin" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "D", - "M", - "T", - "\u0000", - "I", - "S", - "T", - "\u0000", - "G", - "M", - "T", - "\u0000", - "B", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "GMT", - "offset": 0, - "transition": { - "abbr": "IST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 3600 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 6, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3 - ], - "transitions": [ - -2821649679, - -1691962479, - -1680471279, - -1664143200, - -1650146400, - -1633903200, - -1617487200, - -1601848800, - -1586037600, - -1570399200, - -1552168800, - -1538344800, - -1522533600, - -1507500000, - -1490565600, - -1473631200, - -1460930400, - -1442786400, - -1428876000, - -1410732000, - -1396216800, - -1379282400, - -1364767200, - -1348437600, - -1333317600, - -1315778400, - -1301263200, - -1284328800, - -1269813600, - -1253484000, - -1238364000, - -1221429600, - -1206914400, - -1189980000, - -1175464800, - -1159135200, - -1143410400, - -1126476000, - -1111960800, - -1095631200, - -1080511200, - -1063576800, - -1049061600, - -1032127200, - -1017612000, - -1001282400, - -986162400, - -969228000, - -950479200, - -942012000, - -733356000, - -719445600, - -699487200, - -684972000, - -668037600, - -654732000, - -636588000, - -622072800, - -605743200, - -590623200, - -574293600, - -558568800, - -542239200, - -527119200, - -512604000, - -496274400, - -481154400, - -464220000, - -449704800, - -432165600, - -417650400, - -401320800, - -386200800, - -369266400, - -354751200, - -337816800, - -323301600, - -306972000, - -291852000, - -276732000, - -257983200, - -245282400, - -226533600, - -213228000, - -195084000, - -182383200, - -163634400, - -150933600, - -132184800, - -119484000, - -100735200, - -88034400, - -68680800, - -59004000, - -37242000, - 57722400, - 69818400, - 89172000, - 101268000, - 120621600, - 132717600, - 152071200, - 164167200, - 183520800, - 196221600, - 214970400, - 227671200, - 246420000, - 259120800, - 278474400, - 290570400, - 309924000, - 322020000, - 341373600, - 354675600, - 372819600, - 386125200, - 404269200, - 417574800, - 435718800, - 449024400, - 467773200, - 481078800, - 499222800, - 512528400, - 530672400, - 543978000, - 562122000, - 575427600, - 593571600, - 606877200, - 625626000, - 638326800, - 657075600, - 670381200, - 688525200, - 701830800, - 719974800, - 733280400, - 751424400, - 764730000, - 782874000, - 796179600, - 814323600, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -1521 - }, - { - "index": 4, - "is_dst": false, - "offset": -1521 - }, - { - "index": 8, - "is_dst": true, - "offset": 2079 - }, - { - "index": 12, - "is_dst": false, - "offset": 0 - }, - { - "index": 16, - "is_dst": true, - "offset": 3600 - }, - { - "index": 8, - "is_dst": true, - "offset": 3600 - }, - { - "index": 8, - "is_dst": false, - "offset": 3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-98fb8731f72daeb6-ed03dfe4cb71dab0.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-98fb8731f72daeb6-ed03dfe4cb71dab0.json deleted file mode 100644 index f07717656..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-98fb8731f72daeb6-ed03dfe4cb71dab0.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "ids": [ - "america/jamaica", - "jamaica" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "K", - "M", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2524503170, - -1827687170, - 126687600, - 152085600, - 162370800, - 183535200, - 199263600, - 215589600, - 230713200, - 247039200, - 262767600, - 278488800, - 294217200, - 309938400, - 325666800, - 341388000, - 357116400, - 372837600, - 388566000, - 404892000, - 420015600, - 436341600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -18430 - }, - { - "index": 4, - "is_dst": false, - "offset": -18430 - }, - { - "index": 8, - "is_dst": false, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-98fc8236fccd3576-5cfd66cadca6c4e9.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-98fc8236fccd3576-5cfd66cadca6c4e9.json deleted file mode 100644 index b6699ab43..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-98fc8236fccd3576-5cfd66cadca6c4e9.json +++ /dev/null @@ -1,207 +0,0 @@ -{ - "ids": [ - "asia/novosibirsk" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "7", - "\u0000", - "+", - "0", - "8", - "\u0000" - ], - "posix": { - "abbr": "+07", - "offset": 25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 6, - 3, - 2, - 3, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 2, - 1, - 2 - ], - "transitions": [ - -1579476700, - -1247551200, - 354906000, - 370713600, - 386442000, - 402249600, - 417978000, - 433785600, - 449600400, - 465332400, - 481057200, - 496782000, - 512506800, - 528231600, - 543956400, - 559681200, - 575406000, - 591130800, - 606855600, - 622580400, - 638305200, - 654634800, - 670359600, - 670363200, - 686088000, - 695764800, - 701809200, - 717534000, - 733258800, - 738086400, - 748987200, - 764712000, - 780436800, - 796161600, - 811886400, - 828216000, - 846360000, - 859665600, - 877809600, - 891115200, - 909259200, - 922564800, - 941313600, - 954014400, - 972763200, - 985464000, - 1004212800, - 1017518400, - 1035662400, - 1048968000, - 1067112000, - 1080417600, - 1099166400, - 1111867200, - 1130616000, - 1143316800, - 1162065600, - 1174766400, - 1193515200, - 1206820800, - 1224964800, - 1238270400, - 1256414400, - 1269720000, - 1288468800, - 1301169600, - 1414263600, - 1469304000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 19900 - }, - { - "index": 4, - "is_dst": false, - "offset": 21600 - }, - { - "index": 8, - "is_dst": false, - "offset": 25200 - }, - { - "index": 12, - "is_dst": true, - "offset": 28800 - }, - { - "index": 4, - "is_dst": true, - "offset": 25200 - }, - { - "index": 8, - "is_dst": true, - "offset": 25200 - }, - { - "index": 8, - "is_dst": true, - "offset": 28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-996739b4c558f747-47c3d2a38375ae0c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-996739b4c558f747-47c3d2a38375ae0c.json deleted file mode 100644 index fafc2f6f0..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-996739b4c558f747-47c3d2a38375ae0c.json +++ /dev/null @@ -1,95 +0,0 @@ -{ - "ids": [ - "asia/colombo" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "M", - "T", - "\u0000", - "+", - "0", - "5", - "3", - "0", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "6", - "3", - "0", - "\u0000" - ], - "posix": { - "abbr": "+0530", - "offset": 19800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 5, - 6, - 2 - ], - "transitions": [ - -2840159964, - -2019705572, - -883287000, - -862639200, - -764051400, - 832962600, - 846266400, - 1145039400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 19164 - }, - { - "index": 4, - "is_dst": false, - "offset": 19172 - }, - { - "index": 8, - "is_dst": false, - "offset": 19800 - }, - { - "index": 14, - "is_dst": true, - "offset": 21600 - }, - { - "index": 18, - "is_dst": true, - "offset": 23400 - }, - { - "index": 18, - "is_dst": false, - "offset": 23400 - }, - { - "index": 14, - "is_dst": false, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-99cdd052561a0879-453a7640c899c432.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-99cdd052561a0879-453a7640c899c432.json deleted file mode 100644 index 3e59aca50..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-99cdd052561a0879-453a7640c899c432.json +++ /dev/null @@ -1,186 +0,0 @@ -{ - "ids": [ - "africa/windhoek" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "1", - "3", - "0", - "\u0000", - "S", - "A", - "S", - "T", - "\u0000", - "C", - "A", - "T", - "\u0000", - "W", - "A", - "T", - "\u0000" - ], - "posix": { - "abbr": "CAT", - "offset": 7200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 4, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 4 - ], - "transitions": [ - -2458170504, - -2109288600, - -860976000, - -845254800, - 637970400, - 764200800, - 778640400, - 796780800, - 810090000, - 828835200, - 841539600, - 860284800, - 873594000, - 891734400, - 905043600, - 923184000, - 936493200, - 954633600, - 967942800, - 986083200, - 999392400, - 1018137600, - 1030842000, - 1049587200, - 1062896400, - 1081036800, - 1094346000, - 1112486400, - 1125795600, - 1143936000, - 1157245200, - 1175385600, - 1188694800, - 1207440000, - 1220749200, - 1238889600, - 1252198800, - 1270339200, - 1283648400, - 1301788800, - 1315098000, - 1333238400, - 1346547600, - 1365292800, - 1377997200, - 1396742400, - 1410051600, - 1428192000, - 1441501200, - 1459641600, - 1472950800, - 1491091200, - 1504400400, - 1508796000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 4104 - }, - { - "index": 4, - "is_dst": false, - "offset": 5400 - }, - { - "index": 10, - "is_dst": false, - "offset": 7200 - }, - { - "index": 10, - "is_dst": true, - "offset": 10800 - }, - { - "index": 15, - "is_dst": false, - "offset": 7200 - }, - { - "index": 19, - "is_dst": false, - "offset": 3600 - }, - { - "index": 15, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-99ce61a08c1199af-9158ca2a0d4ddb4d.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-99ce61a08c1199af-9158ca2a0d4ddb4d.json deleted file mode 100644 index 99f54edad..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-99ce61a08c1199af-9158ca2a0d4ddb4d.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "ids": [ - "america/thule" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "S", - "T", - "\u0000", - "A", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AST", - "offset": -14400, - "transition": { - "abbr": "ADT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1686079492, - 670399200, - 686120400, - 701848800, - 717570000, - 733903200, - 752043600, - 765352800, - 783493200, - 796802400, - 814942800, - 828856800, - 846392400, - 860306400, - 877842000, - 891756000, - 909291600, - 923205600, - 941346000, - 954655200, - 972795600, - 986104800, - 1004245200, - 1018159200, - 1035694800, - 1049608800, - 1067144400, - 1081058400, - 1099198800, - 1112508000, - 1130648400, - 1143957600, - 1162098000, - 1173592800, - 1194152400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -16508 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-9a2f8cce797280e8-daeea94ec3c0d64a.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-9a2f8cce797280e8-daeea94ec3c0d64a.json deleted file mode 100644 index 2baa6b554..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-9a2f8cce797280e8-daeea94ec3c0d64a.json +++ /dev/null @@ -1,216 +0,0 @@ -{ - "ids": [ - "asia/sakhalin" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "9", - "\u0000", - "+", - "1", - "1", - "\u0000", - "+", - "1", - "2", - "\u0000", - "+", - "1", - "0", - "\u0000" - ], - "posix": { - "abbr": "+11", - "offset": 39600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 6, - 7, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 2, - 6, - 2 - ], - "transitions": [ - -2031039048, - -768560400, - 354891600, - 370699200, - 386427600, - 402235200, - 417963600, - 433771200, - 449586000, - 465318000, - 481042800, - 496767600, - 512492400, - 528217200, - 543942000, - 559666800, - 575391600, - 591116400, - 606841200, - 622566000, - 638290800, - 654620400, - 670345200, - 670348800, - 686073600, - 695750400, - 701794800, - 717519600, - 733244400, - 748969200, - 764694000, - 780418800, - 796143600, - 811868400, - 828198000, - 846342000, - 859647600, - 859651200, - 877795200, - 891100800, - 909244800, - 922550400, - 941299200, - 954000000, - 972748800, - 985449600, - 1004198400, - 1017504000, - 1035648000, - 1048953600, - 1067097600, - 1080403200, - 1099152000, - 1111852800, - 1130601600, - 1143302400, - 1162051200, - 1174752000, - 1193500800, - 1206806400, - 1224950400, - 1238256000, - 1256400000, - 1269705600, - 1288454400, - 1301155200, - 1414249200, - 1459008000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 34248 - }, - { - "index": 4, - "is_dst": false, - "offset": 32400 - }, - { - "index": 8, - "is_dst": false, - "offset": 39600 - }, - { - "index": 12, - "is_dst": true, - "offset": 43200 - }, - { - "index": 16, - "is_dst": true, - "offset": 39600 - }, - { - "index": 8, - "is_dst": true, - "offset": 39600 - }, - { - "index": 16, - "is_dst": false, - "offset": 36000 - }, - { - "index": 8, - "is_dst": true, - "offset": 43200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-9af11812af42f7cb-ea58c8a7a84568cf.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-9af11812af42f7cb-ea58c8a7a84568cf.json deleted file mode 100644 index aeccfa725..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-9af11812af42f7cb-ea58c8a7a84568cf.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "ids": [ - "australia/broken_hill", - "australia/yancowinna" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "E", - "S", - "T", - "\u0000", - "A", - "C", - "S", - "T", - "\u0000", - "A", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "ACST", - "offset": 34200, - "transition": { - "abbr": "ACDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 4, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 1, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4 - ], - "transitions": [ - -2364110748, - -2314951200, - -2230189200, - -1672558200, - -1665387000, - -883639800, - -876123000, - -860398200, - -844673400, - -828343800, - -813223800, - 57688200, - 67969800, - 89137800, - 100024200, - 120587400, - 131473800, - 152037000, - 162923400, - 183486600, - 194977800, - 215541000, - 226427400, - 246990600, - 257877000, - 278440200, - 289326600, - 309889800, - 320776200, - 341339400, - 352225800, - 372789000, - 386699400, - 404843400, - 415729800, - 436293000, - 447179400, - 467742600, - 478629000, - 499192200, - 511288200, - 530037000, - 542737800, - 562091400, - 574792200, - 594145800, - 606241800, - 625595400, - 636481800, - 657045000, - 667931400, - 688494600, - 699381000, - 719944200, - 731435400, - 751998600, - 762885000, - 783448200, - 794334600, - 814897800, - 828203400, - 846347400, - 859653000, - 877797000, - 891102600, - 909246600, - 922552200, - 941301000, - 954001800, - 972750600, - 985451400, - 1004200200, - 1017505800, - 1035649800, - 1048955400, - 1067099400, - 1080405000, - 1099153800, - 1111854600, - 1130603400, - 1143909000, - 1162053000, - 1174753800, - 1193502600, - 1207413000, - 1223137800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 33948 - }, - { - "index": 4, - "is_dst": false, - "offset": 36000 - }, - { - "index": 9, - "is_dst": false, - "offset": 32400 - }, - { - "index": 9, - "is_dst": false, - "offset": 34200 - }, - { - "index": 14, - "is_dst": true, - "offset": 37800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-9afb6f21d74a3dbd-a77eabd0a5abcd83.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-9afb6f21d74a3dbd-a77eabd0a5abcd83.json deleted file mode 100644 index 258dcb310..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-9afb6f21d74a3dbd-a77eabd0a5abcd83.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt+6" - ], - "tzif": { - "designations": [ - "-", - "0", - "6", - "\u0000" - ], - "posix": { - "abbr": "-06", - "offset": -21600, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-9b4491a5a7233cc3-f9e28623cf792cec.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-9b4491a5a7233cc3-f9e28623cf792cec.json deleted file mode 100644 index 43f2c2bee..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-9b4491a5a7233cc3-f9e28623cf792cec.json +++ /dev/null @@ -1,238 +0,0 @@ -{ - "ids": [ - "america/inuvik" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000", - "P", - "S", - "T", - "\u0000", - "P", - "D", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "MST", - "offset": -25200, - "transition": { - "abbr": "MDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4 - ], - "transitions": [ - -536457600, - 73476000, - 89197200, - 104925600, - 120646800, - 136375200, - 152096400, - 167824800, - 183546000, - 199274400, - 215600400, - 230724000, - 247050000, - 262778400, - 278499600, - 294228000, - 309945600, - 325674000, - 341395200, - 357123600, - 372844800, - 388573200, - 404899200, - 420022800, - 436348800, - 452077200, - 467798400, - 483526800, - 499248000, - 514976400, - 530697600, - 544611600, - 562147200, - 576061200, - 594201600, - 607510800, - 625651200, - 638960400, - 657100800, - 671014800, - 688550400, - 702464400, - 720000000, - 733914000, - 752054400, - 765363600, - 783504000, - 796813200, - 814953600, - 828867600, - 846403200, - 860317200, - 877852800, - 891766800, - 909302400, - 923216400, - 941356800, - 954666000, - 972806400, - 986115600, - 1004256000, - 1018170000, - 1035705600, - 1049619600, - 1067155200, - 1081069200, - 1099209600, - 1112518800, - 1130659200, - 1143968400, - 1162108800, - 1173603600, - 1194163200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - }, - { - "index": 4, - "is_dst": false, - "offset": -28800 - }, - { - "index": 8, - "is_dst": true, - "offset": -25200 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": false, - "offset": -25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-9bd926151a997a3e-6a4f459925921a24.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-9bd926151a997a3e-6a4f459925921a24.json deleted file mode 100644 index 00713703b..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-9bd926151a997a3e-6a4f459925921a24.json +++ /dev/null @@ -1,269 +0,0 @@ -{ - "ids": [ - "america/asuncion" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 3 - ], - "transitions": [ - -2524507760, - -1206389360, - 86760000, - 134017200, - 181368000, - 194497200, - 212990400, - 226033200, - 244526400, - 257569200, - 276062400, - 291783600, - 307598400, - 323406000, - 339220800, - 354942000, - 370756800, - 386478000, - 402292800, - 418014000, - 433828800, - 449636400, - 465451200, - 481172400, - 496987200, - 512708400, - 528523200, - 544244400, - 560059200, - 575866800, - 591681600, - 607402800, - 625032000, - 638938800, - 654753600, - 670474800, - 686721600, - 699418800, - 718257600, - 733546800, - 749448000, - 762318000, - 780984000, - 793767600, - 812520000, - 825649200, - 844574400, - 856666800, - 876024000, - 888721200, - 907473600, - 920775600, - 938923200, - 952225200, - 970372800, - 983674800, - 1002427200, - 1018148400, - 1030852800, - 1049598000, - 1062907200, - 1081047600, - 1097985600, - 1110682800, - 1129435200, - 1142132400, - 1160884800, - 1173582000, - 1192939200, - 1205031600, - 1224388800, - 1236481200, - 1255838400, - 1270954800, - 1286078400, - 1302404400, - 1317528000, - 1333854000, - 1349582400, - 1364094000, - 1381032000, - 1395543600, - 1412481600, - 1426993200, - 1443931200, - 1459047600, - 1475380800, - 1490497200, - 1506830400, - 1521946800, - 1538884800, - 1553396400, - 1570334400, - 1584846000, - 1601784000, - 1616900400, - 1633233600, - 1648350000, - 1664683200, - 1679799600, - 1696132800, - 1711249200, - 1728187200, - 1728961200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -13840 - }, - { - "index": 4, - "is_dst": false, - "offset": -13840 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-9c7ac303ad5d20d8-c5c0d8a5e3082d46.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-9c7ac303ad5d20d8-c5c0d8a5e3082d46.json deleted file mode 100644 index 187bc0742..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-9c7ac303ad5d20d8-c5c0d8a5e3082d46.json +++ /dev/null @@ -1,223 +0,0 @@ -{ - "ids": [ - "europe/tallinn" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "T", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "M", - "S", - "K", - "\u0000", - "M", - "S", - "D", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 14400 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 1, - 4, - 5, - 3, - 2, - 3, - 2, - 3, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 7, - 4, - 7, - 4, - 7, - 4, - 7, - 4, - 7, - 4, - 7, - 4, - 7, - 4, - 7, - 4, - 7, - 4, - 7, - 4, - 7, - 4 - ], - "transitions": [ - -2840146740, - -1638322740, - -1632006000, - -1618700400, - -1593824400, - -1535938740, - -927943200, - -892954800, - -857257200, - -844556400, - -828226800, - -812502000, - -797652000, - 354920400, - 370728000, - 386456400, - 402264000, - 417992400, - 433800000, - 449614800, - 465346800, - 481071600, - 496796400, - 512521200, - 528246000, - 543970800, - 559695600, - 575420400, - 591145200, - 606870000, - 622598400, - 638323200, - 654652800, - 670377600, - 686102400, - 701827200, - 717552000, - 733276800, - 749001600, - 764726400, - 780451200, - 796176000, - 811900800, - 828230400, - 846374400, - 859680000, - 877824000, - 891129600, - 909277200, - 922582800, - 941331600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 5940 - }, - { - "index": 4, - "is_dst": false, - "offset": 5940 - }, - { - "index": 8, - "is_dst": false, - "offset": 3600 - }, - { - "index": 12, - "is_dst": true, - "offset": 7200 - }, - { - "index": 17, - "is_dst": false, - "offset": 7200 - }, - { - "index": 21, - "is_dst": false, - "offset": 10800 - }, - { - "index": 25, - "is_dst": true, - "offset": 14400 - }, - { - "index": 29, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-9c98c8b92084c36-7a46fb059e5c1fa4.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-9c98c8b92084c36-7a46fb059e5c1fa4.json deleted file mode 100644 index 4390540ac..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-9c98c8b92084c36-7a46fb059e5c1fa4.json +++ /dev/null @@ -1,270 +0,0 @@ -{ - "ids": [ - "australia/currie", - "australia/hobart", - "australia/tasmania" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "E", - "S", - "T", - "\u0000", - "A", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AEST", - "offset": 36000, - "transition": { - "abbr": "AEDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 4, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 1, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2 - ], - "transitions": [ - -2345795356, - -1680508800, - -1665388800, - -1646640000, - -1635753600, - -1615190400, - -1604304000, - -883641600, - -876124800, - -860400000, - -844675200, - -828345600, - -813225600, - -71136000, - -55411200, - -37267200, - -25776000, - -5817600, - 5673600, - 25632000, - 37728000, - 57686400, - 67968000, - 89136000, - 100022400, - 120585600, - 131472000, - 152035200, - 162921600, - 183484800, - 194976000, - 215539200, - 226425600, - 246988800, - 257875200, - 278438400, - 289324800, - 309888000, - 320774400, - 341337600, - 352224000, - 372787200, - 386092800, - 404841600, - 417542400, - 436291200, - 447177600, - 467740800, - 478627200, - 499190400, - 510076800, - 530035200, - 542736000, - 562089600, - 574790400, - 594144000, - 606240000, - 625593600, - 637689600, - 657043200, - 670348800, - 686678400, - 701798400, - 718128000, - 733248000, - 749577600, - 764697600, - 781027200, - 796147200, - 812476800, - 828201600, - 844531200, - 859651200, - 875980800, - 891100800, - 907430400, - 922550400, - 938880000, - 954000000, - 967305600, - 985449600, - 1002384000, - 1017504000, - 1033833600, - 1048953600, - 1065283200, - 1080403200, - 1096732800, - 1111852800, - 1128182400, - 1143907200, - 1159632000, - 1174752000, - 1191686400, - 1207411200, - 1223136000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 35356 - }, - { - "index": 4, - "is_dst": false, - "offset": 36000 - }, - { - "index": 9, - "is_dst": true, - "offset": 39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-9d02412abb136ce4-3c8b45e586036414.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-9d02412abb136ce4-3c8b45e586036414.json deleted file mode 100644 index e68ce7ba1..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-9d02412abb136ce4-3c8b45e586036414.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "ids": [ - "atlantic/south_georgia" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-02", - "offset": -7200, - "transition": null - }, - "transition_types": [ - 1 - ], - "transitions": [ - -2524512832 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -8768 - }, - { - "index": 4, - "is_dst": false, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-a053c1334aeab356-4e908a806f3a6240.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-a053c1334aeab356-4e908a806f3a6240.json deleted file mode 100644 index a5dcb4bd0..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-a053c1334aeab356-4e908a806f3a6240.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "ids": [ - "asia/almaty" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "7", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 6, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 1 - ], - "transitions": [ - -1441170468, - -1247547600, - 354909600, - 370717200, - 386445600, - 402253200, - 417981600, - 433789200, - 449604000, - 465336000, - 481060800, - 496785600, - 512510400, - 528235200, - 543960000, - 559684800, - 575409600, - 591134400, - 606859200, - 622584000, - 638308800, - 654638400, - 670363200, - 670366800, - 686091600, - 695768400, - 701812800, - 717537600, - 733262400, - 748987200, - 764712000, - 780436800, - 796161600, - 811886400, - 828216000, - 846360000, - 859665600, - 877809600, - 891115200, - 909259200, - 922564800, - 941313600, - 954014400, - 972763200, - 985464000, - 1004212800, - 1017518400, - 1035662400, - 1048968000, - 1067112000, - 1080417600, - 1099166400, - 1709229600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 18468 - }, - { - "index": 4, - "is_dst": false, - "offset": 18000 - }, - { - "index": 8, - "is_dst": false, - "offset": 21600 - }, - { - "index": 12, - "is_dst": true, - "offset": 25200 - }, - { - "index": 4, - "is_dst": true, - "offset": 21600 - }, - { - "index": 8, - "is_dst": true, - "offset": 21600 - }, - { - "index": 8, - "is_dst": true, - "offset": 25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-a0806703e39bd41f-1550d240a231a10.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-a0806703e39bd41f-1550d240a231a10.json deleted file mode 100644 index 003898a8e..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-a0806703e39bd41f-1550d240a231a10.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt+5" - ], - "tzif": { - "designations": [ - "-", - "0", - "5", - "\u0000" - ], - "posix": { - "abbr": "-05", - "offset": -18000, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-a1347b19ee040601-efd22be7d0a016d5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-a1347b19ee040601-efd22be7d0a016d5.json deleted file mode 100644 index 16fd501e9..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-a1347b19ee040601-efd22be7d0a016d5.json +++ /dev/null @@ -1,133 +0,0 @@ -{ - "ids": [ - "pacific/apia" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "1", - "1", - "3", - "0", - "\u0000", - "-", - "1", - "1", - "\u0000", - "-", - "1", - "0", - "\u0000", - "+", - "1", - "4", - "\u0000", - "+", - "1", - "3", - "\u0000" - ], - "posix": { - "abbr": "+13", - "offset": 46800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6 - ], - "transitions": [ - -2445424384, - -1861878784, - -631110600, - 1285498800, - 1301752800, - 1316872800, - 1325239200, - 1333202400, - 1348927200, - 1365256800, - 1380376800, - 1396706400, - 1411826400, - 1428156000, - 1443276000, - 1459605600, - 1474725600, - 1491055200, - 1506175200, - 1522504800, - 1538229600, - 1554559200, - 1569679200, - 1586008800, - 1601128800, - 1617458400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 45184 - }, - { - "index": 0, - "is_dst": false, - "offset": -41216 - }, - { - "index": 4, - "is_dst": false, - "offset": -41400 - }, - { - "index": 10, - "is_dst": false, - "offset": -39600 - }, - { - "index": 14, - "is_dst": true, - "offset": -36000 - }, - { - "index": 18, - "is_dst": true, - "offset": 50400 - }, - { - "index": 22, - "is_dst": false, - "offset": 46800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-a187ee64c8fae572-747e8c9286c7145e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-a187ee64c8fae572-747e8c9286c7145e.json deleted file mode 100644 index 10115a9ee..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-a187ee64c8fae572-747e8c9286c7145e.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "ids": [ - "america/guatemala" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1617040676, - 123055200, - 130914000, - 422344800, - 433054800, - 669708000, - 684219600, - 1146376800, - 1159678800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -21724 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-a1b14d47c3da0459-ac3659b48ae2af97.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-a1b14d47c3da0459-ac3659b48ae2af97.json deleted file mode 100644 index 8270d1c92..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-a1b14d47c3da0459-ac3659b48ae2af97.json +++ /dev/null @@ -1,154 +0,0 @@ -{ - "ids": [ - "europe/belgrade", - "europe/ljubljana", - "europe/podgorica", - "europe/sarajevo", - "europe/skopje", - "europe/zagreb" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2713915320, - -905824800, - -857257200, - -844556400, - -828226800, - -812502000, - -796777200, - -777942000, - -766623600, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 4920 - }, - { - "index": 4, - "is_dst": false, - "offset": 3600 - }, - { - "index": 8, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-a2c4636cb2de823b-b5a0b9670b5a43f5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-a2c4636cb2de823b-b5a0b9670b5a43f5.json deleted file mode 100644 index 1fe94b641..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-a2c4636cb2de823b-b5a0b9670b5a43f5.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "ids": [ - "america/argentina/catamarca", - "america/argentina/comodrivadavia", - "america/catamarca" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 2, - 5, - 4, - 5, - 4, - 6, - 4, - 2, - 4, - 5, - 4 - ], - "transitions": [ - -2372096212, - -1567453392, - -1233432000, - -1222981200, - -1205956800, - -1194037200, - -1172865600, - -1162501200, - -1141329600, - -1130965200, - -1109793600, - -1099429200, - -1078257600, - -1067806800, - -1046635200, - -1036270800, - -1015099200, - -1004734800, - -983563200, - -973198800, - -952027200, - -941576400, - -931032000, - -900882000, - -890337600, - -833749200, - -827265600, - -752274000, - -733780800, - -197326800, - -190843200, - -184194000, - -164491200, - -152658000, - -132955200, - -121122000, - -101419200, - -86821200, - -71092800, - -54766800, - -39038400, - -23317200, - -7588800, - 128142000, - 136605600, - 596948400, - 605066400, - 624423600, - 636516000, - 656478000, - 667965600, - 687931200, - 699415200, - 719377200, - 731469600, - 938919600, - 952052400, - 1086058800, - 1087704000, - 1198983600, - 1205632800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -15788 - }, - { - "index": 4, - "is_dst": false, - "offset": -15408 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -7200 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-a3214de8e358efe8-599436ece4415d29.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-a3214de8e358efe8-599436ece4415d29.json deleted file mode 100644 index 471dd2eb8..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-a3214de8e358efe8-599436ece4415d29.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "ids": [ - "america/creston", - "america/phoenix", - "mst", - "us/arizona" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "M", - "W", - "T", - "\u0000" - ], - "posix": { - "abbr": "MST", - "offset": -25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 1, - 3, - 1, - 2, - 1 - ], - "transitions": [ - -2717643600, - -1633273200, - -1615132800, - -1601823600, - -1583683200, - -880210800, - -820519140, - -812653140, - -796845540, - -84380400, - -68659200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -26898 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": true, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-a3bbf95d113466c0-5f6e6cbbba0b7216.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-a3bbf95d113466c0-5f6e6cbbba0b7216.json deleted file mode 100644 index 3b281ddf2..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-a3bbf95d113466c0-5f6e6cbbba0b7216.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "ids": [ - "america/argentina/san_luis" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 5, - 4, - 5, - 2, - 3, - 2, - 4, - 3, - 4, - 2, - 4, - 5, - 2, - 3, - 2, - 4 - ], - "transitions": [ - -2372096076, - -1567453392, - -1233432000, - -1222981200, - -1205956800, - -1194037200, - -1172865600, - -1162501200, - -1141329600, - -1130965200, - -1109793600, - -1099429200, - -1078257600, - -1067806800, - -1046635200, - -1036270800, - -1015099200, - -1004734800, - -983563200, - -973198800, - -952027200, - -941576400, - -931032000, - -900882000, - -890337600, - -833749200, - -827265600, - -752274000, - -733780800, - -197326800, - -190843200, - -184194000, - -164491200, - -152658000, - -132955200, - -121122000, - -101419200, - -86821200, - -71092800, - -54766800, - -39038400, - -23317200, - -7588800, - 128142000, - 136605600, - 596948400, - 605066400, - 624423600, - 637380000, - 655963200, - 667796400, - 675748800, - 938919600, - 952052400, - 1085972400, - 1090728000, - 1198983600, - 1200880800, - 1223784000, - 1236481200, - 1255233600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -15924 - }, - { - "index": 4, - "is_dst": false, - "offset": -15408 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-a442eead4fdb53a5-d717fcfdaf2d6816.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-a442eead4fdb53a5-d717fcfdaf2d6816.json deleted file mode 100644 index 1981b6adc..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-a442eead4fdb53a5-d717fcfdaf2d6816.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "ids": [ - "america/bahia" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1767216356, - -1206957600, - -1191362400, - -1175374800, - -1159826400, - -633819600, - -622069200, - -602283600, - -591832800, - -570747600, - -560210400, - -539125200, - -531352800, - -191365200, - -184197600, - -155163600, - -150069600, - -128898000, - -121125600, - -99954000, - -89589600, - -68418000, - -57967200, - 499748400, - 511236000, - 530593200, - 540266400, - 562129200, - 571197600, - 592974000, - 602042400, - 624423600, - 634701600, - 656478000, - 666756000, - 687927600, - 697600800, - 719982000, - 728445600, - 750826800, - 761709600, - 782276400, - 793159200, - 813726000, - 824004000, - 844570800, - 856058400, - 876106800, - 888717600, - 908074800, - 919562400, - 938919600, - 951616800, - 970974000, - 982461600, - 1003028400, - 1013911200, - 1036292400, - 1045360800, - 1318734000, - 1330221600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -9244 - }, - { - "index": 4, - "is_dst": false, - "offset": -10800 - }, - { - "index": 8, - "is_dst": true, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-a44c115ed3d72421-4cb81346edf64734.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-a44c115ed3d72421-4cb81346edf64734.json deleted file mode 100644 index 3128dee02..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-a44c115ed3d72421-4cb81346edf64734.json +++ /dev/null @@ -1,375 +0,0 @@ -{ - "ids": [ - "atlantic/madeira" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "F", - "M", - "T", - "\u0000", - "-", - "0", - "1", - "\u0000", - "+", - "0", - "0", - "\u0000", - "+", - "0", - "1", - "\u0000", - "W", - "E", - "T", - "\u0000", - "W", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "WET", - "offset": 0, - "transition": { - "abbr": "WEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 3600 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 4, - 3, - 2, - 3, - 4, - 3, - 2, - 3, - 4, - 3, - 2, - 3, - 4, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5 - ], - "transitions": [ - -2713906344, - -1830380400, - -1689552000, - -1677798000, - -1667430000, - -1647734400, - -1635894000, - -1616198400, - -1604358000, - -1584662400, - -1572735600, - -1553040000, - -1541199600, - -1521504000, - -1442448000, - -1427673600, - -1379289600, - -1364774400, - -1348444800, - -1333324800, - -1316390400, - -1301270400, - -1284336000, - -1269820800, - -1221436800, - -1206921600, - -1191196800, - -1175472000, - -1127692800, - -1111968000, - -1096848000, - -1080518400, - -1063584000, - -1049068800, - -1033344000, - -1017619200, - -1002499200, - -986169600, - -969235200, - -950486400, - -942019200, - -922492800, - -906940800, - -891129600, - -877305600, - -873680400, - -864003600, - -857952000, - -845856000, - -842835600, - -831344400, - -825897600, - -814406400, - -810781200, - -799894800, - -794448000, - -782956800, - -779331600, - -768445200, - -762998400, - -749088000, - -733363200, - -717627600, - -701902800, - -686178000, - -670453200, - -654728400, - -639003600, - -623278800, - -607554000, - -591829200, - -575499600, - -559774800, - -544050000, - -528325200, - -512600400, - -496875600, - -481150800, - -465426000, - -449701200, - -433976400, - -417646800, - -401922000, - -386197200, - -370472400, - -354747600, - -339022800, - -323298000, - -307573200, - -291848400, - -276123600, - -260398800, - -244674000, - -228344400, - -212619600, - -196894800, - -181170000, - -165445200, - -149720400, - -133995600, - -118270800, - -102546000, - 386726400, - 401846400, - 417571200, - 433296000, - 449020800, - 465350400, - 481075200, - 496800000, - 512524800, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -4056 - }, - { - "index": 4, - "is_dst": false, - "offset": -4056 - }, - { - "index": 8, - "is_dst": false, - "offset": -3600 - }, - { - "index": 12, - "is_dst": true, - "offset": 0 - }, - { - "index": 16, - "is_dst": true, - "offset": 3600 - }, - { - "index": 20, - "is_dst": false, - "offset": 0 - }, - { - "index": 24, - "is_dst": true, - "offset": 3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-a685965c91f5b79b-c4073397934355b8.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-a685965c91f5b79b-c4073397934355b8.json deleted file mode 100644 index 26581a93d..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-a685965c91f5b79b-c4073397934355b8.json +++ /dev/null @@ -1,185 +0,0 @@ -{ - "ids": [ - "america/chihuahua" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 2, - 4, - 2, - 4, - 2, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 2 - ], - "transitions": [ - -1514739600, - -1343149200, - -1234807200, - -1220461200, - -1207159200, - -1191344400, - 828864000, - 846399600, - 860313600, - 877849200, - 891766800, - 909302400, - 923216400, - 941356800, - 954666000, - 972806400, - 989139600, - 1001836800, - 1018170000, - 1035705600, - 1049619600, - 1067155200, - 1081069200, - 1099209600, - 1112518800, - 1130659200, - 1143968400, - 1162108800, - 1175418000, - 1193558400, - 1207472400, - 1225008000, - 1238922000, - 1256457600, - 1270371600, - 1288512000, - 1301821200, - 1319961600, - 1333270800, - 1351411200, - 1365325200, - 1382860800, - 1396774800, - 1414310400, - 1428224400, - 1445760000, - 1459674000, - 1477814400, - 1491123600, - 1509264000, - 1522573200, - 1540713600, - 1554627600, - 1572163200, - 1586077200, - 1603612800, - 1617526800, - 1635667200, - 1648976400, - 1667116800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -25460 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": false, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-a7b726e2144b8ec3-b27e2e8b4d359d3e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-a7b726e2144b8ec3-b27e2e8b4d359d3e.json deleted file mode 100644 index 013dec07e..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-a7b726e2144b8ec3-b27e2e8b4d359d3e.json +++ /dev/null @@ -1,156 +0,0 @@ -{ - "ids": [ - "atlantic/canary" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "1", - "\u0000", - "W", - "E", - "T", - "\u0000", - "W", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "WET", - "offset": 0, - "transition": { - "abbr": "WEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 3600 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -1509663504, - -733874400, - 323827200, - 338950800, - 354675600, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -3696 - }, - { - "index": 4, - "is_dst": false, - "offset": -3600 - }, - { - "index": 8, - "is_dst": false, - "offset": 0 - }, - { - "index": 12, - "is_dst": true, - "offset": 3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-aa6fbecd6b3089a1-e904f94f6536baa5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-aa6fbecd6b3089a1-e904f94f6536baa5.json deleted file mode 100644 index fdf5de43a..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-aa6fbecd6b3089a1-e904f94f6536baa5.json +++ /dev/null @@ -1,395 +0,0 @@ -{ - "ids": [ - "america/moncton" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "A", - "S", - "T", - "\u0000", - "A", - "D", - "T", - "\u0000", - "A", - "W", - "T", - "\u0000", - "A", - "P", - "T", - "\u0000" - ], - "posix": { - "abbr": "AST", - "offset": -14400, - "transition": { - "abbr": "ADT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2715882052, - -2131642800, - -1632074400, - -1615143600, - -1153681200, - -1145822400, - -1122231600, - -1114372800, - -1090782000, - -1082923200, - -1059332400, - -1051473600, - -1027882800, - -1020024000, - -996433200, - -988574400, - -965674800, - -955396800, - -934743600, - -923947200, - -904503600, - -891892800, - -880221600, - -769395600, - -765399600, - -747252000, - -733950000, - -715802400, - -702500400, - -684352800, - -671050800, - -652903200, - -639601200, - -620848800, - -608151600, - -589399200, - -576097200, - -557949600, - -544647600, - -526500000, - -513198000, - -495050400, - -481748400, - -463600800, - -450298800, - -431546400, - -418244400, - -400096800, - -384375600, - -368647200, - -352926000, - -337197600, - -321476400, - -305748000, - -289422000, - -273693600, - -257972400, - -242244000, - -226522800, - -210794400, - -195073200, - -179344800, - -163623600, - -147895200, - -131569200, - -116445600, - -100119600, - -84391200, - -68670000, - -52941600, - -37220400, - -21492000, - -5770800, - 9957600, - 25678800, - 41407200, - 57733200, - 73461600, - 89182800, - 136360800, - 152082000, - 167810400, - 183531600, - 199260000, - 215586000, - 230709600, - 247035600, - 262764000, - 278485200, - 294213600, - 309934800, - 325663200, - 341384400, - 357112800, - 372834000, - 388562400, - 404888400, - 420012000, - 436338000, - 452066400, - 467787600, - 483516000, - 499237200, - 514965600, - 530686800, - 544600800, - 562136400, - 576050400, - 594190800, - 607500000, - 625640400, - 638949600, - 657090000, - 671004000, - 688539600, - 702453600, - 719989200, - 733896060, - 752036460, - 765345660, - 783486060, - 796795260, - 814935660, - 828849660, - 846385260, - 860299260, - 877834860, - 891748860, - 909284460, - 923198460, - 941338860, - 954648060, - 972788460, - 986097660, - 1004238060, - 1018152060, - 1035687660, - 1049601660, - 1067137260, - 1081051260, - 1099191660, - 1112500860, - 1130641260, - 1143950460, - 1162090860, - 1173592800, - 1194152400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -15548 - }, - { - "index": 4, - "is_dst": false, - "offset": -18000 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -10800 - }, - { - "index": 20, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-aba73c12b2e7f46-a8730180f688e132.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-aba73c12b2e7f46-a8730180f688e132.json deleted file mode 100644 index 77fe5f40f..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-aba73c12b2e7f46-a8730180f688e132.json +++ /dev/null @@ -1,75 +0,0 @@ -{ - "ids": [ - "africa/bangui", - "africa/brazzaville", - "africa/douala", - "africa/kinshasa", - "africa/lagos", - "africa/libreville", - "africa/luanda", - "africa/malabo", - "africa/niamey", - "africa/porto-novo" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "G", - "M", - "T", - "\u0000", - "+", - "0", - "0", - "3", - "0", - "\u0000", - "W", - "A", - "T", - "\u0000" - ], - "posix": { - "abbr": "WAT", - "offset": 3600, - "transition": null - }, - "transition_types": [ - 1, - 0, - 2, - 3 - ], - "transitions": [ - -2035584815, - -1940889600, - -1767226415, - -1588465800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 815 - }, - { - "index": 4, - "is_dst": false, - "offset": 0 - }, - { - "index": 8, - "is_dst": false, - "offset": 1800 - }, - { - "index": 14, - "is_dst": false, - "offset": 3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-aeaa8db63bed649c-b8168492f7f36c82.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-aeaa8db63bed649c-b8168492f7f36c82.json deleted file mode 100644 index a29003aae..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-aeaa8db63bed649c-b8168492f7f36c82.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt+7" - ], - "tzif": { - "designations": [ - "-", - "0", - "7", - "\u0000" - ], - "posix": { - "abbr": "-07", - "offset": -25200, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-b05b7d10c5ffdad-78ca745f30ef72cd.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-b05b7d10c5ffdad-78ca745f30ef72cd.json deleted file mode 100644 index 65d862850..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-b05b7d10c5ffdad-78ca745f30ef72cd.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "ids": [ - "asia/jayapura" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "9", - "\u0000", - "+", - "0", - "9", - "3", - "0", - "\u0000", - "W", - "I", - "T", - "\u0000" - ], - "posix": { - "abbr": "WIT", - "offset": 32400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3 - ], - "transitions": [ - -1172913768, - -799491600, - -189423000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 33768 - }, - { - "index": 4, - "is_dst": false, - "offset": 32400 - }, - { - "index": 8, - "is_dst": false, - "offset": 34200 - }, - { - "index": 14, - "is_dst": false, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-b06ac7e52f27518c-a8e4668bd9c18cb8.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-b06ac7e52f27518c-a8e4668bd9c18cb8.json deleted file mode 100644 index b04857885..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-b06ac7e52f27518c-a8e4668bd9c18cb8.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "ids": [ - "europe/bucharest" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "B", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 14400 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2469404664, - -1213148664, - -1187056800, - -1175479200, - -1159754400, - -1144029600, - -1127700000, - -1111975200, - -1096250400, - -1080525600, - -1064800800, - -1049076000, - -1033351200, - -1017626400, - -1001901600, - -986176800, - -970452000, - -954727200, - 296604000, - 307486800, - 323816400, - 338940000, - 354672000, - 370396800, - 386121600, - 401846400, - 417571200, - 433296000, - 449020800, - 465350400, - 481075200, - 496800000, - 512524800, - 528249600, - 543974400, - 559699200, - 575424000, - 591148800, - 606873600, - 622598400, - 638323200, - 654652800, - 670370400, - 686095200, - 701820000, - 717544800, - 733269600, - 748994400, - 757375200, - 780440400, - 796168800, - 811890000, - 828223200, - 846363600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 6264 - }, - { - "index": 4, - "is_dst": false, - "offset": 6264 - }, - { - "index": 8, - "is_dst": false, - "offset": 7200 - }, - { - "index": 12, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-b0c86e4e28bb1810-4b872c50d4c1a6c6.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-b0c86e4e28bb1810-4b872c50d4c1a6c6.json deleted file mode 100644 index 9a4df67bf..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-b0c86e4e28bb1810-4b872c50d4c1a6c6.json +++ /dev/null @@ -1,208 +0,0 @@ -{ - "ids": [ - "asia/krasnoyarsk" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "7", - "\u0000", - "+", - "0", - "8", - "\u0000" - ], - "posix": { - "abbr": "+07", - "offset": 25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 6, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 7, - 2 - ], - "transitions": [ - -1577513486, - -1247551200, - 354906000, - 370713600, - 386442000, - 402249600, - 417978000, - 433785600, - 449600400, - 465332400, - 481057200, - 496782000, - 512506800, - 528231600, - 543956400, - 559681200, - 575406000, - 591130800, - 606855600, - 622580400, - 638305200, - 654634800, - 670359600, - 670363200, - 686088000, - 695764800, - 701809200, - 717534000, - 733258800, - 748983600, - 764708400, - 780433200, - 796158000, - 811882800, - 828212400, - 846356400, - 859662000, - 877806000, - 891111600, - 909255600, - 922561200, - 941310000, - 954010800, - 972759600, - 985460400, - 1004209200, - 1017514800, - 1035658800, - 1048964400, - 1067108400, - 1080414000, - 1099162800, - 1111863600, - 1130612400, - 1143313200, - 1162062000, - 1174762800, - 1193511600, - 1206817200, - 1224961200, - 1238266800, - 1256410800, - 1269716400, - 1288465200, - 1301166000, - 1414260000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 22286 - }, - { - "index": 4, - "is_dst": false, - "offset": 21600 - }, - { - "index": 8, - "is_dst": false, - "offset": 25200 - }, - { - "index": 12, - "is_dst": true, - "offset": 28800 - }, - { - "index": 4, - "is_dst": true, - "offset": 25200 - }, - { - "index": 8, - "is_dst": true, - "offset": 25200 - }, - { - "index": 8, - "is_dst": true, - "offset": 28800 - }, - { - "index": 12, - "is_dst": false, - "offset": 28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-b397eb337d51aec5-ef342f93732b4e5e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-b397eb337d51aec5-ef342f93732b4e5e.json deleted file mode 100644 index f1c02fbae..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-b397eb337d51aec5-ef342f93732b4e5e.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt-1" - ], - "tzif": { - "designations": [ - "+", - "0", - "1", - "\u0000" - ], - "posix": { - "abbr": "+01", - "offset": 3600, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-b3a7b6acccb12af9-55992b6095d12ce7.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-b3a7b6acccb12af9-55992b6095d12ce7.json deleted file mode 100644 index 79df47497..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-b3a7b6acccb12af9-55992b6095d12ce7.json +++ /dev/null @@ -1,47 +0,0 @@ -{ - "ids": [ - "pacific/palau" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "9", - "\u0000" - ], - "posix": { - "abbr": "+09", - "offset": 32400, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -3944624276, - -2177485076 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -54124 - }, - { - "index": 0, - "is_dst": false, - "offset": 32276 - }, - { - "index": 4, - "is_dst": false, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-b3d9e43d648fe2bf-8736e3d1fbc613ef.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-b3d9e43d648fe2bf-8736e3d1fbc613ef.json deleted file mode 100644 index 5f61f4c81..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-b3d9e43d648fe2bf-8736e3d1fbc613ef.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "ids": [ - "indian/kerguelen", - "indian/maldives" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "M", - "T", - "\u0000", - "+", - "0", - "5", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -2840158440, - -315636840 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 17640 - }, - { - "index": 4, - "is_dst": false, - "offset": 17640 - }, - { - "index": 8, - "is_dst": false, - "offset": 18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-b445d8dfee87de1d-fc15f727335717c2.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-b445d8dfee87de1d-fc15f727335717c2.json deleted file mode 100644 index 01c314286..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-b445d8dfee87de1d-fc15f727335717c2.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt-12" - ], - "tzif": { - "designations": [ - "+", - "1", - "2", - "\u0000" - ], - "posix": { - "abbr": "+12", - "offset": 43200, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 43200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-b6ba868b587cad06-ce1f6d2262a629d1.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-b6ba868b587cad06-ce1f6d2262a629d1.json deleted file mode 100644 index 33d3d9cc9..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-b6ba868b587cad06-ce1f6d2262a629d1.json +++ /dev/null @@ -1,208 +0,0 @@ -{ - "ids": [ - "asia/macao", - "asia/macau" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "+", - "0", - "9", - "\u0000", - "+", - "1", - "0", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": 28800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1 - ], - "transitions": [ - -2056692850, - -884509200, - -873280800, - -855918000, - -841744800, - -828529200, - -765363600, - -747046800, - -733827600, - -716461200, - -697021200, - -683715600, - -667990800, - -654771600, - -636627600, - -623322000, - -605178000, - -591872400, - -573642000, - -559818000, - -541674000, - -528368400, - -510224400, - -498128400, - -478774800, - -466678800, - -446720400, - -435229200, - -415258200, - -403158600, - -383808600, - -371709000, - -352359000, - -340259400, - -320909400, - -308809800, - -288855000, - -277360200, - -257405400, - -245910600, - -225955800, - -213856200, - -194506200, - -182406600, - -163056600, - -148537800, - -132820200, - -117088200, - -101370600, - -85638600, - -69312600, - -53584200, - -37863000, - -22134600, - -6413400, - 9315000, - 25036200, - 40764600, - 56485800, - 72214200, - 88540200, - 104268600, - 119989800, - 126041400, - 151439400, - 167167800, - 182889000, - 198617400, - 214338600, - 295385400, - 309292200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 27250 - }, - { - "index": 4, - "is_dst": false, - "offset": 28800 - }, - { - "index": 8, - "is_dst": false, - "offset": 32400 - }, - { - "index": 12, - "is_dst": true, - "offset": 36000 - }, - { - "index": 16, - "is_dst": true, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-b785c09bc525b515-9932a5fd4cfc27a5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-b785c09bc525b515-9932a5fd4cfc27a5.json deleted file mode 100644 index 2a7ceffdd..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-b785c09bc525b515-9932a5fd4cfc27a5.json +++ /dev/null @@ -1,118 +0,0 @@ -{ - "ids": [ - "america/eirunepe" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "5", - "\u0000", - "-", - "0", - "4", - "\u0000" - ], - "posix": { - "abbr": "-05", - "offset": -18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 1 - ], - "transitions": [ - -1767208832, - -1206950400, - -1191355200, - -1175367600, - -1159819200, - -633812400, - -622062000, - -602276400, - -591825600, - -570740400, - -560203200, - -539118000, - -531345600, - -191358000, - -184190400, - -155156400, - -150062400, - -128890800, - -121118400, - -99946800, - -89582400, - -68410800, - -57960000, - 499755600, - 511243200, - 530600400, - 540273600, - 562136400, - 571204800, - 750834000, - 761716800, - 1214283600, - 1384056000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -16768 - }, - { - "index": 4, - "is_dst": false, - "offset": -18000 - }, - { - "index": 8, - "is_dst": true, - "offset": -14400 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-b89f6da72122ca01-4ff661063625a497.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-b89f6da72122ca01-4ff661063625a497.json deleted file mode 100644 index d163071eb..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-b89f6da72122ca01-4ff661063625a497.json +++ /dev/null @@ -1,125 +0,0 @@ -{ - "ids": [ - "asia/seoul", - "rok" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "K", - "S", - "T", - "\u0000", - "J", - "S", - "T", - "\u0000", - "K", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "KST", - "offset": 32400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 3, - 4, - 3, - 4, - 3 - ], - "transitions": [ - -1948782472, - -1830414600, - -767350800, - -681210000, - -672228000, - -654771600, - -640864800, - -623408400, - -609415200, - -588848400, - -577965600, - -498128400, - -462702600, - -451733400, - -429784200, - -418296600, - -399544200, - -387451800, - -368094600, - -356002200, - -336645000, - -324552600, - -305195400, - -293103000, - -264933000, - 547578000, - 560883600, - 579027600, - 592333200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 30472 - }, - { - "index": 4, - "is_dst": false, - "offset": 30600 - }, - { - "index": 8, - "is_dst": false, - "offset": 32400 - }, - { - "index": 4, - "is_dst": false, - "offset": 32400 - }, - { - "index": 12, - "is_dst": true, - "offset": 36000 - }, - { - "index": 12, - "is_dst": true, - "offset": 34200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-b8b54ce37e65e37e-1a5a88cac7047a13.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-b8b54ce37e65e37e-1a5a88cac7047a13.json deleted file mode 100644 index 6af79d3cc..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-b8b54ce37e65e37e-1a5a88cac7047a13.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "ids": [ - "pacific/guam", - "pacific/saipan" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "G", - "S", - "T", - "\u0000", - "+", - "0", - "9", - "\u0000", - "G", - "D", - "T", - "\u0000", - "C", - "h", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "ChST", - "offset": 36000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 5 - ], - "transitions": [ - -3944626740, - -2177487540, - -885549600, - -802256400, - -331891200, - -281610000, - -73728000, - -29415540, - -16704000, - -10659600, - 9907200, - 21394800, - 41356800, - 52844400, - 124819200, - 130863600, - 201888000, - 209487660, - 230659200, - 241542000, - 977493600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -51660 - }, - { - "index": 0, - "is_dst": false, - "offset": 34740 - }, - { - "index": 4, - "is_dst": false, - "offset": 36000 - }, - { - "index": 8, - "is_dst": false, - "offset": 32400 - }, - { - "index": 12, - "is_dst": true, - "offset": 39600 - }, - { - "index": 16, - "is_dst": false, - "offset": 36000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-b9b18c55e2cd4d53-2df872c11ad74ffc.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-b9b18c55e2cd4d53-2df872c11ad74ffc.json deleted file mode 100644 index 8f35ad535..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-b9b18c55e2cd4d53-2df872c11ad74ffc.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "ids": [ - "america/belize" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "-", - "0", - "5", - "3", - "0", - "\u0000", - "C", - "W", - "T", - "\u0000", - "C", - "P", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 5, - 1, - 5, - 1 - ], - "transitions": [ - -1822500432, - -1616954400, - -1606069800, - -1585504800, - -1574015400, - -1554055200, - -1542565800, - -1522605600, - -1511116200, - -1490551200, - -1479666600, - -1459101600, - -1448217000, - -1427652000, - -1416162600, - -1396202400, - -1384713000, - -1364752800, - -1353263400, - -1333303200, - -1321813800, - -1301248800, - -1290364200, - -1269799200, - -1258914600, - -1238349600, - -1226860200, - -1206900000, - -1195410600, - -1175450400, - -1163961000, - -1143396000, - -1132511400, - -1111946400, - -1101061800, - -1080496800, - -1069612200, - -1049047200, - -1037557800, - -1017597600, - -1006108200, - -986148000, - -974658600, - -954093600, - -943209000, - -922644000, - -911759400, - -891194400, - -879705000, - -868212000, - -769395600, - -758746800, - -701892000, - -690402600, - -670442400, - -658953000, - -638992800, - -627503400, - -606938400, - -596053800, - -575488800, - -564604200, - -544039200, - -532549800, - -512589600, - -501100200, - -481140000, - -469650600, - -449690400, - -438201000, - -417636000, - -406751400, - -386186400, - -375301800, - -354736800, - -343247400, - -323287200, - -311797800, - -291837600, - -280348200, - -259783200, - -248898600, - -228333600, - -217449000, - -196884000, - -185999400, - -165434400, - -153945000, - -133984800, - -122495400, - -102535200, - -91045800, - -70480800, - -59596200, - 123919200, - 129618000, - 409039200, - 413874000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -21168 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -19800 - }, - { - "index": 14, - "is_dst": true, - "offset": -18000 - }, - { - "index": 18, - "is_dst": true, - "offset": -18000 - }, - { - "index": 22, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-b9d3679a03af6191-5f028a8e888d6a6c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-b9d3679a03af6191-5f028a8e888d6a6c.json deleted file mode 100644 index 66baa5ab0..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-b9d3679a03af6191-5f028a8e888d6a6c.json +++ /dev/null @@ -1,184 +0,0 @@ -{ - "ids": [ - "asia/qostanay" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 5, - 6, - 1, - 7, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 4, - 2 - ], - "transitions": [ - -1441167268, - -1247544000, - 354913200, - 370720800, - 386445600, - 386449200, - 402256800, - 417985200, - 433792800, - 449607600, - 465339600, - 481064400, - 496789200, - 512514000, - 528238800, - 543963600, - 559688400, - 575413200, - 591138000, - 606862800, - 622587600, - 638312400, - 654642000, - 670366800, - 670370400, - 686095200, - 695772000, - 701816400, - 717541200, - 733266000, - 748990800, - 764715600, - 780440400, - 796165200, - 811890000, - 828219600, - 846363600, - 859669200, - 877813200, - 891118800, - 909262800, - 922568400, - 941317200, - 954018000, - 972766800, - 985467600, - 1004216400, - 1017522000, - 1035666000, - 1048971600, - 1067115600, - 1080421200, - 1099170000, - 1709229600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 15268 - }, - { - "index": 4, - "is_dst": false, - "offset": 14400 - }, - { - "index": 8, - "is_dst": false, - "offset": 18000 - }, - { - "index": 12, - "is_dst": true, - "offset": 21600 - }, - { - "index": 12, - "is_dst": false, - "offset": 21600 - }, - { - "index": 4, - "is_dst": true, - "offset": 18000 - }, - { - "index": 8, - "is_dst": true, - "offset": 18000 - }, - { - "index": 8, - "is_dst": true, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-bad7f01dd3f01a92-4e95b98a659c32dc.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-bad7f01dd3f01a92-4e95b98a659c32dc.json deleted file mode 100644 index 1f97b78bf..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-bad7f01dd3f01a92-4e95b98a659c32dc.json +++ /dev/null @@ -1,346 +0,0 @@ -{ - "ids": [ - "america/rainy_river", - "america/winnipeg", - "canada/central" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "C", - "W", - "T", - "\u0000", - "C", - "P", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": { - "abbr": "CDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2602258284, - -1694368800, - -1681671600, - -1632067200, - -1615136400, - -1029686400, - -1018198800, - -880214400, - -769395600, - -765392400, - -746035200, - -732733200, - -715795200, - -702493200, - -684345600, - -671043600, - -652896000, - -639594000, - -620755200, - -607626000, - -589392000, - -576090000, - -557942400, - -544640400, - -526492800, - -513190800, - -495043200, - -481741200, - -463593600, - -450291600, - -431539200, - -418237200, - -400089600, - -386787600, - -368640000, - -355338000, - -337190400, - -321469200, - -305740800, - -292438800, - -210787200, - -198090000, - -116438400, - -100108800, - -84384000, - -68659200, - -52934400, - -37209600, - -21484800, - -5760000, - 9964800, - 25689600, - 41414400, - 57744000, - 73468800, - 89193600, - 104918400, - 120643200, - 136368000, - 152092800, - 167817600, - 183542400, - 199267200, - 215596800, - 230716800, - 247046400, - 262771200, - 278496000, - 294220800, - 309945600, - 325670400, - 341395200, - 357120000, - 372844800, - 388569600, - 404899200, - 420019200, - 436348800, - 452073600, - 467798400, - 483523200, - 499248000, - 514972800, - 530697600, - 544608000, - 562147200, - 576057600, - 594201600, - 607507200, - 625651200, - 638956800, - 657100800, - 671011200, - 688550400, - 702460800, - 720000000, - 733910400, - 752054400, - 765360000, - 783504000, - 796809600, - 814953600, - 828864000, - 846403200, - 860313600, - 877852800, - 891763200, - 909302400, - 923212800, - 941356800, - 954662400, - 972806400, - 986112000, - 1004256000, - 1018166400, - 1035705600, - 1049616000, - 1067155200, - 1081065600, - 1099209600, - 1112515200, - 1130659200, - 1136095200, - 1162105200, - 1173600000, - 1194159600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -23316 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-bafb78fdc913701c-8b69c00fdcfa224b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-bafb78fdc913701c-8b69c00fdcfa224b.json deleted file mode 100644 index f357cc84d..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-bafb78fdc913701c-8b69c00fdcfa224b.json +++ /dev/null @@ -1,189 +0,0 @@ -{ - "ids": [ - "europe/vienna" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2422055121, - -1693706400, - -1680483600, - -1663455600, - -1650150000, - -1632006000, - -1618700400, - -1569711600, - -1555801200, - -938905200, - -857257200, - -844556400, - -828226800, - -812502000, - -796777200, - -781052400, - -780188400, - -748479600, - -733273200, - -717634800, - -701910000, - -684975600, - -670460400, - 323823600, - 338940000, - 347151600, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 3921 - }, - { - "index": 4, - "is_dst": false, - "offset": 3600 - }, - { - "index": 8, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-bbf3217ce334c3f2-232c7149620b7964.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-bbf3217ce334c3f2-232c7149620b7964.json deleted file mode 100644 index ef7b03770..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-bbf3217ce334c3f2-232c7149620b7964.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt+11" - ], - "tzif": { - "designations": [ - "-", - "1", - "1", - "\u0000" - ], - "posix": { - "abbr": "-11", - "offset": -39600, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-bbfc9e9111217c11-8a6bfc73823083b1.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-bbfc9e9111217c11-8a6bfc73823083b1.json deleted file mode 100644 index f69375b25..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-bbfc9e9111217c11-8a6bfc73823083b1.json +++ /dev/null @@ -1,188 +0,0 @@ -{ - "ids": [ - "america/indiana/tell_city" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "C", - "W", - "T", - "\u0000", - "C", - "P", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": { - "abbr": "CDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 5, - 1, - 2, - 1, - 6, - 5, - 6, - 5, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2717647200, - -1633276800, - -1615136400, - -1601827200, - -1583686800, - -880214400, - -769395600, - -765392400, - -462996000, - -450291600, - -431539200, - -418237200, - -400089600, - -386787600, - -368640000, - -355338000, - -337190400, - -323888400, - -305740800, - -292438800, - -273686400, - -257965200, - -242236800, - -226515600, - -210787200, - -195066000, - -179337600, - -68662800, - -52934400, - -37213200, - -21484800, - -5767200, - 9961200, - 25682400, - 1143961200, - 1143964800, - 1162105200, - 1173600000, - 1194159600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -20823 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - }, - { - "index": 20, - "is_dst": false, - "offset": -18000 - }, - { - "index": 24, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-bcd5d242787ff58-97f28a4e5e19ca2d.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-bcd5d242787ff58-97f28a4e5e19ca2d.json deleted file mode 100644 index aa3bffc57..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-bcd5d242787ff58-97f28a4e5e19ca2d.json +++ /dev/null @@ -1,93 +0,0 @@ -{ - "ids": [ - "pacific/efate" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "1", - "\u0000", - "+", - "1", - "2", - "\u0000" - ], - "posix": { - "abbr": "+11", - "offset": 39600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1829387596, - 125409600, - 133876800, - 433256400, - 448977600, - 464706000, - 480427200, - 496760400, - 511876800, - 528210000, - 543931200, - 559659600, - 575380800, - 591109200, - 606830400, - 622558800, - 638280000, - 654008400, - 669729600, - 686062800, - 696340800, - 719931600, - 727790400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 40396 - }, - { - "index": 4, - "is_dst": false, - "offset": 39600 - }, - { - "index": 8, - "is_dst": true, - "offset": 43200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-bd05cebe8eecfa2c-3473e273e629053b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-bd05cebe8eecfa2c-3473e273e629053b.json deleted file mode 100644 index 8ad068c63..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-bd05cebe8eecfa2c-3473e273e629053b.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "ids": [ - "africa/ceuta" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "W", - "E", - "T", - "\u0000", - "W", - "E", - "S", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": { - "abbr": "CEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3 - ], - "transitions": [ - -2177452800, - -1630112400, - -1616810400, - -1442451600, - -1427673600, - -1379293200, - -1364774400, - -1348448400, - -1333324800, - -1316390400, - -1301270400, - -81432000, - -71110800, - 141264000, - 147222000, - 199756800, - 207702000, - 231292800, - 244249200, - 265507200, - 271033200, - 448243200, - 504918000, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -1276 - }, - { - "index": 4, - "is_dst": false, - "offset": 0 - }, - { - "index": 8, - "is_dst": true, - "offset": 3600 - }, - { - "index": 13, - "is_dst": false, - "offset": 3600 - }, - { - "index": 17, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-bd9ad03026ed086f-d644ac44efd68aba.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-bd9ad03026ed086f-d644ac44efd68aba.json deleted file mode 100644 index 0c49cd028..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-bd9ad03026ed086f-d644ac44efd68aba.json +++ /dev/null @@ -1,82 +0,0 @@ -{ - "ids": [ - "asia/calcutta", - "asia/kolkata" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "H", - "M", - "T", - "\u0000", - "M", - "M", - "T", - "\u0000", - "I", - "S", - "T", - "\u0000", - "+", - "0", - "6", - "3", - "0", - "\u0000" - ], - "posix": { - "abbr": "IST", - "offset": 19800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 3 - ], - "transitions": [ - -3645237208, - -3155694800, - -2019705670, - -891581400, - -872058600, - -862637400, - -764145000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 21208 - }, - { - "index": 4, - "is_dst": false, - "offset": 21200 - }, - { - "index": 8, - "is_dst": false, - "offset": 19270 - }, - { - "index": 12, - "is_dst": false, - "offset": 19800 - }, - { - "index": 16, - "is_dst": true, - "offset": 23400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-bda89ec29d33a428-5e5283a95520799b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-bda89ec29d33a428-5e5283a95520799b.json deleted file mode 100644 index b8b3454b1..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-bda89ec29d33a428-5e5283a95520799b.json +++ /dev/null @@ -1,275 +0,0 @@ -{ - "ids": [ - "america/montevideo" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "3", - "3", - "0", - "\u0000", - "-", - "0", - "2", - "3", - "0", - "\u0000", - "-", - "0", - "2", - "\u0000", - "-", - "0", - "1", - "3", - "0", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 5, - 6, - 5, - 6, - 7, - 6, - 7, - 6, - 5, - 6, - 7, - 6, - 7, - 6, - 8, - 5, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6, - 7, - 6 - ], - "transitions": [ - -1942690509, - -1567455309, - -1459627200, - -1443819600, - -1428006600, - -1412283600, - -1396470600, - -1380747600, - -1141590600, - -1128286800, - -1110141000, - -1096837200, - -1078691400, - -1065387600, - -1047241800, - -1033938000, - -1015187400, - -1002488400, - -983737800, - -971038800, - -954707400, - -938984400, - -920838600, - -907534800, - -896819400, - -853621200, - -845847000, - -334789200, - -319671000, - -314226000, - -309996000, - -149720400, - -134604000, - -50446800, - -34205400, - 9860400, - 14176800, - 72846000, - 80100000, - 127278000, - 132111000, - 147234600, - 156913200, - 165376800, - 219812400, - 226461600, - 250052400, - 257911200, - 282711600, - 289360800, - 294202800, - 322020000, - 566449200, - 573012000, - 597812400, - 605066400, - 625633200, - 635911200, - 656478000, - 667965600, - 688532400, - 699415200, - 719377200, - 730864800, - 1095562800, - 1111896000, - 1128834000, - 1142136000, - 1159678800, - 1173585600, - 1191733200, - 1205035200, - 1223182800, - 1236484800, - 1254632400, - 1268539200, - 1286082000, - 1299988800, - 1317531600, - 1331438400, - 1349586000, - 1362888000, - 1381035600, - 1394337600, - 1412485200, - 1425787200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -13491 - }, - { - "index": 4, - "is_dst": false, - "offset": -13491 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 16, - "is_dst": false, - "offset": -12600 - }, - { - "index": 22, - "is_dst": true, - "offset": -9000 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 28, - "is_dst": true, - "offset": -7200 - }, - { - "index": 32, - "is_dst": true, - "offset": -5400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-bdc0a1977c311c8d-f4b9b28d0425c2e7.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-bdc0a1977c311c8d-f4b9b28d0425c2e7.json deleted file mode 100644 index e30286d5c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-bdc0a1977c311c8d-f4b9b28d0425c2e7.json +++ /dev/null @@ -1,52 +0,0 @@ -{ - "ids": [ - "asia/bahrain", - "asia/qatar" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "+03", - "offset": 10800, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -1577935568, - 76190400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 12368 - }, - { - "index": 4, - "is_dst": false, - "offset": 14400 - }, - { - "index": 8, - "is_dst": false, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-bdd491f43b0c1c85-1ff1dff6259853a6.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-bdd491f43b0c1c85-1ff1dff6259853a6.json deleted file mode 100644 index 7990535db..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-bdd491f43b0c1c85-1ff1dff6259853a6.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "ids": [ - "america/costa_rica" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "S", - "J", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2524501427, - -1545071027, - 288770400, - 297234000, - 320220000, - 328683600, - 664264800, - 678344400, - 695714400, - 700635600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -20173 - }, - { - "index": 4, - "is_dst": false, - "offset": -20173 - }, - { - "index": 9, - "is_dst": false, - "offset": -21600 - }, - { - "index": 13, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-be07532f1af7dccb-c46363544856c51a.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-be07532f1af7dccb-c46363544856c51a.json deleted file mode 100644 index c444c4450..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-be07532f1af7dccb-c46363544856c51a.json +++ /dev/null @@ -1,136 +0,0 @@ -{ - "ids": [ - "america/matamoros" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": { - "abbr": "CDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1514743200, - 576057600, - 594198000, - 828864000, - 846399600, - 860313600, - 877849200, - 891763200, - 909298800, - 923212800, - 941353200, - 954662400, - 972802800, - 989136000, - 1001833200, - 1018166400, - 1035702000, - 1049616000, - 1067151600, - 1081065600, - 1099206000, - 1112515200, - 1130655600, - 1143964800, - 1162105200, - 1175414400, - 1193554800, - 1207468800, - 1225004400, - 1238918400, - 1256454000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -23400 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-be7c1ce9358259b9-dd8dbb8792edcde4.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-be7c1ce9358259b9-dd8dbb8792edcde4.json deleted file mode 100644 index 4fe295904..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-be7c1ce9358259b9-dd8dbb8792edcde4.json +++ /dev/null @@ -1,152 +0,0 @@ -{ - "ids": [ - "america/indiana/vevay" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "C", - "W", - "T", - "\u0000", - "C", - "P", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": { - "abbr": "EDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5 - ], - "transitions": [ - -2717647200, - -1633276800, - -1615136400, - -1601827200, - -1583686800, - -880214400, - -769395600, - -765392400, - -495043200, - -21488400, - -5767200, - 9961200, - 25682400, - 41410800, - 57736800, - 73465200, - 89186400, - 1143961200, - 1162101600, - 1173596400, - 1194156000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -20416 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - }, - { - "index": 20, - "is_dst": false, - "offset": -18000 - }, - { - "index": 24, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-be9bc4833f21d33b-3ba3edd32c70ba0b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-be9bc4833f21d33b-3ba3edd32c70ba0b.json deleted file mode 100644 index d2d3ded04..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-be9bc4833f21d33b-3ba3edd32c70ba0b.json +++ /dev/null @@ -1,225 +0,0 @@ -{ - "ids": [ - "america/cuiaba" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-04", - "offset": -14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1767212140, - -1206954000, - -1191358800, - -1175371200, - -1159822800, - -633816000, - -622065600, - -602280000, - -591829200, - -570744000, - -560206800, - -539121600, - -531349200, - -191361600, - -184194000, - -155160000, - -150066000, - -128894400, - -121122000, - -99950400, - -89586000, - -68414400, - -57963600, - 499752000, - 511239600, - 530596800, - 540270000, - 562132800, - 571201200, - 592977600, - 602046000, - 624427200, - 634705200, - 656481600, - 666759600, - 687931200, - 697604400, - 719985600, - 728449200, - 750830400, - 761713200, - 782280000, - 793162800, - 813729600, - 824007600, - 844574400, - 856062000, - 876110400, - 888721200, - 908078400, - 919566000, - 938923200, - 951620400, - 970977600, - 982465200, - 1003032000, - 1013914800, - 1036296000, - 1045364400, - 1099368000, - 1108868400, - 1129435200, - 1140318000, - 1162699200, - 1172372400, - 1192334400, - 1203217200, - 1224388800, - 1234666800, - 1255838400, - 1266721200, - 1287288000, - 1298170800, - 1318737600, - 1330225200, - 1350792000, - 1361070000, - 1382241600, - 1392519600, - 1413691200, - 1424574000, - 1445140800, - 1456023600, - 1476590400, - 1487473200, - 1508040000, - 1518922800, - 1541304000, - 1550372400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -13460 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c0a7b3c45458ac17-ba490af355c677a5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c0a7b3c45458ac17-ba490af355c677a5.json deleted file mode 100644 index 7ae69ad8a..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c0a7b3c45458ac17-ba490af355c677a5.json +++ /dev/null @@ -1,201 +0,0 @@ -{ - "ids": [ - "america/argentina/jujuy", - "america/jujuy" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 5, - 4, - 5, - 2, - 3, - 2, - 5, - 6, - 4, - 5, - 4, - 7, - 4, - 5, - 4 - ], - "transitions": [ - -2372096328, - -1567453392, - -1233432000, - -1222981200, - -1205956800, - -1194037200, - -1172865600, - -1162501200, - -1141329600, - -1130965200, - -1109793600, - -1099429200, - -1078257600, - -1067806800, - -1046635200, - -1036270800, - -1015099200, - -1004734800, - -983563200, - -973198800, - -952027200, - -941576400, - -931032000, - -900882000, - -890337600, - -833749200, - -827265600, - -752274000, - -733780800, - -197326800, - -190843200, - -184194000, - -164491200, - -152658000, - -132955200, - -121122000, - -101419200, - -86821200, - -71092800, - -54766800, - -39038400, - -23317200, - -7588800, - 128142000, - 136605600, - 596948400, - 605066400, - 624423600, - 636516000, - 657086400, - 669178800, - 686721600, - 694231200, - 699415200, - 719377200, - 731469600, - 938919600, - 952052400, - 1198983600, - 1205632800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -15672 - }, - { - "index": 4, - "is_dst": false, - "offset": -15408 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -7200 - }, - { - "index": 12, - "is_dst": true, - "offset": -7200 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c0d9ca8c12b3167c-bdffa0be746988ad.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c0d9ca8c12b3167c-bdffa0be746988ad.json deleted file mode 100644 index 545316e65..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c0d9ca8c12b3167c-bdffa0be746988ad.json +++ /dev/null @@ -1,121 +0,0 @@ -{ - "ids": [ - "pacific/rarotonga" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "1", - "0", - "3", - "0", - "\u0000", - "-", - "0", - "9", - "3", - "0", - "\u0000", - "-", - "1", - "0", - "\u0000" - ], - "posix": { - "abbr": "-10", - "offset": -36000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4 - ], - "transitions": [ - -2209555256, - -543072056, - 279714600, - 289387800, - 309952800, - 320837400, - 341402400, - 352287000, - 372852000, - 384341400, - 404906400, - 415791000, - 436356000, - 447240600, - 467805600, - 478690200, - 499255200, - 510139800, - 530704800, - 541589400, - 562154400, - 573643800, - 594208800, - 605093400, - 625658400, - 636543000, - 657108000, - 667992600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 48056 - }, - { - "index": 0, - "is_dst": false, - "offset": -38344 - }, - { - "index": 4, - "is_dst": false, - "offset": -37800 - }, - { - "index": 10, - "is_dst": true, - "offset": -34200 - }, - { - "index": 16, - "is_dst": false, - "offset": -36000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c0f3e562f1a83b48-754171746ec35fdf.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c0f3e562f1a83b48-754171746ec35fdf.json deleted file mode 100644 index 5e631f00b..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c0f3e562f1a83b48-754171746ec35fdf.json +++ /dev/null @@ -1,76 +0,0 @@ -{ - "ids": [ - "pacific/bougainville" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "M", - "M", - "T", - "\u0000", - "+", - "1", - "0", - "\u0000", - "+", - "0", - "9", - "\u0000", - "+", - "1", - "1", - "\u0000" - ], - "posix": { - "abbr": "+11", - "offset": 39600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 4 - ], - "transitions": [ - -2840178136, - -2366790512, - -868010400, - -768906000, - 1419696000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 37336 - }, - { - "index": 4, - "is_dst": false, - "offset": 35312 - }, - { - "index": 9, - "is_dst": false, - "offset": 36000 - }, - { - "index": 13, - "is_dst": false, - "offset": 32400 - }, - { - "index": 17, - "is_dst": false, - "offset": 39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c17291eb667fe274-9c32ee5720049b17.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c17291eb667fe274-9c32ee5720049b17.json deleted file mode 100644 index 194f4aea2..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c17291eb667fe274-9c32ee5720049b17.json +++ /dev/null @@ -1,126 +0,0 @@ -{ - "ids": [ - "america/noronha", - "brazil/denoronha" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "2", - "\u0000", - "-", - "0", - "1", - "\u0000" - ], - "posix": { - "abbr": "-02", - "offset": -7200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1767217820, - -1206961200, - -1191366000, - -1175378400, - -1159830000, - -633823200, - -622072800, - -602287200, - -591836400, - -570751200, - -560214000, - -539128800, - -531356400, - -191368800, - -184201200, - -155167200, - -150073200, - -128901600, - -121129200, - -99957600, - -89593200, - -68421600, - -57970800, - 499744800, - 511232400, - 530589600, - 540262800, - 562125600, - 571194000, - 592970400, - 602038800, - 624420000, - 634698000, - 938916000, - 951613200, - 970970400, - 971571600, - 1003024800, - 1013907600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -7780 - }, - { - "index": 4, - "is_dst": false, - "offset": -7200 - }, - { - "index": 8, - "is_dst": true, - "offset": -3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c306ac2cd34a373c-28210e229694b763.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c306ac2cd34a373c-28210e229694b763.json deleted file mode 100644 index dce2fb1e7..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c306ac2cd34a373c-28210e229694b763.json +++ /dev/null @@ -1,391 +0,0 @@ -{ - "ids": [ - "atlantic/azores" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "H", - "M", - "T", - "\u0000", - "-", - "0", - "2", - "\u0000", - "-", - "0", - "1", - "\u0000", - "+", - "0", - "0", - "\u0000", - "W", - "E", - "T", - "\u0000", - "W", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "-01", - "offset": -3600, - "transition": { - "abbr": "+00", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 3600 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 0 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 4, - 3, - 2, - 3, - 4, - 3, - 2, - 3, - 4, - 3, - 2, - 3, - 4, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 6, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 7, - 8, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5 - ], - "transitions": [ - -2713904240, - -1830376800, - -1689548400, - -1677794400, - -1667426400, - -1647730800, - -1635890400, - -1616194800, - -1604354400, - -1584658800, - -1572732000, - -1553036400, - -1541196000, - -1521500400, - -1442444400, - -1427670000, - -1379286000, - -1364770800, - -1348441200, - -1333321200, - -1316386800, - -1301266800, - -1284332400, - -1269817200, - -1221433200, - -1206918000, - -1191193200, - -1175468400, - -1127689200, - -1111964400, - -1096844400, - -1080514800, - -1063580400, - -1049065200, - -1033340400, - -1017615600, - -1002495600, - -986166000, - -969231600, - -950482800, - -942015600, - -922489200, - -906937200, - -891126000, - -877302000, - -873676800, - -864000000, - -857948400, - -845852400, - -842832000, - -831340800, - -825894000, - -814402800, - -810777600, - -799891200, - -794444400, - -782953200, - -779328000, - -768441600, - -762994800, - -749084400, - -733359600, - -717624000, - -701899200, - -686174400, - -670449600, - -654724800, - -639000000, - -623275200, - -607550400, - -591825600, - -575496000, - -559771200, - -544046400, - -528321600, - -512596800, - -496872000, - -481147200, - -465422400, - -449697600, - -433972800, - -417643200, - -401918400, - -386193600, - -370468800, - -354744000, - -339019200, - -323294400, - -307569600, - -291844800, - -276120000, - -260395200, - -244670400, - -228340800, - -212616000, - -196891200, - -181166400, - -165441600, - -149716800, - -133992000, - -118267200, - -102542400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 504925200, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 725421600, - 733280400, - 740278800, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -6160 - }, - { - "index": 4, - "is_dst": false, - "offset": -6872 - }, - { - "index": 8, - "is_dst": false, - "offset": -7200 - }, - { - "index": 12, - "is_dst": true, - "offset": -3600 - }, - { - "index": 16, - "is_dst": true, - "offset": 0 - }, - { - "index": 12, - "is_dst": false, - "offset": -3600 - }, - { - "index": 12, - "is_dst": true, - "offset": 0 - }, - { - "index": 20, - "is_dst": false, - "offset": 0 - }, - { - "index": 24, - "is_dst": true, - "offset": 3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c3aa55f145295944-b4abe09b076130a1.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c3aa55f145295944-b4abe09b076130a1.json deleted file mode 100644 index 59378c1f7..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c3aa55f145295944-b4abe09b076130a1.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "ids": [ - "america/cayenne" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -1846269040, - -71092800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -12560 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": false, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c4897a4741bd9e82-683561b8f9f17d89.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c4897a4741bd9e82-683561b8f9f17d89.json deleted file mode 100644 index df97328ba..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c4897a4741bd9e82-683561b8f9f17d89.json +++ /dev/null @@ -1,290 +0,0 @@ -{ - "ids": [ - "america/north_dakota/center" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "M", - "W", - "T", - "\u0000", - "M", - "P", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": { - "abbr": "CDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5 - ], - "transitions": [ - -2717643600, - -1633273200, - -1615132800, - -1601823600, - -1583683200, - -880210800, - -769395600, - -765388800, - -84380400, - -68659200, - -52930800, - -37209600, - -21481200, - -5760000, - 9968400, - 25689600, - 41418000, - 57744000, - 73472400, - 89193600, - 104922000, - 120643200, - 126694800, - 152092800, - 162378000, - 183542400, - 199270800, - 215596800, - 230720400, - 247046400, - 262774800, - 278496000, - 294224400, - 309945600, - 325674000, - 341395200, - 357123600, - 372844800, - 388573200, - 404899200, - 420022800, - 436348800, - 452077200, - 467798400, - 483526800, - 499248000, - 514976400, - 530697600, - 544611600, - 562147200, - 576061200, - 594201600, - 607510800, - 625651200, - 638960400, - 657100800, - 671014800, - 688550400, - 702464400, - 720000000, - 733910400, - 752050800, - 765360000, - 783500400, - 796809600, - 814950000, - 828864000, - 846399600, - 860313600, - 877849200, - 891763200, - 909298800, - 923212800, - 941353200, - 954662400, - 972802800, - 986112000, - 1004252400, - 1018166400, - 1035702000, - 1049616000, - 1067151600, - 1081065600, - 1099206000, - 1112515200, - 1130655600, - 1143964800, - 1162105200, - 1173600000, - 1194159600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -24312 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": true, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -21600 - }, - { - "index": 20, - "is_dst": false, - "offset": -21600 - }, - { - "index": 24, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c595527c9472a8dc-2c9b581a736bf287.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c595527c9472a8dc-2c9b581a736bf287.json deleted file mode 100644 index 95be9458a..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c595527c9472a8dc-2c9b581a736bf287.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "ids": [ - "australia/perth", - "australia/west" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "W", - "S", - "T", - "\u0000", - "A", - "W", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AWST", - "offset": 28800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2337925404, - -1672552800, - -1665381600, - -883634400, - -876117600, - -860392800, - -844668000, - 152042400, - 162928800, - 436298400, - 447184800, - 690314400, - 699386400, - 1165082400, - 1174759200, - 1193508000, - 1206813600, - 1224957600, - 1238263200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 27804 - }, - { - "index": 4, - "is_dst": false, - "offset": 28800 - }, - { - "index": 9, - "is_dst": true, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c6ecc61594d93097-5e860f0bd6a333be.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c6ecc61594d93097-5e860f0bd6a333be.json deleted file mode 100644 index deb089170..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c6ecc61594d93097-5e860f0bd6a333be.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt-10" - ], - "tzif": { - "designations": [ - "+", - "1", - "0", - "\u0000" - ], - "posix": { - "abbr": "+10", - "offset": 36000, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 36000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c711f11538fdc96f-85ebfaa68dc0ffa7.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c711f11538fdc96f-85ebfaa68dc0ffa7.json deleted file mode 100644 index e5010ee14..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c711f11538fdc96f-85ebfaa68dc0ffa7.json +++ /dev/null @@ -1,218 +0,0 @@ -{ - "ids": [ - "europe/volgograd" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000", - "M", - "S", - "K", - "\u0000", - "M", - "S", - "D", - "\u0000" - ], - "posix": { - "abbr": "MSK", - "offset": 10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 6, - 5, - 6, - 5, - 6, - 2, - 4, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 7, - 6, - 2, - 6 - ], - "transitions": [ - -1577761060, - -1247540400, - 354916800, - 370724400, - 386452800, - 402260400, - 417988800, - 433796400, - 449611200, - 465343200, - 481068000, - 496792800, - 512517600, - 528242400, - 543967200, - 559692000, - 575416800, - 575420400, - 591145200, - 606870000, - 622594800, - 638319600, - 654649200, - 670374000, - 701820000, - 701823600, - 717548400, - 733273200, - 748998000, - 764722800, - 780447600, - 796172400, - 811897200, - 828226800, - 846370800, - 859676400, - 877820400, - 891126000, - 909270000, - 922575600, - 941324400, - 954025200, - 972774000, - 985474800, - 1004223600, - 1017529200, - 1035673200, - 1048978800, - 1067122800, - 1080428400, - 1099177200, - 1111878000, - 1130626800, - 1143327600, - 1162076400, - 1174777200, - 1193526000, - 1206831600, - 1224975600, - 1238281200, - 1256425200, - 1269730800, - 1288479600, - 1301180400, - 1414274400, - 1540681200, - 1609020000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 10660 - }, - { - "index": 4, - "is_dst": false, - "offset": 10800 - }, - { - "index": 8, - "is_dst": false, - "offset": 14400 - }, - { - "index": 12, - "is_dst": true, - "offset": 18000 - }, - { - "index": 16, - "is_dst": true, - "offset": 14400 - }, - { - "index": 20, - "is_dst": true, - "offset": 14400 - }, - { - "index": 16, - "is_dst": false, - "offset": 10800 - }, - { - "index": 16, - "is_dst": false, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c79f46dbe8103377-e8facc989838f86e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c79f46dbe8103377-e8facc989838f86e.json deleted file mode 100644 index 8349027e3..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c79f46dbe8103377-e8facc989838f86e.json +++ /dev/null @@ -1,85 +0,0 @@ -{ - "ids": [ - "asia/ho_chi_minh", - "asia/saigon" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "L", - "M", - "T", - "\u0000", - "+", - "0", - "7", - "\u0000", - "+", - "0", - "8", - "\u0000", - "+", - "0", - "9", - "\u0000" - ], - "posix": { - "abbr": "+07", - "offset": 25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2004073590, - -1851577590, - -852105600, - -782643600, - -767869200, - -718095600, - -457772400, - -315648000, - 171820800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 25590 - }, - { - "index": 4, - "is_dst": false, - "offset": 25590 - }, - { - "index": 9, - "is_dst": false, - "offset": 25200 - }, - { - "index": 13, - "is_dst": false, - "offset": 28800 - }, - { - "index": 17, - "is_dst": false, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c7a9617c25e2eb1a-a45856d769ed8bd1.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c7a9617c25e2eb1a-a45856d769ed8bd1.json deleted file mode 100644 index cbb29f2bd..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c7a9617c25e2eb1a-a45856d769ed8bd1.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "ids": [ - "america/argentina/la_rioja" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 2, - 4, - 5, - 4, - 5, - 4, - 6, - 4, - 2, - 4, - 5, - 4 - ], - "transitions": [ - -2372095956, - -1567453392, - -1233432000, - -1222981200, - -1205956800, - -1194037200, - -1172865600, - -1162501200, - -1141329600, - -1130965200, - -1109793600, - -1099429200, - -1078257600, - -1067806800, - -1046635200, - -1036270800, - -1015099200, - -1004734800, - -983563200, - -973198800, - -952027200, - -941576400, - -931032000, - -900882000, - -890337600, - -833749200, - -827265600, - -752274000, - -733780800, - -197326800, - -190843200, - -184194000, - -164491200, - -152658000, - -132955200, - -121122000, - -101419200, - -86821200, - -71092800, - -54766800, - -39038400, - -23317200, - -7588800, - 128142000, - 136605600, - 596948400, - 605066400, - 624423600, - 636516000, - 656478000, - 667792800, - 673588800, - 687927600, - 699415200, - 719377200, - 731469600, - 938919600, - 952052400, - 1086058800, - 1087704000, - 1198983600, - 1205632800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -16044 - }, - { - "index": 4, - "is_dst": false, - "offset": -15408 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -7200 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c7d151e4111f596b-4a2ec14b29782b7d.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c7d151e4111f596b-4a2ec14b29782b7d.json deleted file mode 100644 index 678672f8f..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c7d151e4111f596b-4a2ec14b29782b7d.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt-4" - ], - "tzif": { - "designations": [ - "+", - "0", - "4", - "\u0000" - ], - "posix": { - "abbr": "+04", - "offset": 14400, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c83537c4365f1258-d9a68e73bb4be055.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c83537c4365f1258-d9a68e73bb4be055.json deleted file mode 100644 index 6cb111677..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c83537c4365f1258-d9a68e73bb4be055.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt+10" - ], - "tzif": { - "designations": [ - "-", - "1", - "0", - "\u0000" - ], - "posix": { - "abbr": "-10", - "offset": -36000, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -36000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-c841f0aca0404a73-7b63e278b233c118.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-c841f0aca0404a73-7b63e278b233c118.json deleted file mode 100644 index 539904c94..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-c841f0aca0404a73-7b63e278b233c118.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "ids": [ - "asia/tashkent" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "7", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1 - ], - "transitions": [ - -1441168631, - -1247547600, - 354909600, - 370717200, - 386445600, - 402253200, - 417981600, - 433789200, - 449604000, - 465336000, - 481060800, - 496785600, - 512510400, - 528235200, - 543960000, - 559684800, - 575409600, - 591134400, - 606859200, - 622584000, - 638308800, - 654638400, - 670363200, - 670366800, - 686091600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 16631 - }, - { - "index": 4, - "is_dst": false, - "offset": 18000 - }, - { - "index": 8, - "is_dst": false, - "offset": 21600 - }, - { - "index": 12, - "is_dst": true, - "offset": 25200 - }, - { - "index": 4, - "is_dst": true, - "offset": 21600 - }, - { - "index": 8, - "is_dst": true, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-ca31f6cb7d44b091-e3b00a5eecc4d20e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-ca31f6cb7d44b091-e3b00a5eecc4d20e.json deleted file mode 100644 index c681e6e1f..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-ca31f6cb7d44b091-e3b00a5eecc4d20e.json +++ /dev/null @@ -1,429 +0,0 @@ -{ - "ids": [ - "america/halifax", - "canada/atlantic" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "S", - "T", - "\u0000", - "A", - "D", - "T", - "\u0000", - "A", - "W", - "T", - "\u0000", - "A", - "P", - "T", - "\u0000" - ], - "posix": { - "abbr": "AST", - "offset": -14400, - "transition": { - "abbr": "ADT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2131645536, - -1696276800, - -1680469200, - -1632074400, - -1615143600, - -1566763200, - -1557090000, - -1535486400, - -1524949200, - -1504468800, - -1493413200, - -1472414400, - -1461963600, - -1440964800, - -1429390800, - -1409515200, - -1396731600, - -1376856000, - -1366491600, - -1346616000, - -1333832400, - -1313956800, - -1303678800, - -1282507200, - -1272661200, - -1251057600, - -1240088400, - -1219608000, - -1207429200, - -1188763200, - -1175979600, - -1157313600, - -1143925200, - -1124049600, - -1113771600, - -1091390400, - -1081026000, - -1059854400, - -1050786000, - -1030910400, - -1018126800, - -999460800, - -986677200, - -965592000, - -955227600, - -935956800, - -923173200, - -904507200, - -891723600, - -880221600, - -769395600, - -765399600, - -747252000, - -733950000, - -715802400, - -702500400, - -684352800, - -671050800, - -652903200, - -639601200, - -589399200, - -576097200, - -557949600, - -544647600, - -526500000, - -513198000, - -495050400, - -481748400, - -431546400, - -418244400, - -400096800, - -386794800, - -368647200, - -355345200, - -337197600, - -323895600, - -242244000, - -226522800, - -210794400, - -195073200, - -179344800, - -163623600, - -147895200, - -131569200, - -116445600, - -100119600, - -84391200, - -68670000, - -52941600, - -37220400, - -21492000, - -5770800, - 9957600, - 25678800, - 41407200, - 57733200, - 73461600, - 89182800, - 104911200, - 120632400, - 136360800, - 152082000, - 167810400, - 183531600, - 199260000, - 215586000, - 230709600, - 247035600, - 262764000, - 278485200, - 294213600, - 309934800, - 325663200, - 341384400, - 357112800, - 372834000, - 388562400, - 404888400, - 420012000, - 436338000, - 452066400, - 467787600, - 483516000, - 499237200, - 514965600, - 530686800, - 544600800, - 562136400, - 576050400, - 594190800, - 607500000, - 625640400, - 638949600, - 657090000, - 671004000, - 688539600, - 702453600, - 719989200, - 733903200, - 752043600, - 765352800, - 783493200, - 796802400, - 814942800, - 828856800, - 846392400, - 860306400, - 877842000, - 891756000, - 909291600, - 923205600, - 941346000, - 954655200, - 972795600, - 986104800, - 1004245200, - 1018159200, - 1035694800, - 1049608800, - 1067144400, - 1081058400, - 1099198800, - 1112508000, - 1130648400, - 1143957600, - 1162098000, - 1173592800, - 1194152400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -15264 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-cab5fb5bf9e7625f-1067c0dfd63ecd48.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-cab5fb5bf9e7625f-1067c0dfd63ecd48.json deleted file mode 100644 index 69d33da75..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-cab5fb5bf9e7625f-1067c0dfd63ecd48.json +++ /dev/null @@ -1,252 +0,0 @@ -{ - "ids": [ - "australia/adelaide", - "australia/south" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "C", - "S", - "T", - "\u0000", - "A", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "ACST", - "offset": 34200, - "transition": { - "abbr": "ACDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 4, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 1, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3 - ], - "transitions": [ - -2364110060, - -2230189200, - -1672558200, - -1665387000, - -883639800, - -876123000, - -860398200, - -844673400, - -828343800, - -813223800, - 57688200, - 67969800, - 89137800, - 100024200, - 120587400, - 131473800, - 152037000, - 162923400, - 183486600, - 194977800, - 215541000, - 226427400, - 246990600, - 257877000, - 278440200, - 289326600, - 309889800, - 320776200, - 341339400, - 352225800, - 372789000, - 384280200, - 404843400, - 415729800, - 436293000, - 447179400, - 467742600, - 478629000, - 499192200, - 511288200, - 530037000, - 542737800, - 562091400, - 574792200, - 594145800, - 606241800, - 625595400, - 637691400, - 657045000, - 667931400, - 688494600, - 701195400, - 719944200, - 731435400, - 751998600, - 764094600, - 783448200, - 796149000, - 814897800, - 828203400, - 846347400, - 859653000, - 877797000, - 891102600, - 909246600, - 922552200, - 941301000, - 954001800, - 972750600, - 985451400, - 1004200200, - 1017505800, - 1035649800, - 1048955400, - 1067099400, - 1080405000, - 1099153800, - 1111854600, - 1130603400, - 1143909000, - 1162053000, - 1174753800, - 1193502600, - 1207413000, - 1223137800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 33260 - }, - { - "index": 4, - "is_dst": false, - "offset": 32400 - }, - { - "index": 4, - "is_dst": false, - "offset": 34200 - }, - { - "index": 9, - "is_dst": true, - "offset": 37800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-cad03994b9f9755d-97b6146f918ae75d.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-cad03994b9f9755d-97b6146f918ae75d.json deleted file mode 100644 index 6147ac1dc..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-cad03994b9f9755d-97b6146f918ae75d.json +++ /dev/null @@ -1,88 +0,0 @@ -{ - "ids": [ - "pacific/kosrae" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "1", - "\u0000", - "+", - "0", - "9", - "\u0000", - "+", - "1", - "0", - "\u0000", - "+", - "1", - "2", - "\u0000" - ], - "posix": { - "abbr": "+11", - "offset": 39600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 4, - 3, - 2, - 5, - 2 - ], - "transitions": [ - -3944631116, - -2177491916, - -1743678000, - -1606813200, - -1041418800, - -907408800, - -770634000, - -7988400, - 915105600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -47284 - }, - { - "index": 0, - "is_dst": false, - "offset": 39116 - }, - { - "index": 4, - "is_dst": false, - "offset": 39600 - }, - { - "index": 8, - "is_dst": false, - "offset": 32400 - }, - { - "index": 12, - "is_dst": false, - "offset": 36000 - }, - { - "index": 16, - "is_dst": false, - "offset": 43200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-cb2104a4192b82ba-b494193506d89632.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-cb2104a4192b82ba-b494193506d89632.json deleted file mode 100644 index a8038daed..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-cb2104a4192b82ba-b494193506d89632.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "ids": [ - "asia/kabul" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "4", - "3", - "0", - "\u0000" - ], - "posix": { - "abbr": "+0430", - "offset": 16200, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -2524538208, - -788932800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 16608 - }, - { - "index": 4, - "is_dst": false, - "offset": 14400 - }, - { - "index": 8, - "is_dst": false, - "offset": 16200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-cb56ff55ea32bb92-824dc78032a2b743.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-cb56ff55ea32bb92-824dc78032a2b743.json deleted file mode 100644 index cb01345b0..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-cb56ff55ea32bb92-824dc78032a2b743.json +++ /dev/null @@ -1,102 +0,0 @@ -{ - "ids": [ - "asia/pontianak" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "M", - "T", - "\u0000", - "+", - "0", - "7", - "3", - "0", - "\u0000", - "+", - "0", - "9", - "\u0000", - "+", - "0", - "8", - "\u0000", - "W", - "I", - "T", - "A", - "\u0000", - "W", - "I", - "B", - "\u0000" - ], - "posix": { - "abbr": "WIB", - "offset": 25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 4, - 2, - 5, - 6 - ], - "transitions": [ - -1946186240, - -1172906240, - -881220600, - -766054800, - -683883000, - -620812800, - -189415800, - 567964800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 26240 - }, - { - "index": 4, - "is_dst": false, - "offset": 26240 - }, - { - "index": 8, - "is_dst": false, - "offset": 27000 - }, - { - "index": 14, - "is_dst": false, - "offset": 32400 - }, - { - "index": 18, - "is_dst": false, - "offset": 28800 - }, - { - "index": 22, - "is_dst": false, - "offset": 28800 - }, - { - "index": 27, - "is_dst": false, - "offset": 25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-cbcf966225780b1c-cd390ae6b2c0eb46.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-cbcf966225780b1c-cd390ae6b2c0eb46.json deleted file mode 100644 index 128da8de4..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-cbcf966225780b1c-cd390ae6b2c0eb46.json +++ /dev/null @@ -1,601 +0,0 @@ -{ - "ids": [ - "asia/hebron" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000", - "I", - "S", - "T", - "\u0000", - "I", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 4, - 4 - ] - }, - "time": 180000 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 4, - 4 - ] - }, - "time": 180000 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2185410023, - -933638400, - -923097600, - -919036800, - -857347200, - -844300800, - -825811200, - -812678400, - -794188800, - -779846400, - -762652800, - -748310400, - -731116800, - -399088800, - -386650800, - -368330400, - -355114800, - -336790800, - -323654400, - -305168400, - -292032000, - -273632400, - -260496000, - -242096400, - -228960000, - -210560400, - -197424000, - -178938000, - -165801600, - -147402000, - -134265600, - -115866000, - -102643200, - -84330000, - -81313200, - 142380000, - 150843600, - 167176800, - 178664400, - 334101600, - 337730400, - 452642400, - 462319200, - 482277600, - 494370000, - 516751200, - 526424400, - 545436000, - 558478800, - 576626400, - 589323600, - 609890400, - 620773200, - 638316000, - 651618000, - 669765600, - 683672400, - 701820000, - 715726800, - 733701600, - 747176400, - 765151200, - 778021200, - 796600800, - 810075600, - 820447200, - 828655200, - 843170400, - 860104800, - 874620000, - 891554400, - 906069600, - 924213600, - 939934800, - 956268000, - 971989200, - 987717600, - 1003438800, - 1019167200, - 1034888400, - 1050616800, - 1066338000, - 1082066400, - 1096581600, - 1113516000, - 1128380400, - 1143842400, - 1158872400, - 1175378400, - 1189638000, - 1206655200, - 1220216400, - 1238104800, - 1252015200, - 1269554400, - 1281474000, - 1301608860, - 1312146000, - 1314655200, - 1317330000, - 1333058400, - 1348178400, - 1364508000, - 1380229200, - 1395957600, - 1414098000, - 1427493600, - 1445551200, - 1458946800, - 1477692000, - 1490396400, - 1509141600, - 1521846000, - 1540591200, - 1553810400, - 1572037200, - 1585346400, - 1603490400, - 1616796000, - 1635458400, - 1648332000, - 1666998000, - 1682726400, - 1698447600, - 1713571200, - 1729897200, - 1744416000, - 1761346800, - 1774656000, - 1792796400, - 1806105600, - 1824850800, - 1837555200, - 1856300400, - 1869004800, - 1887750000, - 1901059200, - 1919199600, - 1932508800, - 1950649200, - 1963958400, - 1982703600, - 1995408000, - 2014153200, - 2026857600, - 2045602800, - 2058307200, - 2077052400, - 2090361600, - 2107897200, - 2121811200, - 2138742000, - 2153260800, - 2168982000, - 2184710400, - 2199826800, - 2216160000, - 2230066800, - 2234304000, - 2234905200, - 2248214400, - 2260911600, - 2264544000, - 2266354800, - 2279664000, - 2291756400, - 2295388800, - 2297804400, - 2311113600, - 2321996400, - 2326233600, - 2329254000, - 2342563200, - 2352841200, - 2356473600, - 2361308400, - 2374012800, - 2383686000, - 2387318400, - 2392758000, - 2405462400, - 2413926000, - 2418163200, - 2424207600, - 2437516800, - 2444770800, - 2448403200, - 2455657200, - 2468966400, - 2475010800, - 2479248000, - 2487106800, - 2500416000, - 2505855600, - 2509488000, - 2519161200, - 2531865600, - 2536700400, - 2540332800, - 2550610800, - 2563315200, - 2566940400, - 2571177600, - 2582060400, - 2595369600, - 2597785200, - 2601417600, - 2613510000, - 2626819200, - 2628025200, - 2632262400, - 2644959600, - 2658268800, - 2658870000, - 2663107200, - 2676409200, - 2693347200, - 2708463600, - 2724192000, - 2739913200, - 2754432000, - 2771362800, - 2785276800, - 2802812400, - 2816121600, - 2834262000, - 2847571200, - 2866316400, - 2879020800, - 2897766000, - 2910470400, - 2929215600, - 2941920000, - 2960665200, - 2973974400, - 2992114800, - 3005424000, - 3023564400, - 3036873600, - 3055618800, - 3068323200, - 3087068400, - 3099772800, - 3117913200, - 3131827200, - 3148758000, - 3163276800, - 3179602800, - 3194726400, - 3209842800, - 3226176000, - 3240687600, - 3244320000, - 3244921200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 8423 - }, - { - "index": 4, - "is_dst": false, - "offset": 7200 - }, - { - "index": 8, - "is_dst": true, - "offset": 10800 - }, - { - "index": 13, - "is_dst": false, - "offset": 7200 - }, - { - "index": 17, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-cbf2a88472b0862a-102842a46b61e6b2.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-cbf2a88472b0862a-102842a46b61e6b2.json deleted file mode 100644 index 4e6bd4127..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-cbf2a88472b0862a-102842a46b61e6b2.json +++ /dev/null @@ -1,158 +0,0 @@ -{ - "ids": [ - "asia/choibalsan", - "asia/ulaanbaatar", - "asia/ulan_bator" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "7", - "\u0000", - "+", - "0", - "8", - "\u0000", - "+", - "0", - "9", - "\u0000" - ], - "posix": { - "abbr": "+08", - "offset": 28800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2032931252, - 252435600, - 417974400, - 433782000, - 449596800, - 465318000, - 481046400, - 496767600, - 512496000, - 528217200, - 543945600, - 559666800, - 575395200, - 591116400, - 606844800, - 622566000, - 638294400, - 654620400, - 670348800, - 686070000, - 701798400, - 717519600, - 733248000, - 748969200, - 764697600, - 780418800, - 796147200, - 811868400, - 828201600, - 843922800, - 859651200, - 875372400, - 891100800, - 906822000, - 988394400, - 1001696400, - 1017424800, - 1033146000, - 1048874400, - 1064595600, - 1080324000, - 1096045200, - 1111773600, - 1127494800, - 1143223200, - 1159549200, - 1427479200, - 1443193200, - 1458928800, - 1474642800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 25652 - }, - { - "index": 4, - "is_dst": false, - "offset": 25200 - }, - { - "index": 8, - "is_dst": false, - "offset": 28800 - }, - { - "index": 12, - "is_dst": true, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-cd29e561a284f373-910bdbc4f0527bd3.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-cd29e561a284f373-910bdbc4f0527bd3.json deleted file mode 100644 index e0bfdd464..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-cd29e561a284f373-910bdbc4f0527bd3.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt-2" - ], - "tzif": { - "designations": [ - "+", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "+02", - "offset": 7200, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-ce5eb7cf8993261f-8a81fb1cdccc4d1c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-ce5eb7cf8993261f-8a81fb1cdccc4d1c.json deleted file mode 100644 index ab5d013be..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-ce5eb7cf8993261f-8a81fb1cdccc4d1c.json +++ /dev/null @@ -1,234 +0,0 @@ -{ - "ids": [ - "europe/riga" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "R", - "M", - "T", - "\u0000", - "L", - "S", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "M", - "S", - "K", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "M", - "S", - "D", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 14400 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 5, - 6, - 5, - 6, - 5, - 6, - 4, - 7, - 4, - 7, - 4, - 7, - 4, - 7, - 4, - 7, - 4, - 7, - 4, - 7, - 4, - 7, - 4, - 8, - 3, - 8, - 3, - 8, - 3, - 8, - 3, - 8, - 3, - 8, - 3, - 8, - 3, - 8, - 3, - 8, - 3, - 8, - 3, - 8, - 3 - ], - "transitions": [ - -2840146594, - -1632008194, - -1618702594, - -1601681794, - -1597275394, - -1377308194, - -928029600, - -899521200, - -857257200, - -844556400, - -828226800, - -812502000, - -796777200, - -795834000, - 354920400, - 370728000, - 386456400, - 402264000, - 417992400, - 433800000, - 449614800, - 465346800, - 481071600, - 496796400, - 512521200, - 528246000, - 543970800, - 559695600, - 575420400, - 591145200, - 606870000, - 622598400, - 638323200, - 654652800, - 670377600, - 686102400, - 701827200, - 717552000, - 733276800, - 749001600, - 764726400, - 780451200, - 796176000, - 811900800, - 828230400, - 843955200, - 859683600, - 877827600, - 891133200, - 909277200, - 922582800, - 941331600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 5794 - }, - { - "index": 4, - "is_dst": false, - "offset": 5794 - }, - { - "index": 8, - "is_dst": true, - "offset": 9394 - }, - { - "index": 12, - "is_dst": false, - "offset": 7200 - }, - { - "index": 16, - "is_dst": false, - "offset": 10800 - }, - { - "index": 20, - "is_dst": true, - "offset": 7200 - }, - { - "index": 25, - "is_dst": false, - "offset": 3600 - }, - { - "index": 29, - "is_dst": true, - "offset": 14400 - }, - { - "index": 33, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-ce802c28d3beb1b-ba901eac8e518953.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-ce802c28d3beb1b-ba901eac8e518953.json deleted file mode 100644 index ccb22044c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-ce802c28d3beb1b-ba901eac8e518953.json +++ /dev/null @@ -1,362 +0,0 @@ -{ - "ids": [ - "america/santiago", - "chile/continental" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "S", - "M", - "T", - "\u0000", - "-", - "0", - "5", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-04", - "offset": -14400, - "transition": { - "abbr": "-03", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 4, - 1, - 6 - ] - }, - "time": 86400 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 9, - 1, - 6 - ] - }, - "time": 86400 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 3, - 2, - 3, - 5, - 4, - 2, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5 - ], - "transitions": [ - -2524504635, - -1892661435, - -1688410800, - -1619205435, - -1593806400, - -1335986235, - -1335985200, - -1317585600, - -1304362800, - -1286049600, - -1272826800, - -1254513600, - -1241290800, - -1222977600, - -1209754800, - -1191355200, - -1178132400, - -870552000, - -865278000, - -740520000, - -736635600, - -718056000, - -713649600, - -36619200, - -23922000, - -3355200, - 7527600, - 24465600, - 37767600, - 55915200, - 69217200, - 87969600, - 100666800, - 118209600, - 132116400, - 150868800, - 163566000, - 182318400, - 195620400, - 213768000, - 227070000, - 245217600, - 258519600, - 277272000, - 289969200, - 308721600, - 321418800, - 340171200, - 353473200, - 371620800, - 384922800, - 403070400, - 416372400, - 434520000, - 447822000, - 466574400, - 479271600, - 498024000, - 510721200, - 529473600, - 545194800, - 560923200, - 574225200, - 592372800, - 605674800, - 624427200, - 637124400, - 653457600, - 668574000, - 687326400, - 700628400, - 718776000, - 732078000, - 750225600, - 763527600, - 781675200, - 794977200, - 813729600, - 826426800, - 845179200, - 859690800, - 876628800, - 889930800, - 906868800, - 923194800, - 939528000, - 952830000, - 971582400, - 984279600, - 1003032000, - 1015729200, - 1034481600, - 1047178800, - 1065931200, - 1079233200, - 1097380800, - 1110682800, - 1128830400, - 1142132400, - 1160884800, - 1173582000, - 1192334400, - 1206846000, - 1223784000, - 1237086000, - 1255233600, - 1270350000, - 1286683200, - 1304823600, - 1313899200, - 1335668400, - 1346558400, - 1367118000, - 1378612800, - 1398567600, - 1410062400, - 1463281200, - 1471147200, - 1494730800, - 1502596800, - 1526180400, - 1534046400, - 1554606000, - 1567915200, - 1586055600, - 1599364800, - 1617505200, - 1630814400, - 1648954800, - 1662868800, - 1680404400, - 1693713600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -16965 - }, - { - "index": 4, - "is_dst": false, - "offset": -16965 - }, - { - "index": 8, - "is_dst": false, - "offset": -18000 - }, - { - "index": 12, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -14400 - }, - { - "index": 16, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-cec2538008230fcd-ccebd08eb7ebe4cc.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-cec2538008230fcd-ccebd08eb7ebe4cc.json deleted file mode 100644 index 2fc517519..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-cec2538008230fcd-ccebd08eb7ebe4cc.json +++ /dev/null @@ -1,244 +0,0 @@ -{ - "ids": [ - "america/grand_turk" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "K", - "M", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000", - "A", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": { - "abbr": "EDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 3 - ], - "transitions": [ - -2524504528, - -1827687170, - 294217200, - 309938400, - 325666800, - 341388000, - 357116400, - 372837600, - 388566000, - 404892000, - 420015600, - 436341600, - 452070000, - 467791200, - 483519600, - 499240800, - 514969200, - 530690400, - 544604400, - 562140000, - 576054000, - 594194400, - 607503600, - 625644000, - 638953200, - 657093600, - 671007600, - 688543200, - 702457200, - 719992800, - 733906800, - 752047200, - 765356400, - 783496800, - 796806000, - 814946400, - 828860400, - 846396000, - 860310000, - 877845600, - 891759600, - 909295200, - 923209200, - 941349600, - 954658800, - 972799200, - 986108400, - 1004248800, - 1018162800, - 1035698400, - 1049612400, - 1067148000, - 1081062000, - 1099202400, - 1112511600, - 1130652000, - 1143961200, - 1162101600, - 1173596400, - 1194156000, - 1205046000, - 1225605600, - 1236495600, - 1257055200, - 1268550000, - 1289109600, - 1299999600, - 1320559200, - 1331449200, - 1352008800, - 1362898800, - 1383458400, - 1394348400, - 1414908000, - 1425798000, - 1520751600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -17072 - }, - { - "index": 4, - "is_dst": false, - "offset": -18430 - }, - { - "index": 8, - "is_dst": false, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -14400 - }, - { - "index": 16, - "is_dst": false, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-d1e4208290566f2f-fef488990f0df138.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-d1e4208290566f2f-fef488990f0df138.json deleted file mode 100644 index 1143b008e..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-d1e4208290566f2f-fef488990f0df138.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt+4" - ], - "tzif": { - "designations": [ - "-", - "0", - "4", - "\u0000" - ], - "posix": { - "abbr": "-04", - "offset": -14400, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-d28e0bb7485a8522-8a404ad1261c36fd.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-d28e0bb7485a8522-8a404ad1261c36fd.json deleted file mode 100644 index 79a16fe04..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-d28e0bb7485a8522-8a404ad1261c36fd.json +++ /dev/null @@ -1,300 +0,0 @@ -{ - "ids": [ - "america/havana", - "cuba" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "H", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -18000, - "transition": { - "abbr": "CDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 0 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 3600 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2524501832, - -1402813824, - -1311534000, - -1300996800, - -933534000, - -925675200, - -902084400, - -893620800, - -870030000, - -862171200, - -775681200, - -767822400, - -744231600, - -736372800, - -144702000, - -134251200, - -113425200, - -102542400, - -86295600, - -72907200, - -54154800, - -41457600, - -21495600, - -5774400, - 9954000, - 25675200, - 41403600, - 57729600, - 73458000, - 87364800, - 104907600, - 118900800, - 136357200, - 150436800, - 167806800, - 183528000, - 199256400, - 215582400, - 230706000, - 247032000, - 263365200, - 276667200, - 290581200, - 308721600, - 322030800, - 340171200, - 358318800, - 371620800, - 389768400, - 403070400, - 421218000, - 434520000, - 452667600, - 466574400, - 484117200, - 498024000, - 511333200, - 529473600, - 542782800, - 560923200, - 574837200, - 592372800, - 606286800, - 623822400, - 638946000, - 655876800, - 671000400, - 687330000, - 702450000, - 718779600, - 733899600, - 750229200, - 765349200, - 781678800, - 796798800, - 813128400, - 828853200, - 844578000, - 860302800, - 876632400, - 891147600, - 909291600, - 922597200, - 941346000, - 954651600, - 972795600, - 986101200, - 1004245200, - 1018155600, - 1035694800, - 1049605200, - 1067144400, - 1080450000, - 1162098000, - 1173589200, - 1193547600, - 1205643600, - 1224997200, - 1236488400, - 1256446800, - 1268542800, - 1288501200, - 1300597200, - 1321160400, - 1333256400, - 1352005200, - 1362891600, - 1383454800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -19768 - }, - { - "index": 4, - "is_dst": false, - "offset": -19776 - }, - { - "index": 8, - "is_dst": false, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-d3201ec4e70c92f3-9fcf4d0393f1be7f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-d3201ec4e70c92f3-9fcf4d0393f1be7f.json deleted file mode 100644 index 2f24785fa..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-d3201ec4e70c92f3-9fcf4d0393f1be7f.json +++ /dev/null @@ -1,226 +0,0 @@ -{ - "ids": [ - "asia/khandyga" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "8", - "\u0000", - "+", - "0", - "9", - "\u0000", - "+", - "1", - "0", - "\u0000", - "+", - "1", - "1", - "\u0000" - ], - "posix": { - "abbr": "+09", - "offset": 32400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 6, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 9, - 7, - 2 - ], - "transitions": [ - -1579424533, - -1247558400, - 354898800, - 370706400, - 386434800, - 402242400, - 417970800, - 433778400, - 449593200, - 465325200, - 481050000, - 496774800, - 512499600, - 528224400, - 543949200, - 559674000, - 575398800, - 591123600, - 606848400, - 622573200, - 638298000, - 654627600, - 670352400, - 670356000, - 686080800, - 695757600, - 701802000, - 717526800, - 733251600, - 748976400, - 764701200, - 780426000, - 796150800, - 811875600, - 828205200, - 846349200, - 859654800, - 877798800, - 891104400, - 909248400, - 922554000, - 941302800, - 954003600, - 972752400, - 985453200, - 1004202000, - 1017507600, - 1035651600, - 1048957200, - 1067101200, - 1072882800, - 1080403200, - 1099152000, - 1111852800, - 1130601600, - 1143302400, - 1162051200, - 1174752000, - 1193500800, - 1206806400, - 1224950400, - 1238256000, - 1256400000, - 1269705600, - 1288454400, - 1301155200, - 1315832400, - 1414252800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 32533 - }, - { - "index": 4, - "is_dst": false, - "offset": 28800 - }, - { - "index": 8, - "is_dst": false, - "offset": 32400 - }, - { - "index": 12, - "is_dst": true, - "offset": 36000 - }, - { - "index": 4, - "is_dst": true, - "offset": 32400 - }, - { - "index": 8, - "is_dst": true, - "offset": 32400 - }, - { - "index": 8, - "is_dst": true, - "offset": 36000 - }, - { - "index": 12, - "is_dst": false, - "offset": 36000 - }, - { - "index": 16, - "is_dst": true, - "offset": 39600 - }, - { - "index": 16, - "is_dst": false, - "offset": 39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-d41aa71f743154ff-b40be739a0203b7b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-d41aa71f743154ff-b40be739a0203b7b.json deleted file mode 100644 index cedff7da1..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-d41aa71f743154ff-b40be739a0203b7b.json +++ /dev/null @@ -1,219 +0,0 @@ -{ - "ids": [ - "asia/anadyr" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "2", - "\u0000", - "+", - "1", - "3", - "\u0000", - "+", - "1", - "4", - "\u0000", - "+", - "1", - "1", - "\u0000" - ], - "posix": { - "abbr": "+12", - "offset": 43200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 5, - 6, - 7, - 8, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 4, - 1, - 7, - 6, - 7, - 1 - ], - "transitions": [ - -1441194596, - -1247572800, - 354884400, - 370692000, - 386420400, - 386424000, - 402231600, - 417960000, - 433767600, - 449582400, - 465314400, - 481039200, - 496764000, - 512488800, - 528213600, - 543938400, - 559663200, - 575388000, - 591112800, - 606837600, - 622562400, - 638287200, - 654616800, - 670341600, - 670345200, - 686070000, - 695746800, - 701791200, - 717516000, - 733240800, - 748965600, - 764690400, - 780415200, - 796140000, - 811864800, - 828194400, - 846338400, - 859644000, - 877788000, - 891093600, - 909237600, - 922543200, - 941292000, - 953992800, - 972741600, - 985442400, - 1004191200, - 1017496800, - 1035640800, - 1048946400, - 1067090400, - 1080396000, - 1099144800, - 1111845600, - 1130594400, - 1143295200, - 1162044000, - 1174744800, - 1193493600, - 1206799200, - 1224943200, - 1238248800, - 1256392800, - 1269698400, - 1269702000, - 1288450800, - 1301151600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 42596 - }, - { - "index": 4, - "is_dst": false, - "offset": 43200 - }, - { - "index": 8, - "is_dst": false, - "offset": 46800 - }, - { - "index": 12, - "is_dst": true, - "offset": 50400 - }, - { - "index": 8, - "is_dst": true, - "offset": 46800 - }, - { - "index": 16, - "is_dst": true, - "offset": 43200 - }, - { - "index": 4, - "is_dst": true, - "offset": 43200 - }, - { - "index": 16, - "is_dst": false, - "offset": 39600 - }, - { - "index": 4, - "is_dst": true, - "offset": 46800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-d4999f54d6ffa1ff-6c09ad333694e2e2.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-d4999f54d6ffa1ff-6c09ad333694e2e2.json deleted file mode 100644 index 63ebde05d..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-d4999f54d6ffa1ff-6c09ad333694e2e2.json +++ /dev/null @@ -1,308 +0,0 @@ -{ - "ids": [ - "america/anchorage", - "us/alaska" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "S", - "T", - "\u0000", - "A", - "W", - "T", - "\u0000", - "A", - "P", - "T", - "\u0000", - "A", - "H", - "S", - "T", - "\u0000", - "A", - "H", - "D", - "T", - "\u0000", - "Y", - "S", - "T", - "\u0000", - "A", - "K", - "S", - "T", - "\u0000", - "A", - "K", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AKST", - "offset": -32400, - "transition": { - "abbr": "AKDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 7, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8, - 9, - 8 - ], - "transitions": [ - -3225223727, - -2188951224, - -880200000, - -769395600, - -765378000, - -86882400, - -21470400, - -5749200, - 9979200, - 25700400, - 41428800, - 57754800, - 73483200, - 89204400, - 104932800, - 120654000, - 126705600, - 152103600, - 162388800, - 183553200, - 199281600, - 215607600, - 230731200, - 247057200, - 262785600, - 278506800, - 294235200, - 309956400, - 325684800, - 341406000, - 357134400, - 372855600, - 388584000, - 404910000, - 420033600, - 436359600, - 439030800, - 452084400, - 467805600, - 483534000, - 499255200, - 514983600, - 530704800, - 544618800, - 562154400, - 576068400, - 594208800, - 607518000, - 625658400, - 638967600, - 657108000, - 671022000, - 688557600, - 702471600, - 720007200, - 733921200, - 752061600, - 765370800, - 783511200, - 796820400, - 814960800, - 828874800, - 846410400, - 860324400, - 877860000, - 891774000, - 909309600, - 923223600, - 941364000, - 954673200, - 972813600, - 986122800, - 1004263200, - 1018177200, - 1035712800, - 1049626800, - 1067162400, - 1081076400, - 1099216800, - 1112526000, - 1130666400, - 1143975600, - 1162116000, - 1173610800, - 1194170400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 50424 - }, - { - "index": 0, - "is_dst": false, - "offset": -35976 - }, - { - "index": 4, - "is_dst": false, - "offset": -36000 - }, - { - "index": 8, - "is_dst": true, - "offset": -32400 - }, - { - "index": 12, - "is_dst": true, - "offset": -32400 - }, - { - "index": 16, - "is_dst": false, - "offset": -36000 - }, - { - "index": 21, - "is_dst": true, - "offset": -32400 - }, - { - "index": 26, - "is_dst": false, - "offset": -32400 - }, - { - "index": 30, - "is_dst": false, - "offset": -32400 - }, - { - "index": 35, - "is_dst": true, - "offset": -28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-d7daa3dddb990290-9677a0a27cb05bbf.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-d7daa3dddb990290-9677a0a27cb05bbf.json deleted file mode 100644 index 3cc17d1c8..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-d7daa3dddb990290-9677a0a27cb05bbf.json +++ /dev/null @@ -1,249 +0,0 @@ -{ - "ids": [ - "europe/simferopol" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "S", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "M", - "S", - "K", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "M", - "S", - "D", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "MSK", - "offset": 10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 5, - 4, - 5, - 4, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 6, - 3, - 2, - 7, - 2, - 7, - 2, - 7, - 6, - 3, - 6, - 3, - 6, - 3, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 7, - 2, - 8, - 3 - ], - "transitions": [ - -2840148984, - -1441160160, - -1247536800, - -888894000, - -857257200, - -844556400, - -828226800, - -812502000, - -811648800, - 354920400, - 370728000, - 386456400, - 402264000, - 417992400, - 433800000, - 449614800, - 465346800, - 481071600, - 496796400, - 512521200, - 528246000, - 543970800, - 559695600, - 575420400, - 591145200, - 606870000, - 622594800, - 646786800, - 701042400, - 717552000, - 733276800, - 749001600, - 764726400, - 767739600, - 780447600, - 796172400, - 811897200, - 828219600, - 846374400, - 859683600, - 877827600, - 891133200, - 909277200, - 922582800, - 941331600, - 954032400, - 972781200, - 985482000, - 1004230800, - 1017536400, - 1035680400, - 1048986000, - 1067130000, - 1080435600, - 1099184400, - 1111885200, - 1130634000, - 1143334800, - 1162083600, - 1174784400, - 1193533200, - 1206838800, - 1224982800, - 1238288400, - 1256432400, - 1269738000, - 1288486800, - 1301187600, - 1319936400, - 1332637200, - 1351386000, - 1364691600, - 1382835600, - 1396137600, - 1414274400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 8184 - }, - { - "index": 4, - "is_dst": false, - "offset": 8160 - }, - { - "index": 8, - "is_dst": false, - "offset": 7200 - }, - { - "index": 12, - "is_dst": false, - "offset": 10800 - }, - { - "index": 16, - "is_dst": true, - "offset": 7200 - }, - { - "index": 21, - "is_dst": false, - "offset": 3600 - }, - { - "index": 25, - "is_dst": true, - "offset": 14400 - }, - { - "index": 29, - "is_dst": true, - "offset": 10800 - }, - { - "index": 12, - "is_dst": false, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-daeed2898ecd770c-e038bd49b50a31ad.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-daeed2898ecd770c-e038bd49b50a31ad.json deleted file mode 100644 index e0fb52b0f..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-daeed2898ecd770c-e038bd49b50a31ad.json +++ /dev/null @@ -1,320 +0,0 @@ -{ - "ids": [ - "chile/easterisland", - "pacific/easter" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "E", - "M", - "T", - "\u0000", - "-", - "0", - "7", - "\u0000", - "-", - "0", - "6", - "\u0000", - "-", - "0", - "5", - "\u0000" - ], - "posix": { - "abbr": "-06", - "offset": -21600, - "transition": { - "abbr": "-05", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 4, - 1, - 6 - ] - }, - "time": 79200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 9, - 1, - 6 - ] - }, - "time": 79200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5 - ], - "transitions": [ - -2524495352, - -1178124152, - -36619200, - -23922000, - -3355200, - 7527600, - 24465600, - 37767600, - 55915200, - 69217200, - 87969600, - 100666800, - 118209600, - 132116400, - 150868800, - 163566000, - 182318400, - 195620400, - 213768000, - 227070000, - 245217600, - 258519600, - 277272000, - 289969200, - 308721600, - 321418800, - 340171200, - 353473200, - 371620800, - 384922800, - 403070400, - 416372400, - 434520000, - 447822000, - 466574400, - 479271600, - 498024000, - 510721200, - 529473600, - 545194800, - 560923200, - 574225200, - 592372800, - 605674800, - 624427200, - 637124400, - 653457600, - 668574000, - 687326400, - 700628400, - 718776000, - 732078000, - 750225600, - 763527600, - 781675200, - 794977200, - 813729600, - 826426800, - 845179200, - 859690800, - 876628800, - 889930800, - 906868800, - 923194800, - 939528000, - 952830000, - 971582400, - 984279600, - 1003032000, - 1015729200, - 1034481600, - 1047178800, - 1065931200, - 1079233200, - 1097380800, - 1110682800, - 1128830400, - 1142132400, - 1160884800, - 1173582000, - 1192334400, - 1206846000, - 1223784000, - 1237086000, - 1255233600, - 1270350000, - 1286683200, - 1304823600, - 1313899200, - 1335668400, - 1346558400, - 1367118000, - 1378612800, - 1398567600, - 1410062400, - 1463281200, - 1471147200, - 1494730800, - 1502596800, - 1526180400, - 1534046400, - 1554606000, - 1567915200, - 1586055600, - 1599364800, - 1617505200, - 1630814400, - 1648954800, - 1662868800, - 1680404400, - 1693713600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -26248 - }, - { - "index": 4, - "is_dst": false, - "offset": -26248 - }, - { - "index": 8, - "is_dst": false, - "offset": -25200 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 12, - "is_dst": false, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-dbf1c543882cf4b7-4c28ed2b1a3fde.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-dbf1c543882cf4b7-4c28ed2b1a3fde.json deleted file mode 100644 index aa8677825..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-dbf1c543882cf4b7-4c28ed2b1a3fde.json +++ /dev/null @@ -1,221 +0,0 @@ -{ - "ids": [ - "europe/ulyanovsk" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "+04", - "offset": 14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 5, - 1, - 6, - 7, - 8, - 4, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 2, - 1, - 2 - ], - "transitions": [ - -1593820800, - -1247540400, - 354916800, - 370724400, - 386452800, - 402260400, - 417988800, - 433796400, - 449611200, - 465343200, - 481068000, - 496792800, - 512517600, - 528242400, - 543967200, - 559692000, - 575416800, - 591141600, - 606866400, - 606870000, - 622594800, - 638319600, - 654649200, - 670374000, - 670377600, - 686102400, - 695779200, - 701823600, - 717548400, - 733273200, - 748998000, - 764722800, - 780447600, - 796172400, - 811897200, - 828226800, - 846370800, - 859676400, - 877820400, - 891126000, - 909270000, - 922575600, - 941324400, - 954025200, - 972774000, - 985474800, - 1004223600, - 1017529200, - 1035673200, - 1048978800, - 1067122800, - 1080428400, - 1099177200, - 1111878000, - 1130626800, - 1143327600, - 1162076400, - 1174777200, - 1193526000, - 1206831600, - 1224975600, - 1238281200, - 1256425200, - 1269730800, - 1288479600, - 1301180400, - 1414274400, - 1459033200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 11616 - }, - { - "index": 4, - "is_dst": false, - "offset": 10800 - }, - { - "index": 8, - "is_dst": false, - "offset": 14400 - }, - { - "index": 12, - "is_dst": true, - "offset": 18000 - }, - { - "index": 4, - "is_dst": true, - "offset": 14400 - }, - { - "index": 8, - "is_dst": true, - "offset": 14400 - }, - { - "index": 16, - "is_dst": true, - "offset": 10800 - }, - { - "index": 4, - "is_dst": true, - "offset": 10800 - }, - { - "index": 16, - "is_dst": false, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-dc6b1be48367c4f1-ff82f7bca90c006a.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-dc6b1be48367c4f1-ff82f7bca90c006a.json deleted file mode 100644 index de032f791..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-dc6b1be48367c4f1-ff82f7bca90c006a.json +++ /dev/null @@ -1,254 +0,0 @@ -{ - "ids": [ - "europe/kaliningrad" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000", - "M", - "S", - "K", - "\u0000", - "M", - "S", - "D", - "\u0000", - "+", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3, - 4, - 3, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 7, - 3 - ], - "transitions": [ - -2422056120, - -1693706400, - -1680483600, - -1663455600, - -1650150000, - -1632006000, - -1618700400, - -938905200, - -857257200, - -844556400, - -828226800, - -812502000, - -796777200, - -781052400, - -780372000, - -778730400, - -762663600, - -749095200, - 354920400, - 370728000, - 386456400, - 402264000, - 417992400, - 433800000, - 449614800, - 465346800, - 481071600, - 496796400, - 512521200, - 528246000, - 543970800, - 559695600, - 575420400, - 591145200, - 606870000, - 622598400, - 638323200, - 654652800, - 670377600, - 686102400, - 701827200, - 717552000, - 733276800, - 749001600, - 764726400, - 780451200, - 796176000, - 811900800, - 828230400, - 846374400, - 859680000, - 877824000, - 891129600, - 909273600, - 922579200, - 941328000, - 954028800, - 972777600, - 985478400, - 1004227200, - 1017532800, - 1035676800, - 1048982400, - 1067126400, - 1080432000, - 1099180800, - 1111881600, - 1130630400, - 1143331200, - 1162080000, - 1174780800, - 1193529600, - 1206835200, - 1224979200, - 1238284800, - 1256428800, - 1269734400, - 1288483200, - 1301184000, - 1414278000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 4920 - }, - { - "index": 4, - "is_dst": false, - "offset": 3600 - }, - { - "index": 8, - "is_dst": true, - "offset": 7200 - }, - { - "index": 13, - "is_dst": false, - "offset": 7200 - }, - { - "index": 17, - "is_dst": true, - "offset": 10800 - }, - { - "index": 22, - "is_dst": false, - "offset": 10800 - }, - { - "index": 26, - "is_dst": true, - "offset": 14400 - }, - { - "index": 30, - "is_dst": false, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-dc8c7c76ac036db-d70c3a6a43eef52e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-dc8c7c76ac036db-d70c3a6a43eef52e.json deleted file mode 100644 index 7cea1f80c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-dc8c7c76ac036db-d70c3a6a43eef52e.json +++ /dev/null @@ -1,57 +0,0 @@ -{ - "ids": [ - "indian/mauritius" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000" - ], - "posix": { - "abbr": "+04", - "offset": 14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1988164200, - 403041600, - 417034800, - 1224972000, - 1238274000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 13800 - }, - { - "index": 4, - "is_dst": false, - "offset": 14400 - }, - { - "index": 8, - "is_dst": true, - "offset": 18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-dc8ea6d022a7ebec-ad1e97b20a9ac2d1.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-dc8ea6d022a7ebec-ad1e97b20a9ac2d1.json deleted file mode 100644 index f575f321c..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-dc8ea6d022a7ebec-ad1e97b20a9ac2d1.json +++ /dev/null @@ -1,237 +0,0 @@ -{ - "ids": [ - "america/sao_paulo", - "brazil/east" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1767214412, - -1206957600, - -1191362400, - -1175374800, - -1159826400, - -633819600, - -622069200, - -602283600, - -591832800, - -570747600, - -560210400, - -539125200, - -531352800, - -195426000, - -189381600, - -184197600, - -155163600, - -150069600, - -128898000, - -121125600, - -99954000, - -89589600, - -68418000, - -57967200, - 499748400, - 511236000, - 530593200, - 540266400, - 562129200, - 571197600, - 592974000, - 602042400, - 624423600, - 634701600, - 656478000, - 666756000, - 687927600, - 697600800, - 719982000, - 728445600, - 750826800, - 761709600, - 782276400, - 793159200, - 813726000, - 824004000, - 844570800, - 856058400, - 876106800, - 888717600, - 908074800, - 919562400, - 938919600, - 951616800, - 970974000, - 982461600, - 1003028400, - 1013911200, - 1036292400, - 1045360800, - 1066532400, - 1076810400, - 1099364400, - 1108864800, - 1129431600, - 1140314400, - 1162695600, - 1172368800, - 1192330800, - 1203213600, - 1224385200, - 1234663200, - 1255834800, - 1266717600, - 1287284400, - 1298167200, - 1318734000, - 1330221600, - 1350788400, - 1361066400, - 1382238000, - 1392516000, - 1413687600, - 1424570400, - 1445137200, - 1456020000, - 1476586800, - 1487469600, - 1508036400, - 1518919200, - 1541300400, - 1550368800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -11188 - }, - { - "index": 4, - "is_dst": false, - "offset": -10800 - }, - { - "index": 8, - "is_dst": true, - "offset": -7200 - }, - { - "index": 4, - "is_dst": true, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-dd90c0bd2a5d5bcb-2aa25dc1cf531605.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-dd90c0bd2a5d5bcb-2aa25dc1cf531605.json deleted file mode 100644 index 1137243ba..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-dd90c0bd2a5d5bcb-2aa25dc1cf531605.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "ids": [ - "america/guayaquil" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "Q", - "M", - "T", - "\u0000", - "-", - "0", - "5", - "\u0000", - "-", - "0", - "4", - "\u0000" - ], - "posix": { - "abbr": "-05", - "offset": -18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2 - ], - "transitions": [ - -2524502440, - -1230749160, - 722926800, - 728884800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -19160 - }, - { - "index": 4, - "is_dst": false, - "offset": -18840 - }, - { - "index": 8, - "is_dst": false, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-df3a174a6f1304b9-f75548fda320ff46.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-df3a174a6f1304b9-f75548fda320ff46.json deleted file mode 100644 index cfc695cf9..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-df3a174a6f1304b9-f75548fda320ff46.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "ids": [ - "africa/algiers" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "M", - "T", - "\u0000", - "W", - "E", - "T", - "\u0000", - "W", - "E", - "S", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CET", - "offset": 3600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 5, - 4, - 2, - 4, - 2, - 3, - 2, - 3, - 4, - 5, - 4, - 2, - 3, - 2, - 4 - ], - "transitions": [ - -2486592732, - -1855958961, - -1689814800, - -1680397200, - -1665363600, - -1648342800, - -1635123600, - -1616893200, - -1604278800, - -1585443600, - -1574038800, - -1552266000, - -1539997200, - -1531443600, - -956365200, - -950486400, - -942012000, - -812502000, - -796262400, - -781052400, - -766630800, - -733280400, - -439430400, - -212029200, - 41468400, - 54774000, - 231724800, - 246236400, - 259545600, - 275274000, - 309740400, - 325468800, - 341802000, - 357523200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 732 - }, - { - "index": 4, - "is_dst": false, - "offset": 561 - }, - { - "index": 8, - "is_dst": false, - "offset": 0 - }, - { - "index": 12, - "is_dst": true, - "offset": 3600 - }, - { - "index": 17, - "is_dst": false, - "offset": 3600 - }, - { - "index": 21, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-dfcaab41c352fc41-f08544c2a1c5e1f4.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-dfcaab41c352fc41-f08544c2a1c5e1f4.json deleted file mode 100644 index 333eb9c9d..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-dfcaab41c352fc41-f08544c2a1c5e1f4.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "ids": [ - "antarctica/rothera" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000", - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1 - ], - "transitions": [ - 218246400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - }, - { - "index": 4, - "is_dst": false, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-e12ae166d8468131-cc2618ea05d8e04.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-e12ae166d8468131-cc2618ea05d8e04.json deleted file mode 100644 index 1c2b35cd3..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-e12ae166d8468131-cc2618ea05d8e04.json +++ /dev/null @@ -1,113 +0,0 @@ -{ - "ids": [ - "america/boa_vista" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-04", - "offset": -14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1767211040, - -1206954000, - -1191358800, - -1175371200, - -1159822800, - -633816000, - -622065600, - -602280000, - -591829200, - -570744000, - -560206800, - -539121600, - -531349200, - -191361600, - -184194000, - -155160000, - -150066000, - -128894400, - -121122000, - -99950400, - -89586000, - -68414400, - -57963600, - 499752000, - 511239600, - 530596800, - 540270000, - 562132800, - 571201200, - 938923200, - 951620400, - 970977600, - 971578800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -14560 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-e20ebf54a807fe0e-21908c60644da78a.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-e20ebf54a807fe0e-21908c60644da78a.json deleted file mode 100644 index c68b781d2..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-e20ebf54a807fe0e-21908c60644da78a.json +++ /dev/null @@ -1,64 +0,0 @@ -{ - "ids": [ - "america/bogota" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "B", - "M", - "T", - "\u0000", - "-", - "0", - "5", - "\u0000", - "-", - "0", - "4", - "\u0000" - ], - "posix": { - "abbr": "-05", - "offset": -18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2 - ], - "transitions": [ - -2707671824, - -1739041424, - 704869200, - 729057600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -17776 - }, - { - "index": 4, - "is_dst": false, - "offset": -17776 - }, - { - "index": 8, - "is_dst": false, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-e271b0f2662b1c04-4d92ffee32151a2b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-e271b0f2662b1c04-4d92ffee32151a2b.json deleted file mode 100644 index c9063946b..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-e271b0f2662b1c04-4d92ffee32151a2b.json +++ /dev/null @@ -1,103 +0,0 @@ -{ - "ids": [ - "asia/jakarta" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "B", - "M", - "T", - "\u0000", - "+", - "0", - "7", - "2", - "0", - "\u0000", - "+", - "0", - "7", - "3", - "0", - "\u0000", - "+", - "0", - "9", - "\u0000", - "+", - "0", - "8", - "\u0000", - "W", - "I", - "B", - "\u0000" - ], - "posix": { - "abbr": "WIB", - "offset": 25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 3, - 5, - 3, - 6 - ], - "transitions": [ - -3231299232, - -1451719200, - -1172906400, - -876641400, - -766054800, - -683883000, - -620812800, - -189415800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 25632 - }, - { - "index": 4, - "is_dst": false, - "offset": 25632 - }, - { - "index": 8, - "is_dst": false, - "offset": 26400 - }, - { - "index": 14, - "is_dst": false, - "offset": 27000 - }, - { - "index": 20, - "is_dst": false, - "offset": 32400 - }, - { - "index": 24, - "is_dst": false, - "offset": 28800 - }, - { - "index": 28, - "is_dst": false, - "offset": 25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-e2789756bce07cca-ccde47e32bb222dd.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-e2789756bce07cca-ccde47e32bb222dd.json deleted file mode 100644 index 18673c394..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-e2789756bce07cca-ccde47e32bb222dd.json +++ /dev/null @@ -1,212 +0,0 @@ -{ - "ids": [ - "australia/lhi", - "australia/lord_howe" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "E", - "S", - "T", - "\u0000", - "+", - "1", - "0", - "3", - "0", - "\u0000", - "+", - "1", - "1", - "3", - "0", - "\u0000", - "+", - "1", - "1", - "\u0000" - ], - "posix": { - "abbr": "+1030", - "offset": 37800, - "transition": { - "abbr": "+11", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 4, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 1800, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 1, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4 - ], - "transitions": [ - -2364114980, - 352216800, - 372785400, - 384273000, - 404839800, - 415722600, - 436289400, - 447172200, - 467739000, - 478621800, - 499188600, - 511282800, - 530033400, - 542732400, - 562087800, - 574786800, - 594142200, - 606236400, - 625591800, - 636476400, - 657041400, - 667926000, - 688491000, - 699375600, - 719940600, - 731430000, - 751995000, - 762879600, - 783444600, - 794329200, - 814894200, - 828198000, - 846343800, - 859647600, - 877793400, - 891097200, - 909243000, - 922546800, - 941297400, - 953996400, - 967303800, - 985446000, - 1004196600, - 1017500400, - 1035646200, - 1048950000, - 1067095800, - 1080399600, - 1099150200, - 1111849200, - 1130599800, - 1143903600, - 1162049400, - 1174748400, - 1193499000, - 1207407600, - 1223134200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 38180 - }, - { - "index": 4, - "is_dst": false, - "offset": 36000 - }, - { - "index": 9, - "is_dst": false, - "offset": 37800 - }, - { - "index": 15, - "is_dst": true, - "offset": 41400 - }, - { - "index": 21, - "is_dst": true, - "offset": 39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-e2bf7ec87041f1fb-a95a48336ec715b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-e2bf7ec87041f1fb-a95a48336ec715b.json deleted file mode 100644 index 4e5aef64b..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-e2bf7ec87041f1fb-a95a48336ec715b.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt+12" - ], - "tzif": { - "designations": [ - "-", - "1", - "2", - "\u0000" - ], - "posix": { - "abbr": "-12", - "offset": -43200, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -43200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-e330917831501a06-d9bbab45a5d619ee.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-e330917831501a06-d9bbab45a5d619ee.json deleted file mode 100644 index 2d8a9772e..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-e330917831501a06-d9bbab45a5d619ee.json +++ /dev/null @@ -1,80 +0,0 @@ -{ - "ids": [ - "antarctica/troll" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000", - "+", - "0", - "0", - "\u0000", - "+", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "+00", - "offset": 0, - "transition": { - "abbr": "+02", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 10800 - }, - "savings": 7200, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 3600 - } - } - }, - "transition_types": [ - 1, - 2, - 1 - ], - "transitions": [ - 1108166400, - 1111885200, - 1130634000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - }, - { - "index": 4, - "is_dst": false, - "offset": 0 - }, - { - "index": 8, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-e3d5b2baffd22f2d-357299132d8d271d.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-e3d5b2baffd22f2d-357299132d8d271d.json deleted file mode 100644 index bc3f16e21..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-e3d5b2baffd22f2d-357299132d8d271d.json +++ /dev/null @@ -1,55 +0,0 @@ -{ - "ids": [ - "antarctica/vostok" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000", - "+", - "0", - "7", - "\u0000", - "+", - "0", - "5", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 0, - 1, - 2 - ], - "transitions": [ - -380073600, - 760035600, - 783648000, - 1702839600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - }, - { - "index": 4, - "is_dst": false, - "offset": 25200 - }, - { - "index": 8, - "is_dst": false, - "offset": 18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-e4c142bca3031674-241fa86fba2429ca.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-e4c142bca3031674-241fa86fba2429ca.json deleted file mode 100644 index 772f1fe7e..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-e4c142bca3031674-241fa86fba2429ca.json +++ /dev/null @@ -1,108 +0,0 @@ -{ - "ids": [ - "pacific/norfolk" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "1", - "1", - "2", - "\u0000", - "+", - "1", - "1", - "3", - "0", - "\u0000", - "+", - "1", - "2", - "3", - "0", - "\u0000", - "+", - "1", - "1", - "\u0000" - ], - "posix": { - "abbr": "+11", - "offset": 39600, - "transition": { - "abbr": "+12", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 4, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 1, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 4 - ], - "transitions": [ - -2177493112, - -599656320, - 152029800, - 162916200, - 1443882600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 40312 - }, - { - "index": 4, - "is_dst": false, - "offset": 40320 - }, - { - "index": 10, - "is_dst": false, - "offset": 41400 - }, - { - "index": 16, - "is_dst": true, - "offset": 45000 - }, - { - "index": 22, - "is_dst": false, - "offset": 39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-e5822ac52a06a527-178271b8801d30a4.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-e5822ac52a06a527-178271b8801d30a4.json deleted file mode 100644 index 67998b197..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-e5822ac52a06a527-178271b8801d30a4.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "ids": [ - "america/tegucigalpa" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1538503868, - 547020000, - 559717200, - 578469600, - 591166800, - 1146981600, - 1154926800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -20932 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-e65fa49c7674041-4eb385a4f2f10599.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-e65fa49c7674041-4eb385a4f2f10599.json deleted file mode 100644 index 4d7bceebf..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-e65fa49c7674041-4eb385a4f2f10599.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "ids": [ - "antarctica/casey" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000", - "+", - "0", - "8", - "\u0000", - "+", - "1", - "1", - "\u0000" - ], - "posix": { - "abbr": "+08", - "offset": 28800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -31536000, - 1255802400, - 1267714800, - 1319738400, - 1329843600, - 1477065600, - 1520701200, - 1538856000, - 1552752000, - 1570129200, - 1583596800, - 1601740860, - 1615640400, - 1633190460, - 1647090000, - 1664640060, - 1678291200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - }, - { - "index": 4, - "is_dst": false, - "offset": 28800 - }, - { - "index": 8, - "is_dst": false, - "offset": 39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-e713de09d9781804-8382a2158e285fa1.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-e713de09d9781804-8382a2158e285fa1.json deleted file mode 100644 index 68b2f9bce..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-e713de09d9781804-8382a2158e285fa1.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "ids": [ - "indian/chagos" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000" - ], - "posix": { - "abbr": "+06", - "offset": 21600, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -1988167780, - 820436400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 17380 - }, - { - "index": 4, - "is_dst": false, - "offset": 18000 - }, - { - "index": 8, - "is_dst": false, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-e7907c2354d7f128-5e2105dd6e3756ba.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-e7907c2354d7f128-5e2105dd6e3756ba.json deleted file mode 100644 index 01edda424..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-e7907c2354d7f128-5e2105dd6e3756ba.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "ids": [ - "pacific/gambier" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "9", - "\u0000" - ], - "posix": { - "abbr": "-09", - "offset": -32400, - "transition": null - }, - "transition_types": [ - 1 - ], - "transitions": [ - -1806678012 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -32388 - }, - { - "index": 4, - "is_dst": false, - "offset": -32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-e953d2a73bc41375-48de55a59fed75b5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-e953d2a73bc41375-48de55a59fed75b5.json deleted file mode 100644 index 7f290684d..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-e953d2a73bc41375-48de55a59fed75b5.json +++ /dev/null @@ -1,388 +0,0 @@ -{ - "ids": [ - "europe/lisbon", - "portugal", - "wet" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "W", - "E", - "T", - "\u0000", - "W", - "E", - "S", - "T", - "\u0000", - "W", - "E", - "M", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "WET", - "offset": 0, - "transition": { - "abbr": "WEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 3600 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3, - 2, - 1, - 2, - 3, - 2, - 1, - 2, - 3, - 2, - 1, - 2, - 3, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 4, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 2, - 1 - ], - "transitions": [ - -1830384000, - -1689555600, - -1677801600, - -1667433600, - -1647738000, - -1635897600, - -1616202000, - -1604361600, - -1584666000, - -1572739200, - -1553043600, - -1541203200, - -1521507600, - -1442451600, - -1427677200, - -1379293200, - -1364778000, - -1348448400, - -1333328400, - -1316394000, - -1301274000, - -1284339600, - -1269824400, - -1221440400, - -1206925200, - -1191200400, - -1175475600, - -1127696400, - -1111971600, - -1096851600, - -1080522000, - -1063587600, - -1049072400, - -1033347600, - -1017622800, - -1002502800, - -986173200, - -969238800, - -950490000, - -942022800, - -922496400, - -906944400, - -891133200, - -877309200, - -873684000, - -864007200, - -857955600, - -845859600, - -842839200, - -831348000, - -825901200, - -814410000, - -810784800, - -799898400, - -794451600, - -782960400, - -779335200, - -768448800, - -763002000, - -749091600, - -733366800, - -717631200, - -701906400, - -686181600, - -670456800, - -654732000, - -639007200, - -623282400, - -607557600, - -591832800, - -575503200, - -559778400, - -544053600, - -528328800, - -512604000, - -496879200, - -481154400, - -465429600, - -449704800, - -433980000, - -417650400, - -401925600, - -386200800, - -370476000, - -354751200, - -339026400, - -323301600, - -307576800, - -291852000, - -276127200, - -260402400, - -244677600, - -228348000, - -212623200, - -196898400, - -181173600, - -165448800, - -149724000, - -133999200, - -118274400, - -102549600, - 212544000, - 243993600, - 260326800, - 276051600, - 291776400, - 307501200, - 323830800, - 338950800, - 354672000, - 370396800, - 386121600, - 401846400, - 417571200, - 433296000, - 449020800, - 465350400, - 481075200, - 496800000, - 504921600, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -2205 - }, - { - "index": 4, - "is_dst": false, - "offset": 0 - }, - { - "index": 8, - "is_dst": true, - "offset": 3600 - }, - { - "index": 13, - "is_dst": true, - "offset": 7200 - }, - { - "index": 18, - "is_dst": false, - "offset": 3600 - }, - { - "index": 22, - "is_dst": true, - "offset": 7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-ea8173f82f8dccac-6d1bb4a4812615f1.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-ea8173f82f8dccac-6d1bb4a4812615f1.json deleted file mode 100644 index 93404f482..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-ea8173f82f8dccac-6d1bb4a4812615f1.json +++ /dev/null @@ -1,206 +0,0 @@ -{ - "ids": [ - "asia/hong_kong", - "hongkong" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "H", - "K", - "T", - "\u0000", - "H", - "K", - "S", - "T", - "\u0000", - "H", - "K", - "W", - "T", - "\u0000", - "J", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "HKT", - "offset": 28800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2056690800, - -900910800, - -891579600, - -884248200, - -761209200, - -747907200, - -728541000, - -717049800, - -697091400, - -683785800, - -668061000, - -654755400, - -636611400, - -623305800, - -605161800, - -591856200, - -573712200, - -559801800, - -541657800, - -528352200, - -510211800, - -498112200, - -478762200, - -466662600, - -446707800, - -435213000, - -415258200, - -403158600, - -383808600, - -371709000, - -352359000, - -340259400, - -320909400, - -308809800, - -288855000, - -277360200, - -257405400, - -245910600, - -225955800, - -213856200, - -194506200, - -182406600, - -163056600, - -148537800, - -132816600, - -117088200, - -101367000, - -85638600, - -69312600, - -53584200, - -37863000, - -22134600, - -6413400, - 9315000, - 25036200, - 40764600, - 56485800, - 72214200, - 88540200, - 104268600, - 119989800, - 126041400, - 151439400, - 167167800, - 182889000, - 198617400, - 214338600, - 295385400, - 309292200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 27402 - }, - { - "index": 4, - "is_dst": false, - "offset": 28800 - }, - { - "index": 8, - "is_dst": true, - "offset": 32400 - }, - { - "index": 13, - "is_dst": true, - "offset": 30600 - }, - { - "index": 18, - "is_dst": false, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-eafa00d1ad3ada02-67caac1faf407e13.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-eafa00d1ad3ada02-67caac1faf407e13.json deleted file mode 100644 index 0105cdb6a..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-eafa00d1ad3ada02-67caac1faf407e13.json +++ /dev/null @@ -1,203 +0,0 @@ -{ - "ids": [ - "asia/kamchatka" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "1", - "\u0000", - "+", - "1", - "2", - "\u0000", - "+", - "1", - "3", - "\u0000" - ], - "posix": { - "abbr": "+12", - "offset": 43200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 6, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 1, - 5, - 1, - 2 - ], - "transitions": [ - -1487759676, - -1247569200, - 354888000, - 370695600, - 386424000, - 402231600, - 417960000, - 433767600, - 449582400, - 465314400, - 481039200, - 496764000, - 512488800, - 528213600, - 543938400, - 559663200, - 575388000, - 591112800, - 606837600, - 622562400, - 638287200, - 654616800, - 670341600, - 670345200, - 686070000, - 695746800, - 701791200, - 717516000, - 733240800, - 748965600, - 764690400, - 780415200, - 796140000, - 811864800, - 828194400, - 846338400, - 859644000, - 877788000, - 891093600, - 909237600, - 922543200, - 941292000, - 953992800, - 972741600, - 985442400, - 1004191200, - 1017496800, - 1035640800, - 1048946400, - 1067090400, - 1080396000, - 1099144800, - 1111845600, - 1130594400, - 1143295200, - 1162044000, - 1174744800, - 1193493600, - 1206799200, - 1224943200, - 1238248800, - 1256392800, - 1269698400, - 1269702000, - 1288450800, - 1301151600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 38076 - }, - { - "index": 4, - "is_dst": false, - "offset": 39600 - }, - { - "index": 8, - "is_dst": false, - "offset": 43200 - }, - { - "index": 12, - "is_dst": true, - "offset": 46800 - }, - { - "index": 4, - "is_dst": true, - "offset": 43200 - }, - { - "index": 8, - "is_dst": true, - "offset": 43200 - }, - { - "index": 8, - "is_dst": true, - "offset": 46800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-eb4384db15894d16-1169fd5f98c1f241.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-eb4384db15894d16-1169fd5f98c1f241.json deleted file mode 100644 index 8cd534b25..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-eb4384db15894d16-1169fd5f98c1f241.json +++ /dev/null @@ -1,91 +0,0 @@ -{ - "ids": [ - "australia/lindeman" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "E", - "S", - "T", - "\u0000", - "A", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AEST", - "offset": 36000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2366790956, - -1672560000, - -1665388800, - -883641600, - -876124800, - -860400000, - -844675200, - -828345600, - -813225600, - 57686400, - 67968000, - 625593600, - 636480000, - 657043200, - 667929600, - 688492800, - 699379200, - 719942400, - 731433600, - 751996800, - 762883200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 35756 - }, - { - "index": 4, - "is_dst": false, - "offset": 36000 - }, - { - "index": 9, - "is_dst": true, - "offset": 39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-eb9179abb91c8435-a9dd7a54e10fafd1.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-eb9179abb91c8435-a9dd7a54e10fafd1.json deleted file mode 100644 index 0b749f1ef..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-eb9179abb91c8435-a9dd7a54e10fafd1.json +++ /dev/null @@ -1,343 +0,0 @@ -{ - "ids": [ - "america/coyhaique" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "S", - "M", - "T", - "\u0000", - "-", - "0", - "5", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 3, - 2, - 3, - 4, - 2, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 3, - 5, - 6 - ], - "transitions": [ - -2524504304, - -1892661435, - -1688410800, - -1619205435, - -1593806400, - -1335986235, - -1335985200, - -1317585600, - -1304362800, - -1286049600, - -1272826800, - -1254513600, - -1241290800, - -1222977600, - -1209754800, - -1191355200, - -1178132400, - -870552000, - -865278000, - -736632000, - -718056000, - -713649600, - -36619200, - -23922000, - -3355200, - 7527600, - 24465600, - 37767600, - 55915200, - 69217200, - 87969600, - 100666800, - 118209600, - 132116400, - 150868800, - 163566000, - 182318400, - 195620400, - 213768000, - 227070000, - 245217600, - 258519600, - 277272000, - 289969200, - 308721600, - 321418800, - 340171200, - 353473200, - 371620800, - 384922800, - 403070400, - 416372400, - 434520000, - 447822000, - 466574400, - 479271600, - 498024000, - 510721200, - 529473600, - 545194800, - 560923200, - 574225200, - 592372800, - 605674800, - 624427200, - 637124400, - 653457600, - 668574000, - 687326400, - 700628400, - 718776000, - 732078000, - 750225600, - 763527600, - 781675200, - 794977200, - 813729600, - 826426800, - 845179200, - 859690800, - 876628800, - 889930800, - 906868800, - 923194800, - 939528000, - 952830000, - 971582400, - 984279600, - 1003032000, - 1015729200, - 1034481600, - 1047178800, - 1065931200, - 1079233200, - 1097380800, - 1110682800, - 1128830400, - 1142132400, - 1160884800, - 1173582000, - 1192334400, - 1206846000, - 1223784000, - 1237086000, - 1255233600, - 1270350000, - 1286683200, - 1304823600, - 1313899200, - 1335668400, - 1346558400, - 1367118000, - 1378612800, - 1398567600, - 1410062400, - 1463281200, - 1471147200, - 1494730800, - 1502596800, - 1526180400, - 1534046400, - 1554606000, - 1567915200, - 1586055600, - 1599364800, - 1617505200, - 1630814400, - 1648954800, - 1662868800, - 1680404400, - 1693713600, - 1712458800, - 1725768000, - 1742439600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -17296 - }, - { - "index": 4, - "is_dst": false, - "offset": -16965 - }, - { - "index": 8, - "is_dst": false, - "offset": -18000 - }, - { - "index": 12, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -14400 - }, - { - "index": 16, - "is_dst": true, - "offset": -10800 - }, - { - "index": 16, - "is_dst": false, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-ec4f112febcbc032-8f1d0619702b4a64.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-ec4f112febcbc032-8f1d0619702b4a64.json deleted file mode 100644 index a84335810..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-ec4f112febcbc032-8f1d0619702b4a64.json +++ /dev/null @@ -1,275 +0,0 @@ -{ - "ids": [ - "europe/moscow", - "w-su" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "M", - "D", - "S", - "T", - "\u0000", - "M", - "S", - "D", - "\u0000", - "M", - "S", - "K", - "\u0000", - "+", - "0", - "5", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "MSK", - "offset": 10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 4, - 3, - 4, - 5, - 6, - 5, - 7, - 5, - 6, - 8, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 9, - 8, - 10, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 11, - 6 - ], - "transitions": [ - -2840149817, - -1688265017, - -1656819079, - -1641353479, - -1627965079, - -1618716679, - -1596429079, - -1593820800, - -1589860800, - -1542427200, - -1539493200, - -1525323600, - -1522728000, - -1491188400, - -1247536800, - 354920400, - 370728000, - 386456400, - 402264000, - 417992400, - 433800000, - 449614800, - 465346800, - 481071600, - 496796400, - 512521200, - 528246000, - 543970800, - 559695600, - 575420400, - 591145200, - 606870000, - 622594800, - 638319600, - 654649200, - 670374000, - 686102400, - 695779200, - 701823600, - 717548400, - 733273200, - 748998000, - 764722800, - 780447600, - 796172400, - 811897200, - 828226800, - 846370800, - 859676400, - 877820400, - 891126000, - 909270000, - 922575600, - 941324400, - 954025200, - 972774000, - 985474800, - 1004223600, - 1017529200, - 1035673200, - 1048978800, - 1067122800, - 1080428400, - 1099177200, - 1111878000, - 1130626800, - 1143327600, - 1162076400, - 1174777200, - 1193526000, - 1206831600, - 1224975600, - 1238281200, - 1256425200, - 1269730800, - 1288479600, - 1301180400, - 1414274400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 9017 - }, - { - "index": 4, - "is_dst": false, - "offset": 9017 - }, - { - "index": 4, - "is_dst": false, - "offset": 9079 - }, - { - "index": 8, - "is_dst": true, - "offset": 12679 - }, - { - "index": 12, - "is_dst": true, - "offset": 16279 - }, - { - "index": 17, - "is_dst": true, - "offset": 14400 - }, - { - "index": 21, - "is_dst": false, - "offset": 10800 - }, - { - "index": 25, - "is_dst": true, - "offset": 18000 - }, - { - "index": 29, - "is_dst": false, - "offset": 7200 - }, - { - "index": 33, - "is_dst": true, - "offset": 10800 - }, - { - "index": 21, - "is_dst": true, - "offset": 14400 - }, - { - "index": 21, - "is_dst": false, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-ed29bf9f15004c8a-e0746bbdddd348c2.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-ed29bf9f15004c8a-e0746bbdddd348c2.json deleted file mode 100644 index 8676386d5..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-ed29bf9f15004c8a-e0746bbdddd348c2.json +++ /dev/null @@ -1,443 +0,0 @@ -{ - "ids": [ - "america/montreal", - "america/nassau", - "america/nipigon", - "america/thunder_bay", - "america/toronto", - "canada/eastern" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000", - "E", - "W", - "T", - "\u0000", - "E", - "P", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": { - "abbr": "EDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2366736148, - -1632070800, - -1615140000, - -1601753400, - -1583697600, - -1567357200, - -1554667200, - -1534698000, - -1524074400, - -1503248400, - -1492365600, - -1471798800, - -1460916000, - -1440954000, - -1428861600, - -1409504400, - -1397412000, - -1378054800, - -1365962400, - -1346605200, - -1333908000, - -1315155600, - -1301853600, - -1283706000, - -1270404000, - -1252256400, - -1238954400, - -1220806800, - -1207504800, - -1188752400, - -1176055200, - -1157302800, - -1144000800, - -1125853200, - -1112551200, - -1094403600, - -1081101600, - -1062954000, - -1049652000, - -1031504400, - -1018202400, - -1000054800, - -986752800, - -968000400, - -955303200, - -936550800, - -880218000, - -769395600, - -765396000, - -757364400, - -733946400, - -715798800, - -702496800, - -684349200, - -671047200, - -652899600, - -634154400, - -620845200, - -602704800, - -589395600, - -576093600, - -557946000, - -544644000, - -526496400, - -513194400, - -495046800, - -481744800, - -463597200, - -450295200, - -431542800, - -418240800, - -400093200, - -384372000, - -368643600, - -352922400, - -337194000, - -321472800, - -305744400, - -289418400, - -273690000, - -257968800, - -242240400, - -226519200, - -210790800, - -195069600, - -179341200, - -163620000, - -147891600, - -131565600, - -116442000, - -100116000, - -84387600, - -68666400, - -52938000, - -37216800, - -21488400, - -5767200, - 9961200, - 25682400, - 41410800, - 57736800, - 73465200, - 89186400, - 104914800, - 120636000, - 136364400, - 152085600, - 167814000, - 183535200, - 199263600, - 215589600, - 230713200, - 247039200, - 262767600, - 278488800, - 294217200, - 309938400, - 325666800, - 341388000, - 357116400, - 372837600, - 388566000, - 404892000, - 420015600, - 436341600, - 452070000, - 467791200, - 483519600, - 499240800, - 514969200, - 530690400, - 544604400, - 562140000, - 576054000, - 594194400, - 607503600, - 625644000, - 638953200, - 657093600, - 671007600, - 688543200, - 702457200, - 719992800, - 733906800, - 752047200, - 765356400, - 783496800, - 796806000, - 814946400, - 828860400, - 846396000, - 860310000, - 877845600, - 891759600, - 909295200, - 923209200, - 941349600, - 954658800, - 972799200, - 986108400, - 1004248800, - 1018162800, - 1035698400, - 1049612400, - 1067148000, - 1081062000, - 1099202400, - 1112511600, - 1130652000, - 1143961200, - 1162101600, - 1173596400, - 1194156000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -19052 - }, - { - "index": 4, - "is_dst": false, - "offset": -18000 - }, - { - "index": 8, - "is_dst": true, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -14400 - }, - { - "index": 16, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-edc11c9a67454353-52365966a71b0651.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-edc11c9a67454353-52365966a71b0651.json deleted file mode 100644 index 0b91c0c16..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-edc11c9a67454353-52365966a71b0651.json +++ /dev/null @@ -1,197 +0,0 @@ -{ - "ids": [ - "america/argentina/rio_gallegos" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 6, - 4, - 2, - 4, - 5, - 4 - ], - "transitions": [ - -2372095388, - -1567453392, - -1233432000, - -1222981200, - -1205956800, - -1194037200, - -1172865600, - -1162501200, - -1141329600, - -1130965200, - -1109793600, - -1099429200, - -1078257600, - -1067806800, - -1046635200, - -1036270800, - -1015099200, - -1004734800, - -983563200, - -973198800, - -952027200, - -941576400, - -931032000, - -900882000, - -890337600, - -833749200, - -827265600, - -752274000, - -733780800, - -197326800, - -190843200, - -184194000, - -164491200, - -152658000, - -132955200, - -121122000, - -101419200, - -86821200, - -71092800, - -54766800, - -39038400, - -23317200, - -7588800, - 128142000, - 136605600, - 596948400, - 605066400, - 624423600, - 636516000, - 656478000, - 667965600, - 687927600, - 699415200, - 719377200, - 731469600, - 938919600, - 952052400, - 1086058800, - 1087704000, - 1198983600, - 1205632800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -16612 - }, - { - "index": 4, - "is_dst": false, - "offset": -15408 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -7200 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-edc8df3b48d8f1ae-d53ce868638a7f7f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-edc8df3b48d8f1ae-d53ce868638a7f7f.json deleted file mode 100644 index eb921372f..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-edc8df3b48d8f1ae-d53ce868638a7f7f.json +++ /dev/null @@ -1,63 +0,0 @@ -{ - "ids": [ - "pacific/enderbury", - "pacific/kanton" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000", - "-", - "1", - "2", - "\u0000", - "-", - "1", - "1", - "\u0000", - "+", - "1", - "3", - "\u0000" - ], - "posix": { - "abbr": "+13", - "offset": 46800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3 - ], - "transitions": [ - -1020470400, - 307627200, - 788871600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - }, - { - "index": 4, - "is_dst": false, - "offset": -43200 - }, - { - "index": 8, - "is_dst": false, - "offset": -39600 - }, - { - "index": 12, - "is_dst": false, - "offset": 46800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-ee42b17151e8d0d1-357b51a424f7aa98.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-ee42b17151e8d0d1-357b51a424f7aa98.json deleted file mode 100644 index f730222c6..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-ee42b17151e8d0d1-357b51a424f7aa98.json +++ /dev/null @@ -1,139 +0,0 @@ -{ - "ids": [ - "asia/taipei", - "roc" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "J", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": 28800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1 - ], - "transitions": [ - -2335248360, - -1017820800, - -766224000, - -745833600, - -733827600, - -716889600, - -699613200, - -683884800, - -670669200, - -652348800, - -639133200, - -620812800, - -607597200, - -589276800, - -576061200, - -562924800, - -541760400, - -528710400, - -510224400, - -497174400, - -478688400, - -465638400, - -449830800, - -434016000, - -418208400, - -402480000, - -386672400, - -370944000, - -355136400, - -339408000, - -323600400, - -302515200, - -291978000, - -270979200, - -260442000, - 133977600, - 149785200, - 165513600, - 181321200, - 299606400, - 307551600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 29160 - }, - { - "index": 4, - "is_dst": false, - "offset": 28800 - }, - { - "index": 8, - "is_dst": false, - "offset": 32400 - }, - { - "index": 12, - "is_dst": true, - "offset": 32400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-ef074bbbac9f5764-a95f24022aaf5ee6.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-ef074bbbac9f5764-a95f24022aaf5ee6.json deleted file mode 100644 index f29b44819..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-ef074bbbac9f5764-a95f24022aaf5ee6.json +++ /dev/null @@ -1,187 +0,0 @@ -{ - "ids": [ - "america/bahia_banderas" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 1, - 2, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 3, - 1, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2 - ], - "transitions": [ - -1514739600, - -1343149200, - -1234807200, - -1220461200, - -1207159200, - -1191344400, - -873828000, - 828867600, - 846403200, - 860317200, - 877852800, - 891766800, - 909302400, - 923216400, - 941356800, - 954666000, - 972806400, - 989139600, - 1001836800, - 1018170000, - 1035705600, - 1049619600, - 1067155200, - 1081069200, - 1099209600, - 1112518800, - 1130659200, - 1143968400, - 1162108800, - 1175418000, - 1193558400, - 1207472400, - 1225008000, - 1238922000, - 1256457600, - 1270371600, - 1288508400, - 1301817600, - 1319958000, - 1333267200, - 1351407600, - 1365321600, - 1382857200, - 1396771200, - 1414306800, - 1428220800, - 1445756400, - 1459670400, - 1477810800, - 1491120000, - 1509260400, - 1522569600, - 1540710000, - 1554624000, - 1572159600, - 1586073600, - 1603609200, - 1617523200, - 1635663600, - 1648972800, - 1667113200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -25260 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": false, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-ef99169dd5b3d431-4213fdbbcdc2dc93.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-ef99169dd5b3d431-4213fdbbcdc2dc93.json deleted file mode 100644 index e11b04ad2..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-ef99169dd5b3d431-4213fdbbcdc2dc93.json +++ /dev/null @@ -1,247 +0,0 @@ -{ - "ids": [ - "australia/act", - "australia/canberra", - "australia/nsw", - "australia/sydney" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "E", - "S", - "T", - "\u0000", - "A", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AEST", - "offset": 36000, - "transition": { - "abbr": "AEDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 4, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 1, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2 - ], - "transitions": [ - -2364113092, - -1672560000, - -1665388800, - -883641600, - -876124800, - -860400000, - -844675200, - -828345600, - -813225600, - 57686400, - 67968000, - 89136000, - 100022400, - 120585600, - 131472000, - 152035200, - 162921600, - 183484800, - 194976000, - 215539200, - 226425600, - 246988800, - 257875200, - 278438400, - 289324800, - 309888000, - 320774400, - 341337600, - 352224000, - 372787200, - 386697600, - 404841600, - 415728000, - 436291200, - 447177600, - 467740800, - 478627200, - 499190400, - 511286400, - 530035200, - 542736000, - 562089600, - 574790400, - 594144000, - 606240000, - 625593600, - 636480000, - 657043200, - 667929600, - 688492800, - 699379200, - 719942400, - 731433600, - 751996800, - 762883200, - 783446400, - 794332800, - 814896000, - 828201600, - 846345600, - 859651200, - 877795200, - 891100800, - 909244800, - 922550400, - 941299200, - 954000000, - 967305600, - 985449600, - 1004198400, - 1017504000, - 1035648000, - 1048953600, - 1067097600, - 1080403200, - 1099152000, - 1111852800, - 1130601600, - 1143907200, - 1162051200, - 1174752000, - 1193500800, - 1207411200, - 1223136000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 36292 - }, - { - "index": 4, - "is_dst": false, - "offset": 36000 - }, - { - "index": 9, - "is_dst": true, - "offset": 39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-effb0bd5efab2bad-24e3b68722ec3ffd.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-effb0bd5efab2bad-24e3b68722ec3ffd.json deleted file mode 100644 index d82d4f628..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-effb0bd5efab2bad-24e3b68722ec3ffd.json +++ /dev/null @@ -1,346 +0,0 @@ -{ - "ids": [ - "america/los_angeles", - "pst8pdt", - "us/pacific" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "P", - "S", - "T", - "\u0000", - "P", - "D", - "T", - "\u0000", - "P", - "W", - "T", - "\u0000", - "P", - "P", - "T", - "\u0000" - ], - "posix": { - "abbr": "PST", - "offset": -28800, - "transition": { - "abbr": "PDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2717640000, - -1633269600, - -1615129200, - -1601820000, - -1583679600, - -880207200, - -769395600, - -765385200, - -687967140, - -662655600, - -620838000, - -608137200, - -589388400, - -576082800, - -557938800, - -544633200, - -526489200, - -513183600, - -495039600, - -481734000, - -463590000, - -450284400, - -431535600, - -418230000, - -400086000, - -386780400, - -368636400, - -355330800, - -337186800, - -323881200, - -305737200, - -292431600, - -273682800, - -260982000, - -242233200, - -226508400, - -210783600, - -195058800, - -179334000, - -163609200, - -147884400, - -131554800, - -116434800, - -100105200, - -84376800, - -68655600, - -52927200, - -37206000, - -21477600, - -5756400, - 9972000, - 25693200, - 41421600, - 57747600, - 73476000, - 89197200, - 104925600, - 120646800, - 126698400, - 152096400, - 162381600, - 183546000, - 199274400, - 215600400, - 230724000, - 247050000, - 262778400, - 278499600, - 294228000, - 309949200, - 325677600, - 341398800, - 357127200, - 372848400, - 388576800, - 404902800, - 420026400, - 436352400, - 452080800, - 467802000, - 483530400, - 499251600, - 514980000, - 530701200, - 544615200, - 562150800, - 576064800, - 594205200, - 607514400, - 625654800, - 638964000, - 657104400, - 671018400, - 688554000, - 702468000, - 720003600, - 733917600, - 752058000, - 765367200, - 783507600, - 796816800, - 814957200, - 828871200, - 846406800, - 860320800, - 877856400, - 891770400, - 909306000, - 923220000, - 941360400, - 954669600, - 972810000, - 986119200, - 1004259600, - 1018173600, - 1035709200, - 1049623200, - 1067158800, - 1081072800, - 1099213200, - 1112522400, - 1130662800, - 1143972000, - 1162112400, - 1173607200, - 1194166800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -28378 - }, - { - "index": 4, - "is_dst": false, - "offset": -28800 - }, - { - "index": 8, - "is_dst": true, - "offset": -25200 - }, - { - "index": 12, - "is_dst": true, - "offset": -25200 - }, - { - "index": 16, - "is_dst": true, - "offset": -25200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f022b64b061d7846-3232b34cfb2e1ae6.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f022b64b061d7846-3232b34cfb2e1ae6.json deleted file mode 100644 index 1f5abb92d..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f022b64b061d7846-3232b34cfb2e1ae6.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "ids": [ - "pacific/pitcairn" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "8", - "3", - "0", - "\u0000", - "-", - "0", - "8", - "\u0000" - ], - "posix": { - "abbr": "-08", - "offset": -28800, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -2177421580, - 893665800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -31220 - }, - { - "index": 4, - "is_dst": false, - "offset": -30600 - }, - { - "index": 10, - "is_dst": false, - "offset": -28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f0d38f589f1464b7-2390a2d2ea508547.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f0d38f589f1464b7-2390a2d2ea508547.json deleted file mode 100644 index e0f427099..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f0d38f589f1464b7-2390a2d2ea508547.json +++ /dev/null @@ -1,334 +0,0 @@ -{ - "ids": [ - "africa/cairo", - "egypt" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 4 - ] - }, - "time": 86400 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 4, - 5, - 5 - ] - }, - "time": 0 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2185409109, - -929844000, - -923108400, - -906170400, - -892868400, - -875844000, - -857790000, - -844308000, - -825822000, - -812685600, - -794199600, - -779853600, - -762663600, - -399088800, - -386650800, - -368330400, - -355114800, - -336790800, - -323654400, - -305168400, - -292032000, - -273632400, - -260496000, - -242096400, - -228960000, - -210560400, - -197424000, - -178938000, - -165801600, - -147402000, - -134265600, - -115866000, - -102643200, - -84330000, - -71107200, - -52707600, - -39484800, - -21171600, - -7948800, - 10364400, - 23587200, - 41900400, - 55123200, - 73522800, - 86745600, - 105058800, - 118281600, - 136594800, - 149817600, - 168130800, - 181353600, - 199753200, - 212976000, - 231289200, - 244512000, - 262825200, - 276048000, - 294361200, - 307584000, - 325983600, - 339206400, - 357519600, - 370742400, - 396399600, - 402278400, - 426812400, - 433814400, - 452214000, - 465436800, - 483750000, - 496972800, - 515286000, - 528508800, - 546822000, - 560044800, - 578444400, - 591667200, - 610412400, - 623203200, - 641516400, - 654739200, - 673052400, - 686275200, - 704674800, - 717897600, - 736210800, - 749433600, - 767746800, - 780969600, - 799020000, - 812322000, - 830469600, - 843771600, - 861919200, - 875221200, - 893368800, - 906670800, - 925423200, - 938725200, - 956872800, - 970174800, - 988322400, - 1001624400, - 1019772000, - 1033074000, - 1051221600, - 1064523600, - 1083276000, - 1096578000, - 1114725600, - 1128027600, - 1146175200, - 1158872400, - 1177624800, - 1189112400, - 1209074400, - 1219957200, - 1240524000, - 1250802000, - 1272578400, - 1281474000, - 1284069600, - 1285880400, - 1400191200, - 1403816400, - 1406844000, - 1411678800, - 1682632800, - 1698354000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 7509 - }, - { - "index": 4, - "is_dst": false, - "offset": 7200 - }, - { - "index": 8, - "is_dst": true, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f104b0a7be76b68-c9ded34c387917fa.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f104b0a7be76b68-c9ded34c387917fa.json deleted file mode 100644 index 9d26cf3fb..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f104b0a7be76b68-c9ded34c387917fa.json +++ /dev/null @@ -1,87 +0,0 @@ -{ - "ids": [ - "kwajalein", - "pacific/kwajalein" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "1", - "\u0000", - "+", - "1", - "0", - "\u0000", - "+", - "0", - "9", - "\u0000", - "-", - "1", - "2", - "\u0000", - "+", - "1", - "2", - "\u0000" - ], - "posix": { - "abbr": "+12", - "offset": 43200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 1, - 4, - 5 - ], - "transitions": [ - -2177492960, - -1041418800, - -907408800, - -817462800, - -7988400, - 745934400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 40160 - }, - { - "index": 4, - "is_dst": false, - "offset": 39600 - }, - { - "index": 8, - "is_dst": false, - "offset": 36000 - }, - { - "index": 12, - "is_dst": false, - "offset": 32400 - }, - { - "index": 16, - "is_dst": false, - "offset": -43200 - }, - { - "index": 20, - "is_dst": false, - "offset": 43200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f1b7ca6dc4d0b2b0-894d0a8e5668a409.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f1b7ca6dc4d0b2b0-894d0a8e5668a409.json deleted file mode 100644 index dfadc69ac..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f1b7ca6dc4d0b2b0-894d0a8e5668a409.json +++ /dev/null @@ -1,182 +0,0 @@ -{ - "ids": [ - "asia/aqtau" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 5, - 6, - 1, - 7, - 4, - 2, - 4, - 2, - 4, - 6, - 1, - 6, - 1, - 6, - 1, - 6, - 1, - 6, - 1, - 6, - 1, - 6, - 1, - 6, - 1, - 6, - 1, - 6, - 1, - 6, - 2 - ], - "transitions": [ - -1441164064, - -1247544000, - 370724400, - 386445600, - 386449200, - 402256800, - 417985200, - 433792800, - 449607600, - 465339600, - 481064400, - 496789200, - 512514000, - 528238800, - 543963600, - 559688400, - 575413200, - 591138000, - 606862800, - 622587600, - 638312400, - 654642000, - 670366800, - 670370400, - 686095200, - 695772000, - 701816400, - 717541200, - 733266000, - 748990800, - 764715600, - 780440400, - 780444000, - 796168800, - 811893600, - 828223200, - 846367200, - 859672800, - 877816800, - 891122400, - 909266400, - 922572000, - 941320800, - 954021600, - 972770400, - 985471200, - 1004220000, - 1017525600, - 1035669600, - 1048975200, - 1067119200, - 1080424800, - 1099173600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 12064 - }, - { - "index": 4, - "is_dst": false, - "offset": 14400 - }, - { - "index": 8, - "is_dst": false, - "offset": 18000 - }, - { - "index": 12, - "is_dst": false, - "offset": 21600 - }, - { - "index": 12, - "is_dst": true, - "offset": 21600 - }, - { - "index": 4, - "is_dst": true, - "offset": 18000 - }, - { - "index": 8, - "is_dst": true, - "offset": 18000 - }, - { - "index": 8, - "is_dst": true, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f1f0b3541047bfad-2b308ec39423c122.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f1f0b3541047bfad-2b308ec39423c122.json deleted file mode 100644 index 50e8def9d..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f1f0b3541047bfad-2b308ec39423c122.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "ids": [ - "antarctica/palmer" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 4 - ], - "transitions": [ - -157766400, - -152658000, - -132955200, - -121122000, - -101419200, - -86821200, - -71092800, - -54766800, - -39038400, - -23317200, - -7588800, - 128142000, - 136605600, - 389070000, - 403070400, - 416372400, - 434520000, - 447822000, - 466574400, - 479271600, - 498024000, - 510721200, - 529473600, - 545194800, - 560923200, - 574225200, - 592372800, - 605674800, - 624427200, - 637124400, - 653457600, - 668574000, - 687326400, - 700628400, - 718776000, - 732078000, - 750225600, - 763527600, - 781675200, - 794977200, - 813729600, - 826426800, - 845179200, - 859690800, - 876628800, - 889930800, - 906868800, - 923194800, - 939528000, - 952830000, - 971582400, - 984279600, - 1003032000, - 1015729200, - 1034481600, - 1047178800, - 1065931200, - 1079233200, - 1097380800, - 1110682800, - 1128830400, - 1142132400, - 1160884800, - 1173582000, - 1192334400, - 1206846000, - 1223784000, - 1237086000, - 1255233600, - 1270350000, - 1286683200, - 1304823600, - 1313899200, - 1335668400, - 1346558400, - 1367118000, - 1378612800, - 1398567600, - 1410062400, - 1463281200, - 1471147200, - 1480820400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - }, - { - "index": 4, - "is_dst": true, - "offset": -10800 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - }, - { - "index": 8, - "is_dst": false, - "offset": -10800 - }, - { - "index": 12, - "is_dst": true, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f2238fc53b0fff96-a27b14841dab0b54.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f2238fc53b0fff96-a27b14841dab0b54.json deleted file mode 100644 index 46ec59876..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f2238fc53b0fff96-a27b14841dab0b54.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "ids": [ - "antarctica/davis" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000", - "+", - "0", - "7", - "\u0000", - "+", - "0", - "5", - "\u0000" - ], - "posix": { - "abbr": "+07", - "offset": 25200, - "transition": null - }, - "transition_types": [ - 1, - 0, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -409190400, - -163062000, - -28857600, - 1255806000, - 1268251200, - 1319742000, - 1329854400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - }, - { - "index": 4, - "is_dst": false, - "offset": 25200 - }, - { - "index": 8, - "is_dst": false, - "offset": 18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f229cb4cd552c448-180f703ed315219b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f229cb4cd552c448-180f703ed315219b.json deleted file mode 100644 index 52e619ace..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f229cb4cd552c448-180f703ed315219b.json +++ /dev/null @@ -1,172 +0,0 @@ -{ - "ids": [ - "asia/bishkek" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "7", - "\u0000" - ], - "posix": { - "abbr": "+06", - "offset": 21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 2 - ], - "transitions": [ - -1441169904, - -1247547600, - 354909600, - 370717200, - 386445600, - 402253200, - 417981600, - 433789200, - 449604000, - 465336000, - 481060800, - 496785600, - 512510400, - 528235200, - 543960000, - 559684800, - 575409600, - 591134400, - 606859200, - 622584000, - 638308800, - 654638400, - 670363200, - 670366800, - 683582400, - 703018800, - 717530400, - 734468400, - 748980000, - 765918000, - 780429600, - 797367600, - 811879200, - 828817200, - 843933600, - 859671000, - 877811400, - 891120600, - 909261000, - 922570200, - 941315400, - 954019800, - 972765000, - 985469400, - 1004214600, - 1017523800, - 1035664200, - 1048973400, - 1067113800, - 1080423000, - 1099168200, - 1111872600, - 1123783200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 17904 - }, - { - "index": 4, - "is_dst": false, - "offset": 18000 - }, - { - "index": 8, - "is_dst": false, - "offset": 21600 - }, - { - "index": 12, - "is_dst": true, - "offset": 25200 - }, - { - "index": 4, - "is_dst": true, - "offset": 21600 - }, - { - "index": 8, - "is_dst": true, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f26b875165969e75-9de4074ee0dba7d5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f26b875165969e75-9de4074ee0dba7d5.json deleted file mode 100644 index bd876bcc8..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f26b875165969e75-9de4074ee0dba7d5.json +++ /dev/null @@ -1,119 +0,0 @@ -{ - "ids": [ - "asia/ashgabat", - "asia/ashkhabad" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000", - "+", - "0", - "6", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 2 - ], - "transitions": [ - -1441166012, - -1247544000, - 354913200, - 370720800, - 386449200, - 402256800, - 417985200, - 433792800, - 449607600, - 465339600, - 481064400, - 496789200, - 512514000, - 528238800, - 543963600, - 559688400, - 575413200, - 591138000, - 606862800, - 622587600, - 638312400, - 654642000, - 670366800, - 670370400, - 686095200, - 695772000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 14012 - }, - { - "index": 4, - "is_dst": false, - "offset": 14400 - }, - { - "index": 8, - "is_dst": false, - "offset": 18000 - }, - { - "index": 12, - "is_dst": true, - "offset": 21600 - }, - { - "index": 4, - "is_dst": true, - "offset": 18000 - }, - { - "index": 8, - "is_dst": true, - "offset": 18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f5114ea1ad21a447-2c4fc2506bcab8f1.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f5114ea1ad21a447-2c4fc2506bcab8f1.json deleted file mode 100644 index 4a1743264..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f5114ea1ad21a447-2c4fc2506bcab8f1.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "ids": [ - "america/north_dakota/beulah" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "M", - "W", - "T", - "\u0000", - "M", - "P", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": { - "abbr": "CDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 5 - ], - "transitions": [ - -2717643600, - -1633273200, - -1615132800, - -1601823600, - -1583683200, - -880210800, - -769395600, - -765388800, - -84380400, - -68659200, - -52930800, - -37209600, - -21481200, - -5760000, - 9968400, - 25689600, - 41418000, - 57744000, - 73472400, - 89193600, - 104922000, - 120643200, - 126694800, - 152092800, - 162378000, - 183542400, - 199270800, - 215596800, - 230720400, - 247046400, - 262774800, - 278496000, - 294224400, - 309945600, - 325674000, - 341395200, - 357123600, - 372844800, - 388573200, - 404899200, - 420022800, - 436348800, - 452077200, - 467798400, - 483526800, - 499248000, - 514976400, - 530697600, - 544611600, - 562147200, - 576061200, - 594201600, - 607510800, - 625651200, - 638960400, - 657100800, - 671014800, - 688550400, - 702464400, - 720000000, - 733914000, - 752054400, - 765363600, - 783504000, - 796813200, - 814953600, - 828867600, - 846403200, - 860317200, - 877852800, - 891766800, - 909302400, - 923216400, - 941356800, - 954666000, - 972806400, - 986115600, - 1004256000, - 1018170000, - 1035705600, - 1049619600, - 1067155200, - 1081069200, - 1099209600, - 1112518800, - 1130659200, - 1143968400, - 1162108800, - 1173603600, - 1194163200, - 1205053200, - 1225612800, - 1236502800, - 1257062400, - 1268557200, - 1289116800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -24427 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": true, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -21600 - }, - { - "index": 20, - "is_dst": false, - "offset": -21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f58f911ab743ef1d-bce7d4e3dbbf76c7.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f58f911ab743ef1d-bce7d4e3dbbf76c7.json deleted file mode 100644 index 6b648d9c5..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f58f911ab743ef1d-bce7d4e3dbbf76c7.json +++ /dev/null @@ -1,43 +0,0 @@ -{ - "ids": [ - "antarctica/syowa", - "asia/aden", - "asia/kuwait", - "asia/riyadh" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "+03", - "offset": 10800, - "transition": null - }, - "transition_types": [ - 1 - ], - "transitions": [ - -719636812 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 11212 - }, - { - "index": 4, - "is_dst": false, - "offset": 10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f5b99738d99ddd8c-506c03c69b7aff28.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f5b99738d99ddd8c-506c03c69b7aff28.json deleted file mode 100644 index 209595be0..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f5b99738d99ddd8c-506c03c69b7aff28.json +++ /dev/null @@ -1,199 +0,0 @@ -{ - "ids": [ - "america/argentina/san_juan" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 5, - 4, - 5, - 4, - 5, - 2, - 4, - 5, - 4, - 5, - 4, - 6, - 4, - 2, - 4, - 5, - 4 - ], - "transitions": [ - -2372095556, - -1567453392, - -1233432000, - -1222981200, - -1205956800, - -1194037200, - -1172865600, - -1162501200, - -1141329600, - -1130965200, - -1109793600, - -1099429200, - -1078257600, - -1067806800, - -1046635200, - -1036270800, - -1015099200, - -1004734800, - -983563200, - -973198800, - -952027200, - -941576400, - -931032000, - -900882000, - -890337600, - -833749200, - -827265600, - -752274000, - -733780800, - -197326800, - -190843200, - -184194000, - -164491200, - -152658000, - -132955200, - -121122000, - -101419200, - -86821200, - -71092800, - -54766800, - -39038400, - -23317200, - -7588800, - 128142000, - 136605600, - 596948400, - 605066400, - 624423600, - 636516000, - 656478000, - 667792800, - 673588800, - 687927600, - 699415200, - 719377200, - 731469600, - 938919600, - 952052400, - 1085972400, - 1090728000, - 1198983600, - 1205632800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -16444 - }, - { - "index": 4, - "is_dst": false, - "offset": -15408 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -7200 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f61469e5df5071ba-2c45e3f2d4f2b99e.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f61469e5df5071ba-2c45e3f2d4f2b99e.json deleted file mode 100644 index 265e13d55..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f61469e5df5071ba-2c45e3f2d4f2b99e.json +++ /dev/null @@ -1,181 +0,0 @@ -{ - "ids": [ - "america/regina", - "canada/saskatchewan" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "S", - "T", - "\u0000", - "M", - "D", - "T", - "\u0000", - "M", - "W", - "T", - "\u0000", - "M", - "P", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 5 - ], - "transitions": [ - -2030202084, - -1632063600, - -1615132800, - -1251651600, - -1238349600, - -1220202000, - -1206900000, - -1188752400, - -1175450400, - -1156698000, - -1144000800, - -1125248400, - -1111946400, - -1032714000, - -1016992800, - -1001264400, - -986148000, - -969814800, - -954093600, - -937760400, - -922039200, - -906310800, - -890589600, - -880210800, - -769395600, - -765388800, - -748450800, - -732729600, - -715791600, - -702489600, - -684342000, - -671040000, - -652892400, - -639590400, - -620838000, - -608140800, - -589388400, - -576086400, - -557938800, - -544636800, - -526489200, - -513187200, - -495039600, - -481737600, - -463590000, - -450288000, - -431535600, - -418233600, - -400086000, - -386784000, - -337186800, - -321465600, - -305737200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -25116 - }, - { - "index": 4, - "is_dst": false, - "offset": -25200 - }, - { - "index": 8, - "is_dst": true, - "offset": -21600 - }, - { - "index": 12, - "is_dst": true, - "offset": -21600 - }, - { - "index": 16, - "is_dst": true, - "offset": -21600 - }, - { - "index": 20, - "is_dst": false, - "offset": -21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f665c39691dff65-a1eb82e4c28d49af.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f665c39691dff65-a1eb82e4c28d49af.json deleted file mode 100644 index 54e47828d..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f665c39691dff65-a1eb82e4c28d49af.json +++ /dev/null @@ -1,216 +0,0 @@ -{ - "ids": [ - "eet", - "europe/athens" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "M", - "T", - "\u0000", - "E", - "E", - "T", - "\u0000", - "E", - "E", - "S", - "T", - "\u0000", - "C", - "E", - "S", - "T", - "\u0000", - "C", - "E", - "T", - "\u0000" - ], - "posix": { - "abbr": "EET", - "offset": 7200, - "transition": { - "abbr": "EEST", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 5, - 0 - ] - }, - "time": 14400 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 5, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 4, - 5, - 4, - 5, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2344642492, - -1686101632, - -1182996000, - -1178161200, - -906861600, - -904878000, - -857257200, - -844477200, - -828237600, - -812422800, - -552362400, - -541652400, - 166485600, - 186184800, - 198028800, - 213753600, - 228873600, - 244080000, - 260323200, - 275446800, - 291798000, - 307407600, - 323388000, - 338936400, - 347148000, - 370400400, - 386125200, - 401850000, - 417574800, - 433299600, - 449024400, - 465354000, - 481078800, - 496803600, - 512528400, - 528253200, - 543978000, - 559702800, - 575427600, - 591152400, - 606877200, - 622602000, - 638326800, - 654656400, - 670381200, - 686106000, - 701830800, - 717555600, - 733280400, - 749005200, - 764730000, - 780454800, - 796179600, - 811904400, - 828234000, - 846378000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 5692 - }, - { - "index": 4, - "is_dst": false, - "offset": 5692 - }, - { - "index": 8, - "is_dst": false, - "offset": 7200 - }, - { - "index": 12, - "is_dst": true, - "offset": 10800 - }, - { - "index": 17, - "is_dst": true, - "offset": 7200 - }, - { - "index": 22, - "is_dst": false, - "offset": 3600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f6698c0e9f2fa661-5b9f74a3daf3341b.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f6698c0e9f2fa661-5b9f74a3daf3341b.json deleted file mode 100644 index 8090f014a..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f6698c0e9f2fa661-5b9f74a3daf3341b.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt-14" - ], - "tzif": { - "designations": [ - "+", - "1", - "4", - "\u0000" - ], - "posix": { - "abbr": "+14", - "offset": 50400, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 50400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f677bd8d940386cc-514fff43e36a2f3.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f677bd8d940386cc-514fff43e36a2f3.json deleted file mode 100644 index df8156901..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f677bd8d940386cc-514fff43e36a2f3.json +++ /dev/null @@ -1,229 +0,0 @@ -{ - "ids": [ - "america/campo_grande" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-04", - "offset": -14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1767212492, - -1206954000, - -1191358800, - -1175371200, - -1159822800, - -633816000, - -622065600, - -602280000, - -591829200, - -570744000, - -560206800, - -539121600, - -531349200, - -191361600, - -184194000, - -155160000, - -150066000, - -128894400, - -121122000, - -99950400, - -89586000, - -68414400, - -57963600, - 499752000, - 511239600, - 530596800, - 540270000, - 562132800, - 571201200, - 592977600, - 602046000, - 624427200, - 634705200, - 656481600, - 666759600, - 687931200, - 697604400, - 719985600, - 728449200, - 750830400, - 761713200, - 782280000, - 793162800, - 813729600, - 824007600, - 844574400, - 856062000, - 876110400, - 888721200, - 908078400, - 919566000, - 938923200, - 951620400, - 970977600, - 982465200, - 1003032000, - 1013914800, - 1036296000, - 1045364400, - 1066536000, - 1076814000, - 1099368000, - 1108868400, - 1129435200, - 1140318000, - 1162699200, - 1172372400, - 1192334400, - 1203217200, - 1224388800, - 1234666800, - 1255838400, - 1266721200, - 1287288000, - 1298170800, - 1318737600, - 1330225200, - 1350792000, - 1361070000, - 1382241600, - 1392519600, - 1413691200, - 1424574000, - 1445140800, - 1456023600, - 1476590400, - 1487473200, - 1508040000, - 1518922800, - 1541304000, - 1550372400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -13108 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f757031187208623-bbd51b69dad6d77c.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f757031187208623-bbd51b69dad6d77c.json deleted file mode 100644 index d5aca19ef..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f757031187208623-bbd51b69dad6d77c.json +++ /dev/null @@ -1,65 +0,0 @@ -{ - "ids": [ - "america/martinique" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "F", - "F", - "M", - "T", - "\u0000", - "A", - "S", - "T", - "\u0000", - "A", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AST", - "offset": -14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2 - ], - "transitions": [ - -2524506940, - -1851537340, - 323841600, - 338958000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -14660 - }, - { - "index": 4, - "is_dst": false, - "offset": -14660 - }, - { - "index": 9, - "is_dst": false, - "offset": -14400 - }, - { - "index": 13, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f7b886dc80987d1f-7299122f555d393.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f7b886dc80987d1f-7299122f555d393.json deleted file mode 100644 index dcaa094f2..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f7b886dc80987d1f-7299122f555d393.json +++ /dev/null @@ -1,194 +0,0 @@ -{ - "ids": [ - "america/indiana/vincennes" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "C", - "W", - "T", - "\u0000", - "C", - "P", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": { - "abbr": "EDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 5, - 6, - 5, - 6, - 5, - 1, - 2, - 1, - 2, - 5 - ], - "transitions": [ - -2717647200, - -1633276800, - -1615136400, - -1601827200, - -1583686800, - -880214400, - -769395600, - -765392400, - -747244800, - -733942800, - -526492800, - -513190800, - -495043200, - -481741200, - -462996000, - -450291600, - -431539200, - -418237200, - -400089600, - -386787600, - -368640000, - -355338000, - -337190400, - -323888400, - -305740800, - -289414800, - -273686400, - -260989200, - -242236800, - -226515600, - -210787200, - -195066000, - -179337600, - -21488400, - -5767200, - 9961200, - 25682400, - 1143961200, - 1143964800, - 1162105200, - 1173600000, - 1194159600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -21007 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - }, - { - "index": 20, - "is_dst": false, - "offset": -18000 - }, - { - "index": 24, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f80d3a6707532038-da4e5800db81a377.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f80d3a6707532038-da4e5800db81a377.json deleted file mode 100644 index ab81f9176..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f80d3a6707532038-da4e5800db81a377.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt+8" - ], - "tzif": { - "designations": [ - "-", - "0", - "8", - "\u0000" - ], - "posix": { - "abbr": "-08", - "offset": -28800, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f842f34f4c14fee1-2341c229850c4cda.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f842f34f4c14fee1-2341c229850c4cda.json deleted file mode 100644 index fed767825..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f842f34f4c14fee1-2341c229850c4cda.json +++ /dev/null @@ -1,58 +0,0 @@ -{ - "ids": [ - "africa/monrovia" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "M", - "T", - "\u0000", - "G", - "M", - "T", - "\u0000" - ], - "posix": { - "abbr": "GMT", - "offset": 0, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3 - ], - "transitions": [ - -2776979812, - -1604359012, - 63593070 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -2588 - }, - { - "index": 4, - "is_dst": false, - "offset": -2588 - }, - { - "index": 4, - "is_dst": false, - "offset": -2670 - }, - { - "index": 8, - "is_dst": false, - "offset": 0 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f87d2aa5dfe5efe9-a9ae0f5629749e28.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f87d2aa5dfe5efe9-a9ae0f5629749e28.json deleted file mode 100644 index 73ea2716b..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f87d2aa5dfe5efe9-a9ae0f5629749e28.json +++ /dev/null @@ -1,286 +0,0 @@ -{ - "ids": [ - "america/kentucky/monticello" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "C", - "W", - "T", - "\u0000", - "C", - "P", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": { - "abbr": "EDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5, - 6, - 5 - ], - "transitions": [ - -2717647200, - -1633276800, - -1615136400, - -1601827200, - -1583686800, - -880214400, - -769395600, - -765392400, - -52934400, - -37213200, - -21484800, - -5763600, - 9964800, - 25686000, - 41414400, - 57740400, - 73468800, - 89190000, - 104918400, - 120639600, - 126691200, - 152089200, - 162374400, - 183538800, - 199267200, - 215593200, - 230716800, - 247042800, - 262771200, - 278492400, - 294220800, - 309942000, - 325670400, - 341391600, - 357120000, - 372841200, - 388569600, - 404895600, - 420019200, - 436345200, - 452073600, - 467794800, - 483523200, - 499244400, - 514972800, - 530694000, - 544608000, - 562143600, - 576057600, - 594198000, - 607507200, - 625647600, - 638956800, - 657097200, - 671011200, - 688546800, - 702460800, - 719996400, - 733910400, - 752050800, - 765360000, - 783500400, - 796809600, - 814950000, - 828864000, - 846399600, - 860313600, - 877849200, - 891763200, - 909298800, - 923212800, - 941353200, - 954662400, - 972802800, - 986108400, - 1004248800, - 1018162800, - 1035698400, - 1049612400, - 1067148000, - 1081062000, - 1099202400, - 1112511600, - 1130652000, - 1143961200, - 1162101600, - 1173596400, - 1194156000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -20364 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - }, - { - "index": 20, - "is_dst": false, - "offset": -18000 - }, - { - "index": 24, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f8baa073f0e62ab0-3710bd5eade125b5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f8baa073f0e62ab0-3710bd5eade125b5.json deleted file mode 100644 index 5a5faec93..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f8baa073f0e62ab0-3710bd5eade125b5.json +++ /dev/null @@ -1,264 +0,0 @@ -{ - "ids": [ - "america/detroit", - "us/michigan" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "W", - "T", - "\u0000", - "E", - "P", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "EST", - "offset": -18000, - "transition": { - "abbr": "EDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2, - 5, - 2 - ], - "transitions": [ - -2051202469, - -1724083200, - -880218000, - -769395600, - -765396000, - -684349200, - -671047200, - -80506740, - -68666400, - -52938000, - -37216800, - 104914800, - 120636000, - 126687600, - 152085600, - 167814000, - 183535200, - 199263600, - 215589600, - 230713200, - 247039200, - 262767600, - 278488800, - 294217200, - 309938400, - 325666800, - 341388000, - 357116400, - 372837600, - 388566000, - 404892000, - 420015600, - 436341600, - 452070000, - 467791200, - 483519600, - 499240800, - 514969200, - 530690400, - 544604400, - 562140000, - 576054000, - 594194400, - 607503600, - 625644000, - 638953200, - 657093600, - 671007600, - 688543200, - 702457200, - 719992800, - 733906800, - 752047200, - 765356400, - 783496800, - 796806000, - 814946400, - 828860400, - 846396000, - 860310000, - 877845600, - 891759600, - 909295200, - 923209200, - 941349600, - 954658800, - 972799200, - 986108400, - 1004248800, - 1018162800, - 1035698400, - 1049612400, - 1067148000, - 1081062000, - 1099202400, - 1112511600, - 1130652000, - 1143961200, - 1162101600, - 1173596400, - 1194156000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -19931 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": false, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -14400 - }, - { - "index": 16, - "is_dst": true, - "offset": -14400 - }, - { - "index": 20, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f9736e8dcd3eb5de-8e89d1e091320c52.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f9736e8dcd3eb5de-8e89d1e091320c52.json deleted file mode 100644 index 27e7c4514..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f9736e8dcd3eb5de-8e89d1e091320c52.json +++ /dev/null @@ -1,258 +0,0 @@ -{ - "ids": [ - "antarctica/macquarie" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000", - "A", - "E", - "S", - "T", - "\u0000", - "A", - "E", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AEST", - "offset": 36000, - "transition": { - "abbr": "AEDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 4, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 10, - 1, - 0 - ] - }, - "time": 10800 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 0, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2214259200, - -1680508800, - -1665388800, - -1601719200, - -687052800, - -71136000, - -55411200, - -37267200, - -25776000, - -5817600, - 5673600, - 25632000, - 37728000, - 57686400, - 67968000, - 89136000, - 100022400, - 120585600, - 131472000, - 152035200, - 162921600, - 183484800, - 194976000, - 215539200, - 226425600, - 246988800, - 257875200, - 278438400, - 289324800, - 309888000, - 320774400, - 341337600, - 352224000, - 372787200, - 386092800, - 404841600, - 417542400, - 436291200, - 447177600, - 467740800, - 478627200, - 499190400, - 510076800, - 530035200, - 542736000, - 562089600, - 574790400, - 594144000, - 606240000, - 625593600, - 637689600, - 657043200, - 670348800, - 686678400, - 701798400, - 718128000, - 733248000, - 749577600, - 764697600, - 781027200, - 796147200, - 812476800, - 828201600, - 844531200, - 859651200, - 875980800, - 891100800, - 907430400, - 922550400, - 938880000, - 954000000, - 967305600, - 985449600, - 1002384000, - 1017504000, - 1033833600, - 1048953600, - 1065283200, - 1080403200, - 1096732800, - 1111852800, - 1128182400, - 1143907200, - 1159632000, - 1174752000, - 1191686400, - 1207411200, - 1223136000, - 1238860800, - 1254585600, - 1293800400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - }, - { - "index": 4, - "is_dst": false, - "offset": 36000 - }, - { - "index": 9, - "is_dst": true, - "offset": 39600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-f9878deac6fa797b-36a060053a7f36d5.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-f9878deac6fa797b-36a060053a7f36d5.json deleted file mode 100644 index ea252bcd1..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-f9878deac6fa797b-36a060053a7f36d5.json +++ /dev/null @@ -1,192 +0,0 @@ -{ - "ids": [ - "asia/yerevan" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000" - ], - "posix": { - "abbr": "+04", - "offset": 14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -1441162680, - -405140400, - 354916800, - 370724400, - 386452800, - 402260400, - 417988800, - 433796400, - 449611200, - 465343200, - 481068000, - 496792800, - 512517600, - 528242400, - 543967200, - 559692000, - 575416800, - 591141600, - 606866400, - 622591200, - 638316000, - 654645600, - 670370400, - 670374000, - 686098800, - 701823600, - 717548400, - 733273200, - 748998000, - 764722800, - 780447600, - 796172400, - 811897200, - 859672800, - 877816800, - 891122400, - 909266400, - 922572000, - 941320800, - 954021600, - 972770400, - 985471200, - 1004220000, - 1017525600, - 1035669600, - 1048975200, - 1067119200, - 1080424800, - 1099173600, - 1111874400, - 1130623200, - 1143324000, - 1162072800, - 1174773600, - 1193522400, - 1206828000, - 1224972000, - 1238277600, - 1256421600, - 1269727200, - 1288476000, - 1301176800, - 1319925600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 10680 - }, - { - "index": 4, - "is_dst": false, - "offset": 10800 - }, - { - "index": 8, - "is_dst": false, - "offset": 14400 - }, - { - "index": 12, - "is_dst": true, - "offset": 18000 - }, - { - "index": 4, - "is_dst": true, - "offset": 14400 - }, - { - "index": 8, - "is_dst": true, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-fb562061c0f6e08b-e0cd9b29c584760f.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-fb562061c0f6e08b-e0cd9b29c584760f.json deleted file mode 100644 index 95fb01dc0..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-fb562061c0f6e08b-e0cd9b29c584760f.json +++ /dev/null @@ -1,105 +0,0 @@ -{ - "ids": [ - "pacific/fiji" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "1", - "2", - "\u0000", - "+", - "1", - "3", - "\u0000" - ], - "posix": { - "abbr": "+12", - "offset": 43200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -1709985344, - 909842400, - 920124000, - 941896800, - 951573600, - 1259416800, - 1269698400, - 1287842400, - 1299333600, - 1319292000, - 1327154400, - 1350741600, - 1358604000, - 1382796000, - 1390050000, - 1414850400, - 1421503200, - 1446300000, - 1452952800, - 1478354400, - 1484402400, - 1509804000, - 1515852000, - 1541253600, - 1547301600, - 1573308000, - 1578751200, - 1608386400, - 1610805600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 42944 - }, - { - "index": 4, - "is_dst": false, - "offset": 43200 - }, - { - "index": 8, - "is_dst": true, - "offset": 46800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-fb66f3417dbb2dfe-e7ed5dbff2300096.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-fb66f3417dbb2dfe-e7ed5dbff2300096.json deleted file mode 100644 index fbe8cfa45..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-fb66f3417dbb2dfe-e7ed5dbff2300096.json +++ /dev/null @@ -1,101 +0,0 @@ -{ - "ids": [ - "asia/karachi" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "5", - "3", - "0", - "\u0000", - "+", - "0", - "6", - "3", - "0", - "\u0000", - "+", - "0", - "5", - "\u0000", - "P", - "K", - "T", - "\u0000", - "P", - "K", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "PKT", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 4, - 5, - 4, - 5, - 4, - 5, - 4 - ], - "transitions": [ - -1988166492, - -862637400, - -764145000, - -576135000, - 38775600, - 1018119600, - 1033840800, - 1212260400, - 1225476000, - 1239735600, - 1257012000 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 16092 - }, - { - "index": 4, - "is_dst": false, - "offset": 19800 - }, - { - "index": 10, - "is_dst": true, - "offset": 23400 - }, - { - "index": 16, - "is_dst": false, - "offset": 18000 - }, - { - "index": 20, - "is_dst": false, - "offset": 18000 - }, - { - "index": 24, - "is_dst": true, - "offset": 21600 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-fbccf04b5b2fd7f2-7c4513b8357993a2.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-fbccf04b5b2fd7f2-7c4513b8357993a2.json deleted file mode 100644 index e74a7e143..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-fbccf04b5b2fd7f2-7c4513b8357993a2.json +++ /dev/null @@ -1,97 +0,0 @@ -{ - "ids": [ - "america/managua" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "M", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 4, - 2, - 4, - 2, - 3, - 2, - 3, - 2, - 4, - 2, - 4, - 2 - ], - "transitions": [ - -2524500892, - -1121105688, - 105084000, - 161758800, - 290584800, - 299134800, - 322034400, - 330584400, - 694260000, - 717310800, - 725868000, - 852094800, - 1113112800, - 1128229200, - 1146384000, - 1159682400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -20708 - }, - { - "index": 4, - "is_dst": false, - "offset": -20712 - }, - { - "index": 8, - "is_dst": false, - "offset": -21600 - }, - { - "index": 12, - "is_dst": false, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-fc89b67bba9eff21-c8e33ae38174eac0.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-fc89b67bba9eff21-c8e33ae38174eac0.json deleted file mode 100644 index 56a293f55..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-fc89b67bba9eff21-c8e33ae38174eac0.json +++ /dev/null @@ -1,110 +0,0 @@ -{ - "ids": [ - "asia/kuala_lumpur", - "asia/singapore", - "singapore" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "S", - "M", - "T", - "\u0000", - "+", - "0", - "7", - "\u0000", - "+", - "0", - "7", - "2", - "0", - "\u0000", - "+", - "0", - "7", - "3", - "0", - "\u0000", - "+", - "0", - "9", - "\u0000", - "+", - "0", - "8", - "\u0000" - ], - "posix": { - "abbr": "+08", - "offset": 28800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 5, - 6, - 5, - 7 - ], - "transitions": [ - -2177477725, - -2038200925, - -1167634800, - -1073028000, - -894180000, - -879665400, - -767005200, - 378662400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 24925 - }, - { - "index": 4, - "is_dst": false, - "offset": 24925 - }, - { - "index": 8, - "is_dst": false, - "offset": 25200 - }, - { - "index": 12, - "is_dst": true, - "offset": 26400 - }, - { - "index": 12, - "is_dst": false, - "offset": 26400 - }, - { - "index": 18, - "is_dst": false, - "offset": 27000 - }, - { - "index": 24, - "is_dst": false, - "offset": 32400 - }, - { - "index": 28, - "is_dst": false, - "offset": 28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-fc9fd017e19a24e0-d652255d68c25ab0.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-fc9fd017e19a24e0-d652255d68c25ab0.json deleted file mode 100644 index 178315aa9..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-fc9fd017e19a24e0-d652255d68c25ab0.json +++ /dev/null @@ -1,293 +0,0 @@ -{ - "ids": [ - "america/indiana/knox", - "america/knox_in", - "us/indiana-starke" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "S", - "T", - "\u0000", - "C", - "D", - "T", - "\u0000", - "C", - "W", - "T", - "\u0000", - "C", - "P", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "CST", - "offset": -21600, - "transition": { - "abbr": "CDT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 2, - 1, - 3, - 4, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 5, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 1, - 2, - 5, - 1, - 2, - 1, - 2, - 1 - ], - "transitions": [ - -2717647200, - -1633276800, - -1615136400, - -1601827200, - -1583686800, - -880214400, - -769395600, - -765392400, - -715795200, - -702493200, - -684345600, - -671043600, - -652896000, - -639594000, - -620841600, - -608144400, - -589392000, - -576090000, - -557942400, - -544640400, - -526492800, - -513190800, - -495043200, - -481741200, - -463593600, - -447267600, - -431539200, - -415818000, - -400089600, - -386787600, - -368640000, - -355338000, - -337190400, - -321469200, - -305740800, - -289414800, - -273686400, - -257965200, - -242236800, - -195066000, - -84384000, - -68662800, - -52934400, - -37213200, - -21484800, - -5763600, - 9964800, - 25686000, - 41414400, - 57740400, - 73468800, - 89190000, - 104918400, - 120639600, - 126691200, - 152089200, - 162374400, - 183538800, - 199267200, - 215593200, - 230716800, - 247042800, - 262771200, - 278492400, - 294220800, - 309942000, - 325670400, - 341391600, - 357120000, - 372841200, - 388569600, - 404895600, - 420019200, - 436345200, - 452073600, - 467794800, - 483523200, - 499244400, - 514972800, - 530694000, - 544608000, - 562143600, - 576057600, - 594198000, - 607507200, - 625647600, - 638956800, - 657097200, - 671011200, - 688546800, - 1143961200, - 1143964800, - 1162105200, - 1173600000, - 1194159600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -20790 - }, - { - "index": 4, - "is_dst": false, - "offset": -21600 - }, - { - "index": 8, - "is_dst": true, - "offset": -18000 - }, - { - "index": 12, - "is_dst": true, - "offset": -18000 - }, - { - "index": 16, - "is_dst": true, - "offset": -18000 - }, - { - "index": 20, - "is_dst": false, - "offset": -18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-fd03910821368f68-967a7c79ce4382de.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-fd03910821368f68-967a7c79ce4382de.json deleted file mode 100644 index c19444ace..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-fd03910821368f68-967a7c79ce4382de.json +++ /dev/null @@ -1,198 +0,0 @@ -{ - "ids": [ - "america/argentina/mendoza", - "america/mendoza" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "C", - "M", - "T", - "\u0000", - "-", - "0", - "4", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 4, - 5, - 4, - 5, - 2, - 3, - 2, - 3, - 2, - 5, - 4, - 6, - 4, - 2, - 4, - 5, - 4 - ], - "transitions": [ - -2372095484, - -1567453392, - -1233432000, - -1222981200, - -1205956800, - -1194037200, - -1172865600, - -1162501200, - -1141329600, - -1130965200, - -1109793600, - -1099429200, - -1078257600, - -1067806800, - -1046635200, - -1036270800, - -1015099200, - -1004734800, - -983563200, - -973198800, - -952027200, - -941576400, - -931032000, - -900882000, - -890337600, - -833749200, - -827265600, - -752274000, - -733780800, - -197326800, - -190843200, - -184194000, - -164491200, - -152658000, - -132955200, - -121122000, - -101419200, - -86821200, - -71092800, - -54766800, - -39038400, - -23317200, - -7588800, - 128142000, - 136605600, - 596948400, - 605066400, - 624423600, - 636516000, - 655963200, - 667796400, - 687499200, - 699418800, - 719380800, - 731469600, - 938919600, - 952052400, - 1085281200, - 1096171200, - 1198983600, - 1205632800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -16516 - }, - { - "index": 4, - "is_dst": false, - "offset": -15408 - }, - { - "index": 8, - "is_dst": false, - "offset": -14400 - }, - { - "index": 12, - "is_dst": true, - "offset": -10800 - }, - { - "index": 12, - "is_dst": false, - "offset": -10800 - }, - { - "index": 16, - "is_dst": true, - "offset": -7200 - }, - { - "index": 8, - "is_dst": true, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-fd823ec71e5980ce-61ce31daf994c234.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-fd823ec71e5980ce-61ce31daf994c234.json deleted file mode 100644 index f4ad74c50..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-fd823ec71e5980ce-61ce31daf994c234.json +++ /dev/null @@ -1,51 +0,0 @@ -{ - "ids": [ - "antarctica/mawson" - ], - "tzif": { - "designations": [ - "-", - "0", - "0", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "5", - "\u0000" - ], - "posix": { - "abbr": "+05", - "offset": 18000, - "transition": null - }, - "transition_types": [ - 1, - 2 - ], - "transitions": [ - -501206400, - 1255809600 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 0 - }, - { - "index": 4, - "is_dst": false, - "offset": 21600 - }, - { - "index": 8, - "is_dst": false, - "offset": 18000 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-fe6e0efb644eced9-95ac36e743963528.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-fe6e0efb644eced9-95ac36e743963528.json deleted file mode 100644 index c3b391850..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-fe6e0efb644eced9-95ac36e743963528.json +++ /dev/null @@ -1,84 +0,0 @@ -{ - "ids": [ - "america/lima" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "-", - "0", - "5", - "\u0000", - "-", - "0", - "4", - "\u0000" - ], - "posix": { - "abbr": "-05", - "offset": -18000, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -2524503108, - -1938538284, - -1009825200, - -1002052800, - -986756400, - -971035200, - -955306800, - -939585600, - 504939600, - 512712000, - 536475600, - 544248000, - 631170000, - 638942400, - 757400400, - 765172800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -18492 - }, - { - "index": 0, - "is_dst": false, - "offset": -18516 - }, - { - "index": 4, - "is_dst": false, - "offset": -18000 - }, - { - "index": 8, - "is_dst": true, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json deleted file mode 100644 index e45d377bc..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-fe8583499fe1cbb8-e2a0bf322d1d5357.json +++ /dev/null @@ -1,53 +0,0 @@ -{ - "ids": [ - "africa/abidjan", - "africa/accra", - "africa/bamako", - "africa/banjul", - "africa/conakry", - "africa/dakar", - "africa/freetown", - "africa/lome", - "africa/nouakchott", - "africa/ouagadougou", - "africa/timbuktu", - "atlantic/reykjavik", - "atlantic/st_helena", - "iceland" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "G", - "M", - "T", - "\u0000" - ], - "posix": { - "abbr": "GMT", - "offset": 0, - "transition": null - }, - "transition_types": [ - 1 - ], - "transitions": [ - -1830383032 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -968 - }, - { - "index": 4, - "is_dst": false, - "offset": 0 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-fed5f41e1701789d-f9f57f6486c67cc.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-fed5f41e1701789d-f9f57f6486c67cc.json deleted file mode 100644 index 5c940021a..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-fed5f41e1701789d-f9f57f6486c67cc.json +++ /dev/null @@ -1,27 +0,0 @@ -{ - "ids": [ - "etc/gmt+3" - ], - "tzif": { - "designations": [ - "-", - "0", - "3", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": null - }, - "transition_types": [], - "transitions": [], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -10800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-fef149820a82a100-1aa09fc05f12fa68.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-fef149820a82a100-1aa09fc05f12fa68.json deleted file mode 100644 index c4f1c2f62..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-fef149820a82a100-1aa09fc05f12fa68.json +++ /dev/null @@ -1,200 +0,0 @@ -{ - "ids": [ - "asia/baku" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "3", - "\u0000", - "+", - "0", - "4", - "\u0000", - "+", - "0", - "5", - "\u0000" - ], - "posix": { - "abbr": "+04", - "offset": 14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 5, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2 - ], - "transitions": [ - -1441163964, - -405140400, - 354916800, - 370724400, - 386452800, - 402260400, - 417988800, - 433796400, - 449611200, - 465343200, - 481068000, - 496792800, - 512517600, - 528242400, - 543967200, - 559692000, - 575416800, - 591141600, - 606866400, - 622591200, - 638316000, - 654645600, - 670370400, - 670374000, - 686098800, - 701823600, - 717548400, - 828234000, - 846378000, - 859680000, - 877824000, - 891129600, - 909273600, - 922579200, - 941328000, - 954028800, - 972777600, - 985478400, - 1004227200, - 1017532800, - 1035676800, - 1048982400, - 1067126400, - 1080432000, - 1099180800, - 1111881600, - 1130630400, - 1143331200, - 1162080000, - 1174780800, - 1193529600, - 1206835200, - 1224979200, - 1238284800, - 1256428800, - 1269734400, - 1288483200, - 1301184000, - 1319932800, - 1332633600, - 1351382400, - 1364688000, - 1382832000, - 1396137600, - 1414281600, - 1427587200, - 1445731200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 11964 - }, - { - "index": 4, - "is_dst": false, - "offset": 10800 - }, - { - "index": 8, - "is_dst": false, - "offset": 14400 - }, - { - "index": 12, - "is_dst": true, - "offset": 18000 - }, - { - "index": 4, - "is_dst": true, - "offset": 14400 - }, - { - "index": 8, - "is_dst": true, - "offset": 14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-ff54b8a04d630c85-b67e8cd36304f03a.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-ff54b8a04d630c85-b67e8cd36304f03a.json deleted file mode 100644 index bcc7fe31a..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-ff54b8a04d630c85-b67e8cd36304f03a.json +++ /dev/null @@ -1,207 +0,0 @@ -{ - "ids": [ - "asia/barnaul" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "+", - "0", - "6", - "\u0000", - "+", - "0", - "7", - "\u0000", - "+", - "0", - "8", - "\u0000" - ], - "posix": { - "abbr": "+07", - "offset": 25200, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 2, - 4, - 5, - 1, - 6, - 3, - 2, - 3, - 2, - 3, - 2, - 3, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 5, - 1, - 2, - 1, - 2 - ], - "transitions": [ - -1579844100, - -1247551200, - 354906000, - 370713600, - 386442000, - 402249600, - 417978000, - 433785600, - 449600400, - 465332400, - 481057200, - 496782000, - 512506800, - 528231600, - 543956400, - 559681200, - 575406000, - 591130800, - 606855600, - 622580400, - 638305200, - 654634800, - 670359600, - 670363200, - 686088000, - 695764800, - 701809200, - 717534000, - 733258800, - 748983600, - 764708400, - 780433200, - 796158000, - 801590400, - 811886400, - 828216000, - 846360000, - 859665600, - 877809600, - 891115200, - 909259200, - 922564800, - 941313600, - 954014400, - 972763200, - 985464000, - 1004212800, - 1017518400, - 1035662400, - 1048968000, - 1067112000, - 1080417600, - 1099166400, - 1111867200, - 1130616000, - 1143316800, - 1162065600, - 1174766400, - 1193515200, - 1206820800, - 1224964800, - 1238270400, - 1256414400, - 1269720000, - 1288468800, - 1301169600, - 1414263600, - 1459022400 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": 20100 - }, - { - "index": 4, - "is_dst": false, - "offset": 21600 - }, - { - "index": 8, - "is_dst": false, - "offset": 25200 - }, - { - "index": 12, - "is_dst": true, - "offset": 28800 - }, - { - "index": 4, - "is_dst": true, - "offset": 25200 - }, - { - "index": 8, - "is_dst": true, - "offset": 25200 - }, - { - "index": 8, - "is_dst": true, - "offset": 28800 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-ffb42884e83683a9-9444a824bd2f74b7.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-ffb42884e83683a9-9444a824bd2f74b7.json deleted file mode 100644 index 3f18ea2ab..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-ffb42884e83683a9-9444a824bd2f74b7.json +++ /dev/null @@ -1,178 +0,0 @@ -{ - "ids": [ - "america/miquelon" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "A", - "S", - "T", - "\u0000", - "-", - "0", - "3", - "\u0000", - "-", - "0", - "2", - "\u0000" - ], - "posix": { - "abbr": "-03", - "offset": -10800, - "transition": { - "abbr": "-02", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 3, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2 - ], - "transitions": [ - -1847650520, - 326001600, - 536468400, - 544593600, - 562132800, - 576046800, - 594187200, - 607496400, - 625636800, - 638946000, - 657086400, - 671000400, - 688536000, - 702450000, - 719985600, - 733899600, - 752040000, - 765349200, - 783489600, - 796798800, - 814939200, - 828853200, - 846388800, - 860302800, - 877838400, - 891752400, - 909288000, - 923202000, - 941342400, - 954651600, - 972792000, - 986101200, - 1004241600, - 1018155600, - 1035691200, - 1049605200, - 1067140800, - 1081054800, - 1099195200, - 1112504400, - 1130644800, - 1143954000, - 1162094400, - 1173589200, - 1194148800 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -13480 - }, - { - "index": 4, - "is_dst": false, - "offset": -14400 - }, - { - "index": 8, - "is_dst": false, - "offset": -10800 - }, - { - "index": 8, - "is_dst": true, - "offset": -7200 - }, - { - "index": 12, - "is_dst": true, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-ffd87968a303e340-28f6b9547e3e9a2.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-ffd87968a303e340-28f6b9547e3e9a2.json deleted file mode 100644 index 1bd3461ef..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-ffd87968a303e340-28f6b9547e3e9a2.json +++ /dev/null @@ -1,111 +0,0 @@ -{ - "ids": [ - "america/santo_domingo" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "S", - "D", - "M", - "T", - "\u0000", - "E", - "S", - "T", - "\u0000", - "E", - "D", - "T", - "\u0000", - "-", - "0", - "4", - "3", - "0", - "\u0000", - "A", - "S", - "T", - "\u0000" - ], - "posix": { - "abbr": "AST", - "offset": -14400, - "transition": null - }, - "transition_types": [ - 1, - 2, - 3, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 4, - 2, - 5, - 2, - 5 - ], - "transitions": [ - -2524504824, - -1159773600, - -100119600, - -89668800, - -5770800, - 4422600, - 25678800, - 33193800, - 57733200, - 64816200, - 89182800, - 96438600, - 120632400, - 127974600, - 152082000, - 972799200, - 975823200 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -16776 - }, - { - "index": 4, - "is_dst": false, - "offset": -16800 - }, - { - "index": 9, - "is_dst": false, - "offset": -18000 - }, - { - "index": 13, - "is_dst": true, - "offset": -14400 - }, - { - "index": 17, - "is_dst": true, - "offset": -16200 - }, - { - "index": 23, - "is_dst": false, - "offset": -14400 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/data/debug/zoneinfo/tzifs/tzif-ffd87e4e007fc8e2-d43988e2f0a4e004.json b/provider/src/data/debug/zoneinfo/tzifs/tzif-ffd87e4e007fc8e2-d43988e2f0a4e004.json deleted file mode 100644 index 42236801b..000000000 --- a/provider/src/data/debug/zoneinfo/tzifs/tzif-ffd87e4e007fc8e2-d43988e2f0a4e004.json +++ /dev/null @@ -1,432 +0,0 @@ -{ - "ids": [ - "america/goose_bay" - ], - "tzif": { - "designations": [ - "L", - "M", - "T", - "\u0000", - "N", - "S", - "T", - "\u0000", - "N", - "D", - "T", - "\u0000", - "N", - "W", - "T", - "\u0000", - "N", - "P", - "T", - "\u0000", - "A", - "S", - "T", - "\u0000", - "A", - "D", - "T", - "\u0000", - "A", - "D", - "D", - "T", - "\u0000" - ], - "posix": { - "abbr": "AST", - "offset": -14400, - "transition": { - "abbr": "ADT", - "end": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 11, - 1, - 0 - ] - }, - "time": 7200 - }, - "savings": 3600, - "start": { - "date": { - "day": null, - "kind": "MonthWeekDay", - "mwd": [ - 3, - 2, - 0 - ] - }, - "time": 7200 - } - } - }, - "transition_types": [ - 1, - 2, - 1, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 5, - 6, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 4, - 3, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 9, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8, - 7, - 8 - ], - "transitions": [ - -2713895900, - -1632076148, - -1615145348, - -1096921748, - -1061670600, - -1048973400, - -1030221000, - -1017523800, - -998771400, - -986074200, - -966717000, - -954624600, - -935267400, - -922570200, - -903817800, - -891120600, - -872368200, - -769395600, - -765401400, - -746044200, - -733347000, - -714594600, - -701897400, - -683145000, - -670447800, - -651695400, - -638998200, - -619641000, - -606943800, - -589401000, - -576099000, - -557951400, - -544649400, - -526501800, - -513199800, - -495052200, - -481750200, - -463602600, - -450300600, - -431548200, - -418246200, - -400098600, - -386796600, - -368649000, - -355347000, - -337199400, - -323897400, - -305749800, - -289423800, - -273695400, - -257974200, - -242245800, - -226524600, - -210796200, - -195075000, - -179346600, - -163625400, - -147897000, - -131571000, - -119903400, - -116445600, - -100119600, - -84391200, - -68670000, - -52941600, - -37220400, - -21492000, - -5770800, - 9957600, - 25678800, - 41407200, - 57733200, - 73461600, - 89182800, - 104911200, - 120632400, - 136360800, - 152082000, - 167810400, - 183531600, - 199260000, - 215586000, - 230709600, - 247035600, - 262764000, - 278485200, - 294213600, - 309934800, - 325663200, - 341384400, - 357112800, - 372834000, - 388562400, - 404888400, - 420012000, - 436338000, - 452066400, - 467787600, - 483516000, - 499237200, - 514965600, - 530686800, - 544593660, - 562129260, - 576043260, - 594180060, - 607492860, - 625633260, - 638942460, - 657082860, - 670996860, - 688532460, - 702446460, - 719982060, - 733896060, - 752036460, - 765345660, - 783486060, - 796795260, - 814935660, - 828849660, - 846385260, - 860299260, - 877834860, - 891748860, - 909284460, - 923198460, - 941338860, - 954648060, - 972788460, - 986097660, - 1004238060, - 1018152060, - 1035687660, - 1049601660, - 1067137260, - 1081051260, - 1099191660, - 1112500860, - 1130641260, - 1143950460, - 1162090860, - 1173585660, - 1194145260, - 1205035260, - 1225594860, - 1236484860, - 1257044460, - 1268539260, - 1289098860, - 1299988860 - ], - "types": [ - { - "index": 0, - "is_dst": false, - "offset": -14500 - }, - { - "index": 4, - "is_dst": false, - "offset": -12652 - }, - { - "index": 8, - "is_dst": true, - "offset": -9052 - }, - { - "index": 4, - "is_dst": false, - "offset": -12600 - }, - { - "index": 8, - "is_dst": true, - "offset": -9000 - }, - { - "index": 12, - "is_dst": true, - "offset": -9000 - }, - { - "index": 16, - "is_dst": true, - "offset": -9000 - }, - { - "index": 20, - "is_dst": false, - "offset": -14400 - }, - { - "index": 24, - "is_dst": true, - "offset": -10800 - }, - { - "index": 28, - "is_dst": true, - "offset": -7200 - } - ] - } -} \ No newline at end of file diff --git a/provider/src/lib.rs b/provider/src/lib.rs deleted file mode 100644 index 431319d55..000000000 --- a/provider/src/lib.rs +++ /dev/null @@ -1,144 +0,0 @@ -//! Providers for time zone data -//! -//! Let's talk about time zone data everyone! -//! -//! At a high level, the `timezone_provider` crate provides a set of traits along with a few -//! implementations of those traits. The general intention here is to make providing time zone -//! data as agnostic and easy as possible. -//! -//! This crate is fairly "low level" at least as far as date and time needs are concerned. So -//! we'll cover the basic overview of the trait and some of the general implementations of -//! those traits, and then we will go on a bit further of a dive for the power users that -//! are interested in implementing their own provider or is just really curious about what -//! is going on. -//! -//! ## Available providers -//! -//! Below is a list of currently available time zone providers. -//! -//! - `ZoneInfo64TzdbProvider`: a provider using ICU4C's zoneinfo64 resource bundle (enable with `zoneinfo64` features flag) -//! - `FsTzdbProvider`: a provider that reads and parses tzdata at runtime from the host file system's -//! TZif files (enable with `tzif` feature flag) -//! - `CompiledTzdbProvider`: a provider that reads and parses tzdata at runtime from TZifs compiled -//! into the application (enable with `tzif` feature flag) -//! - `ZeroCompiledTzdbProvider`: a provider that deserializes time zone data from TZifs compiled -//! into the application (enable with `experimental_tzif` feature flag) -//! -//! ## Time zone provider traits -//! -//! This crate provides three primary traits for working with time zone data. -//! -//! - [`TimeZoneProvider`][crate::provider::TimeZoneProvider] -//! - [`TimeZoneNormalizer`][crate::provider::TimeZoneNormalizer] -//! - [`TimeZoneResolver`][crate::provider::TimeZoneResolver] -//! -//! The first trait `TimeZoneProvider` is the primary interface for a time zone provider used by `temporal_rs`. -//! -//! Meanwhile, the two other traits, `TimeZoneNormalizer` and `TimeZoneResolver`, are secondary -//! traits that can be used to implement the core `TimeZoneProvider`. Once implemented, this -//! crate providers a default type for creating a `TimeZoneProvider` by mixing and matching objects that implement the secondary -//! traits, `NormalizerAndResolver`. -//! -//! ### Why two secondary traits? -//! -//! Well that's because `TimeZoneProvider` handles two different concerns: fetching and -//! formatting normalized and canonicalized time zone identifiers, and resolving time -//! zone data requests. This functionality typically requires two different sets of data, -//! each of which may be in a variety of formats. -//! -//! ### Why not just have the two secondary traits without `TimeZoneProvider`? -//! -//! Well while the functionality typically requires two sets of data. Those sets are not -//! necessarily completely unique. The time zone database updates potentially multiple times a -//! year so having your formatting in 2025a while your data is in 2025b could cause some -//! desync. So in order to better represent this `TimeZoneProvider` is used on top of them. -//! -//! **NOTE:** you CAN always just directly use `TimeZoneNormalizer` and -//! `TimeZoneResolver` together if you want. We just wouldn't recommemnd it. -//! - -#![no_std] -#![cfg_attr( - not(test), - warn(clippy::unwrap_used, clippy::expect_used, clippy::indexing_slicing) -)] - -extern crate alloc; - -#[cfg(feature = "std")] -extern crate std; - -#[macro_use] -mod private { - include!("./data/mod.rs"); -} - -mod tzdb; -pub use tzdb::{CompiledNormalizer, IanaIdentifierNormalizer}; - -#[cfg(feature = "tzif")] -pub mod tzif; - -#[cfg(feature = "experimental_tzif")] -pub mod experimental_tzif; - -#[cfg(feature = "zoneinfo64")] -pub mod zoneinfo64; - -pub mod epoch_nanoseconds; - -#[cfg(any(feature = "tzif", feature = "experimental_tzif"))] -pub(crate) mod common; - -#[doc(hidden)] -pub mod utils; - -mod error; -pub mod provider; -pub use error::TimeZoneProviderError; - -use crate as timezone_provider; -iana_normalizer_singleton!(SINGLETON_IANA_NORMALIZER); - -#[cfg(test)] -mod tests { - extern crate alloc; - use super::SINGLETON_IANA_NORMALIZER; - - #[test] - fn basic_normalization() { - let index = SINGLETON_IANA_NORMALIZER - .available_id_index - .get("America/CHICAGO") - .unwrap(); - assert_eq!( - SINGLETON_IANA_NORMALIZER.normalized_identifiers.get(index), - Some("America/Chicago") - ); - - let index = SINGLETON_IANA_NORMALIZER - .available_id_index - .get("uTc") - .unwrap(); - assert_eq!( - SINGLETON_IANA_NORMALIZER.normalized_identifiers.get(index), - Some("UTC") - ); - - let index = SINGLETON_IANA_NORMALIZER - .available_id_index - .get("eTC/uTc") - .unwrap(); - assert_eq!( - SINGLETON_IANA_NORMALIZER.normalized_identifiers.get(index), - Some("Etc/UTC") - ); - } - - #[test] - #[cfg(feature = "experimental_tzif")] - fn zone_info_basic() { - let tzif = crate::experimental_tzif::COMPILED_ZONEINFO_PROVIDER.get("America/Chicago"); - assert!(tzif.is_some()) - } -} diff --git a/src/builtins/core/calendar.rs b/src/builtins/core/calendar.rs deleted file mode 100644 index 9d9c1ab46..000000000 --- a/src/builtins/core/calendar.rs +++ /dev/null @@ -1,1071 +0,0 @@ -//! This module implements the calendar traits and related components. -//! -//! The goal of the calendar module of `boa_temporal` is to provide -//! Temporal compatible calendar implementations. - -use crate::{ - builtins::core::{ - duration::DateDuration, Duration, PlainDate, PlainDateTime, PlainMonthDay, PlainYearMonth, - }, - error::ErrorMessage, - iso::IsoDate, - options::{Overflow, Unit}, - parsers::parse_allowed_calendar_formats, - TemporalError, TemporalResult, -}; -use core::str::FromStr; - -use icu_calendar::{ - cal::{ - Buddhist, ChineseTraditional, Coptic, Ethiopian, EthiopianEraStyle, Hebrew, Hijri, Indian, - Japanese, KoreanTraditional, Persian, Roc, - }, - AnyCalendar, AnyCalendarKind, Calendar as IcuCalendar, Iso, Ref, -}; -use icu_calendar::{ - cal::{HijriTabularEpoch, HijriTabularLeapYears}, - options::DateDurationUnit as IcuUnit, - options::{ - DateAddOptions, DateDifferenceOptions, DateFromFieldsOptions, MissingFieldsStrategy, - Overflow as IcuOverflow, - }, - preferences::CalendarAlgorithm, - types::DateDuration as IcuDateDuration, - types::DateFields, - Gregorian, -}; -use icu_locale_core::extensions::unicode::Value; -use tinystr::TinyAsciiStr; - -use super::ZonedDateTime; - -mod fields; -mod types; - -pub use fields::{CalendarFields, YearMonthCalendarFields}; -#[cfg(test)] -pub(crate) use types::month_to_month_code; -pub(crate) use types::ResolutionType; -pub use types::{MonthCode, ResolvedIsoFields}; - -/// The core `Calendar` type for `temporal_rs` -/// -/// A `Calendar` in `temporal_rs` can be any calendar that is currently -/// supported by [`icu_calendar`]. -#[derive(Debug, Clone)] -pub struct Calendar(Ref<'static, AnyCalendar>); - -impl Default for Calendar { - fn default() -> Self { - Self::ISO - } -} - -impl PartialEq for Calendar { - fn eq(&self, other: &Self) -> bool { - self.identifier() == other.identifier() - } -} - -impl Eq for Calendar {} - -impl Calendar { - /// The Buddhist calendar - pub const BUDDHIST: Self = Self::new(AnyCalendarKind::Buddhist); - /// The Chinese calendar - pub const CHINESE: Self = Self::new(AnyCalendarKind::Chinese); - /// The Coptic calendar - pub const COPTIC: Self = Self::new(AnyCalendarKind::Coptic); - /// The Dangi calendar - pub const DANGI: Self = Self::new(AnyCalendarKind::Dangi); - /// The Ethiopian calendar - pub const ETHIOPIAN: Self = Self::new(AnyCalendarKind::Ethiopian); - /// The Ethiopian Amete Alem calendar - pub const ETHIOPIAN_AMETE_ALEM: Self = Self::new(AnyCalendarKind::EthiopianAmeteAlem); - /// The Gregorian calendar - pub const GREGORIAN: Self = Self::new(AnyCalendarKind::Gregorian); - /// The Hebrew calendar - pub const HEBREW: Self = Self::new(AnyCalendarKind::Hebrew); - /// The Indian calendar - pub const INDIAN: Self = Self::new(AnyCalendarKind::Indian); - /// The Hijri Tabular calendar with a Friday epoch - pub const HIJRI_TABULAR_FRIDAY: Self = Self::new(AnyCalendarKind::HijriTabularTypeIIFriday); - /// The Hijri Tabular calendar with a Thursday epoch - pub const HIJRI_TABULAR_THURSDAY: Self = Self::new(AnyCalendarKind::HijriTabularTypeIIThursday); - /// The Hijri Umm al-Qura calendar - pub const HIJRI_UMM_AL_QURA: Self = Self::new(AnyCalendarKind::HijriUmmAlQura); - /// The ISO 8601 calendar - pub const ISO: Self = Self::new(AnyCalendarKind::Iso); - /// The Japanese calendar - pub const JAPANESE: Self = Self::new(AnyCalendarKind::Japanese); - /// The Persian calendar - pub const PERSIAN: Self = Self::new(AnyCalendarKind::Persian); - /// The ROC calendar - pub const ROC: Self = Self::new(AnyCalendarKind::Roc); - - /// Create a `Calendar` from an ICU [`AnyCalendarKind`]. - #[warn(clippy::wildcard_enum_match_arm)] // Warns if the calendar kind gets out of sync. - pub const fn new(kind: AnyCalendarKind) -> Self { - let cal = match kind { - AnyCalendarKind::Buddhist => &AnyCalendar::Buddhist(Buddhist), - AnyCalendarKind::Chinese => const { &AnyCalendar::Chinese(ChineseTraditional::new()) }, - AnyCalendarKind::Coptic => &AnyCalendar::Coptic(Coptic), - AnyCalendarKind::Dangi => const { &AnyCalendar::Dangi(KoreanTraditional::new()) }, - AnyCalendarKind::Ethiopian => { - const { - &AnyCalendar::Ethiopian(Ethiopian::new_with_era_style( - EthiopianEraStyle::AmeteMihret, - )) - } - } - AnyCalendarKind::EthiopianAmeteAlem => { - const { - &AnyCalendar::Ethiopian(Ethiopian::new_with_era_style( - EthiopianEraStyle::AmeteAlem, - )) - } - } - AnyCalendarKind::Gregorian => &AnyCalendar::Gregorian(Gregorian), - AnyCalendarKind::Hebrew => &AnyCalendar::Hebrew(Hebrew), - AnyCalendarKind::Indian => &AnyCalendar::Indian(Indian), - AnyCalendarKind::HijriTabularTypeIIFriday => { - const { - &AnyCalendar::HijriTabular(Hijri::new_tabular( - HijriTabularLeapYears::TypeII, - HijriTabularEpoch::Friday, - )) - } - } - AnyCalendarKind::HijriSimulatedMecca => { - // This calendar is currently unsupported by Temporal - &AnyCalendar::Iso(Iso) - } - AnyCalendarKind::HijriTabularTypeIIThursday => { - const { - &AnyCalendar::HijriTabular(Hijri::new_tabular( - HijriTabularLeapYears::TypeII, - HijriTabularEpoch::Thursday, - )) - } - } - AnyCalendarKind::HijriUmmAlQura => { - const { &AnyCalendar::HijriUmmAlQura(Hijri::new_umm_al_qura()) } - } - AnyCalendarKind::Iso => &AnyCalendar::Iso(Iso), - #[allow( - deprecated, - reason = "need to match on JapaneseExtended for exhaustiveness" - )] - AnyCalendarKind::Japanese | AnyCalendarKind::JapaneseExtended => { - const { &AnyCalendar::Japanese(Japanese::new()) } - } - AnyCalendarKind::Persian => &AnyCalendar::Persian(Persian), - AnyCalendarKind::Roc => &AnyCalendar::Roc(Roc), - _ => { - debug_assert!( - false, - "Unreachable: match must handle all variants of `AnyCalendarKind`" - ); - &AnyCalendar::Iso(Iso) - } - }; - - Self(Ref(cal)) - } - - /// Returns a `Calendar` from the a slice of UTF-8 encoded bytes. - pub fn try_from_utf8(bytes: &[u8]) -> TemporalResult { - let kind = Self::try_kind_from_utf8(bytes)?; - Ok(Self::new(kind)) - } - - /// Returns a `Calendar` from the a slice of UTF-8 encoded bytes. - pub(crate) fn try_kind_from_utf8(bytes: &[u8]) -> TemporalResult { - // TODO: Determine the best way to handle "julian" here. - // Not supported by `CalendarAlgorithm` - let icu_locale_value = Value::try_from_utf8(&bytes.to_ascii_lowercase()) - .map_err(|_| TemporalError::range().with_message("unknown calendar"))?; - let algorithm = CalendarAlgorithm::try_from(&icu_locale_value) - .map_err(|_| TemporalError::range().with_message("unknown calendar"))?; - let calendar_kind = match AnyCalendarKind::try_from(algorithm) { - Ok(c) => c, - // Handle `islamic` calendar idenitifier. - // - // This should be updated depending on `icu_calendar` support and - // intl-era-monthcode. - Err(()) if algorithm == CalendarAlgorithm::Hijri(None) => { - AnyCalendarKind::HijriTabularTypeIIFriday - } - Err(()) => return Err(TemporalError::range().with_message("unknown calendar")), - }; - Ok(calendar_kind) - } -} - -impl FromStr for Calendar { - type Err = TemporalError; - - // 13.34 ParseTemporalCalendarString ( string ) - fn from_str(s: &str) -> Result { - match parse_allowed_calendar_formats(s.as_bytes()) { - Some([]) => Ok(Calendar::ISO), - Some(result) => Calendar::try_from_utf8(result), - None => Calendar::try_from_utf8(s.as_bytes()), - } - } -} - -impl From for IcuOverflow { - fn from(other: Overflow) -> Self { - match other { - Overflow::Reject => Self::Reject, - Overflow::Constrain => Self::Constrain, - } - } -} - -impl TryFrom for IcuUnit { - type Error = TemporalError; - fn try_from(other: Unit) -> TemporalResult { - Ok(match other { - Unit::Day => IcuUnit::Days, - Unit::Week => IcuUnit::Weeks, - Unit::Month => IcuUnit::Months, - Unit::Year => IcuUnit::Years, - _ => { - return Err(TemporalError::r#type() - .with_message("Found time unit when computing CalendarDateUntil.")) - } - }) - } -} - -impl<'a> TryFrom<&'a CalendarFields> for DateFields<'a> { - type Error = TemporalError; - fn try_from(other: &'a CalendarFields) -> TemporalResult { - let mut this = DateFields::default(); - this.era = other.era.as_ref().map(|o| o.as_bytes()); - this.era_year = other.era_year; - this.extended_year = other.year; - this.month_code = other.month_code.as_ref().map(|o| o.0.as_bytes()); - this.ordinal_month = other.month; - this.day = other.day; - Ok(this) - } -} - -/// See -/// -/// We don't want to trigger any pathological or panicky testcases in ICU4X. -/// -/// To aid in that, we early constrain date durations to things that have no hope of producing a datetime -/// that is within Temporal range. -fn early_constrain_date_duration(duration: &IcuDateDuration) -> Result<(), TemporalError> { - // Temporal range is -271821-04-20 to +275760-09-13 - // This is (roughly) the maximum year duration that can exist for ISO - const TEMPORAL_MAX_ISO_YEAR_DURATION: u32 = 275760 + 271821; - // Double it. No calendar has years that are half the size of ISO years. - const YEAR_DURATION: u32 = 2 * TEMPORAL_MAX_ISO_YEAR_DURATION; - // Assume every year is a leap year, calculate a month range - const MONTH_DURATION: u32 = YEAR_DURATION * 13; - // Our longest year is 390 days - const DAY_DURATION: u32 = YEAR_DURATION * 390; - const WEEK_DURATION: u32 = DAY_DURATION / 7; - - let err = Err(TemporalError::range().with_enum(ErrorMessage::IntermediateDateTimeOutOfRange)); - - if duration.years > YEAR_DURATION { - return err; - } - if duration.months > MONTH_DURATION { - return err; - } - if duration.weeks > WEEK_DURATION { - return err; - } - if duration.days > DAY_DURATION { - return err; - } - - Ok(()) -} - -// ==== Public `CalendarSlot` methods ==== - -impl Calendar { - /// Returns whether the current calendar is `ISO` - #[inline] - pub fn is_iso(&self) -> bool { - matches!(self.0 .0, AnyCalendar::Iso(_)) - } - - /// Returns the kind of this calendar - #[inline] - pub fn kind(&self) -> AnyCalendarKind { - self.0 .0.kind() - } - - /// `CalendarDateFromFields` - pub fn date_from_fields( - &self, - fields: CalendarFields, - overflow: Overflow, - ) -> TemporalResult { - if self.is_iso() { - let resolved_fields = - ResolvedIsoFields::try_from_fields(&fields, overflow, ResolutionType::Date)?; - - // Resolve month and monthCode; - return PlainDate::new_with_overflow( - resolved_fields.arithmetic_year, - resolved_fields.month, - resolved_fields.day, - self.clone(), - overflow, - ); - } - - let fields = DateFields::try_from(&fields)?; - let mut options = DateFromFieldsOptions::default(); - options.overflow = Some(overflow.into()); - options.missing_fields_strategy = Some(MissingFieldsStrategy::Reject); - - let calendar_date = self.0.from_fields(fields, options)?; - let iso = self.0.to_iso(&calendar_date); - PlainDate::new_with_overflow( - Iso.extended_year(&iso), - Iso.month(&iso).ordinal, - Iso.day_of_month(&iso).0, - self.clone(), - overflow, - ) - } - - /// `CalendarPlainMonthDayFromFields` - pub fn month_day_from_fields( - &self, - mut fields: CalendarFields, - overflow: Overflow, - ) -> TemporalResult { - // You are allowed to specify year information, however - // it is *only* used for resolving the given month/day data. - // - // For example, constructing a PlainMonthDay for {year: 2025, month: 2, day: 29} - // with overflow: constrain will produce 02-28 since it will constrain - // the date to 2025-02-28 first, and only *then* will it construct an MD. - if fields.year.is_some() || (fields.era.is_some() && fields.era_year.is_some()) { - // The ISO case is specified in - // It does not perform any range checks, arbitrarily large year values can be used. - if self.is_iso() { - let resolved = ResolvedIsoFields::try_from_fields( - &fields, - overflow, - ResolutionType::MonthDayWithYear, - )?; - fields = CalendarFields { - year: Some(1972), - month: Some(resolved.month), - day: Some(resolved.day), - ..Default::default() - }; - } else { - // The non-ISO case is specified in - // - let date_fields = DateFields::try_from(&fields)?; - { - // This algorithm requires an early-check to ensure the year is *somewhat* valid: - // > b. If there exists no combination of inputs such that ! CalendarIntegersToISO(calendar, fields.[[Year]], ..., ...) would - // return an ISO Date Record isoDate for which ISODateWithinLimits(isoDate) is true, throw a RangeError exception. - - // We do this by using constrain with minimal and maximal month-day values to try and - // see if either is in the ISO year range. - // - // This is complicated, it would be nice to not have to do this: - let mut options = DateFromFieldsOptions::default(); - options.overflow = Some(IcuOverflow::Constrain); - options.missing_fields_strategy = Some(MissingFieldsStrategy::Reject); - - let mut fields_min = fields.clone(); - let mut fields_max = fields.clone(); - fields_min.month = Some(1); - fields_max.month = Some(15); - fields_min.month_code = None; - fields_max.month_code = None; - fields_min.day = Some(1); - fields_max.day = Some(40); - let fields_min = DateFields::try_from(&fields_min)?; - let fields_max = DateFields::try_from(&fields_max)?; - let date_min = self.0.from_fields(fields_min, options)?; - let date_max = self.0.from_fields(fields_max, options)?; - let iso_min = IsoDate::from_icu4x(self.0.to_iso(&date_min)); - let iso_max = IsoDate::from_icu4x(self.0.to_iso(&date_max)); - - // If *both* are an error, then no date in this year maps to the ISO year range. - if iso_min.check_within_limits().is_err() - && iso_max.check_within_limits().is_err() - { - return Err(TemporalError::range().with_enum(ErrorMessage::DateOutOfRange)); - } - } - let mut options = DateFromFieldsOptions::default(); - options.overflow = Some(overflow.into()); - options.missing_fields_strategy = Some(MissingFieldsStrategy::Reject); - let calendar_date = self.0.from_fields(date_fields, options)?; - - fields = CalendarFields { - month_code: Some(MonthCode(self.0.month(&calendar_date).to_input().code().0)), - day: Some(self.0.day_of_month(&calendar_date).0), - ..Default::default() - }; - } - } - if self.is_iso() { - let resolved_fields = - ResolvedIsoFields::try_from_fields(&fields, overflow, ResolutionType::MonthDay)?; - return PlainMonthDay::new_with_overflow( - resolved_fields.month, - resolved_fields.day, - self.clone(), - overflow, - None, - ); - } - - let fields = DateFields::try_from(&fields)?; - let mut options = DateFromFieldsOptions::default(); - options.overflow = Some(overflow.into()); - if fields.day.is_none() { - // Otherwise we're liable to hit the YearMonth resolution - return Err(TemporalError::r#type().with_message("Must specify day for MonthDay")); - } - options.missing_fields_strategy = Some(MissingFieldsStrategy::Ecma); - - let mut calendar_date = self.0.from_fields(fields, options)?; - - // The MonthDay algorithm wants us to resolve a date *with* the provided year, - // if one was provided, but then use a reference year afterwards. - // So if a year was provided, we reresolve. - if fields.era_year.is_some() || fields.extended_year.is_some() { - let mut fields2 = DateFields::default(); - fields2.day = Some(self.0.day_of_month(&calendar_date).0); - let code = self.0.month(&calendar_date).to_input().code(); - fields2.month_code = Some(code.0.as_bytes()); - - calendar_date = self.0.from_fields(fields2, options)?; - } - - let iso = self.0.to_iso(&calendar_date); - PlainMonthDay::new_with_overflow( - Iso.month(&iso).ordinal, - Iso.day_of_month(&iso).0, - self.clone(), - overflow, - Some(Iso.extended_year(&iso)), - ) - } - - /// `CalendarPlainYearMonthFromFields` - pub fn year_month_from_fields( - &self, - fields: YearMonthCalendarFields, - overflow: Overflow, - ) -> TemporalResult { - if self.is_iso() { - // TODO: add a from_partial_year_month method on ResolvedCalendarFields - let resolved_fields = ResolvedIsoFields::try_from_fields( - &CalendarFields::from(fields), - overflow, - ResolutionType::YearMonth, - )?; - return PlainYearMonth::new_with_overflow( - resolved_fields.arithmetic_year, - resolved_fields.month, - Some(resolved_fields.day), - self.clone(), - overflow, - ); - } - - let fields = CalendarFields::from(fields); - let fields = DateFields::try_from(&fields)?; - let mut options = DateFromFieldsOptions::default(); - options.overflow = Some(overflow.into()); - if fields.extended_year.is_none() && fields.era_year.is_none() { - // Otherwise we're liable to hit the MonthDay resolution - return Err(TemporalError::r#type().with_message("Must specify year for YearMonth")); - } - options.missing_fields_strategy = Some(MissingFieldsStrategy::Ecma); - let calendar_date = self.0.from_fields(fields, options)?; - let iso = self.0.to_iso(&calendar_date); - PlainYearMonth::new_with_overflow( - Iso.year_info(&iso).year, - Iso.month(&iso).ordinal, - Some(Iso.day_of_month(&iso).0), - self.clone(), - overflow, - ) - } - - /// `CalendarDateAdd` - pub fn date_add( - &self, - date: &IsoDate, - duration: &DateDuration, - overflow: Overflow, - ) -> TemporalResult { - // 1. If calendar is "iso8601", then - if self.is_iso() { - let result = date.add_date_duration(duration, overflow)?; - // 11. Return ? CreateTemporalDate(result.[[Year]], result.[[Month]], result.[[Day]], "iso8601"). - return PlainDate::try_new(result.year, result.month, result.day, self.clone()); - } - - // This should be a valid duration at this point so we can just call .abs() - let invalid = TemporalError::range().with_enum(ErrorMessage::DurationNotValid); - let duration = IcuDateDuration { - is_negative: duration.years < 0 - || duration.months < 0 - || duration.weeks < 0 - || duration.days < 0, - years: u32::try_from(duration.years.abs()).map_err(|_| invalid)?, - months: u32::try_from(duration.months.abs()).map_err(|_| invalid)?, - weeks: u32::try_from(duration.weeks.abs()).map_err(|_| invalid)?, - days: u32::try_from(duration.days.abs()).map_err(|_| invalid)?, - }; - - early_constrain_date_duration(&duration)?; - let mut options = DateAddOptions::default(); - options.overflow = Some(overflow.into()); - let calendar_date = self.0.from_rata_die(date.to_rd()); - - let added = self.0.add(&calendar_date, duration, options)?; - - let iso = self.0.to_iso(&added); - PlainDate::new_with_overflow( - Iso.extended_year(&iso), - Iso.month(&iso).ordinal, - Iso.day_of_month(&iso).0, - self.clone(), - overflow, - ) - } - - /// `CalendarDateUntil` - pub fn date_until( - &self, - one: &IsoDate, - two: &IsoDate, - largest_unit: Unit, - ) -> TemporalResult { - if self.is_iso() { - let date_duration = one.diff_iso_date(two, largest_unit)?; - return Ok(Duration::from(date_duration)); - } - let mut options = DateDifferenceOptions::default(); - options.largest_unit = Some(largest_unit.try_into()?); - let calendar_date1 = self.0.from_rata_die(one.to_rd()); - let calendar_date2 = self.0.from_rata_die(two.to_rd()); - - let added = self.0.until(&calendar_date1, &calendar_date2, options); - - let days = added.days.into(); - let mut duration = DateDuration::new( - added.years.into(), - added.months.into(), - added.weeks.into(), - days, - )?; - - if added.is_negative { - duration = duration.negated(); - } - Ok(Duration::from(duration)) - } - - /// `CalendarEra` - pub fn era(&self, iso_date: &IsoDate) -> Option> { - if self.is_iso() { - return None; - } - let calendar_date = self.0.from_rata_die(iso_date.to_rd()); - self.0 - .year_info(&calendar_date) - .era() - .map(|era_info| era_info.era) - } - - /// `CalendarEraYear` - pub fn era_year(&self, iso_date: &IsoDate) -> Option { - if self.is_iso() { - return None; - } - let calendar_date = self.0.from_rata_die(iso_date.to_rd()); - self.0 - .year_info(&calendar_date) - .era() - .map(|era_info| era_info.year) - } - - /// `CalendarArithmeticYear` - pub fn year(&self, iso_date: &IsoDate) -> i32 { - if self.is_iso() { - return iso_date.year; - } - let calendar_date = self.0.from_rata_die(iso_date.to_rd()); - self.0.extended_year(&calendar_date) - } - - /// `CalendarMonth` - pub fn month(&self, iso_date: &IsoDate) -> u8 { - if self.is_iso() { - return iso_date.month; - } - let calendar_date = self.0.from_rata_die(iso_date.to_rd()); - self.0.month(&calendar_date).ordinal - } - - /// `CalendarMonthCode` - pub fn month_code(&self, iso_date: &IsoDate) -> MonthCode { - let calendar_date = self.0.from_rata_die(iso_date.to_rd()); - MonthCode(self.0.month(&calendar_date).to_input().code().0) - } - - /// `CalendarDay` - pub fn day(&self, iso_date: &IsoDate) -> u8 { - if self.is_iso() { - return iso_date.day; - } - let calendar_date = self.0.from_rata_die(iso_date.to_rd()); - self.0.day_of_month(&calendar_date).0 - } - - /// `CalendarDayOfWeek` - pub fn day_of_week(&self, iso_date: &IsoDate) -> u16 { - iso_date.to_icu4x_iso().weekday() as u16 - } - - /// `CalendarDayOfYear` - pub fn day_of_year(&self, iso_date: &IsoDate) -> u16 { - let calendar_date = self.0.from_rata_die(iso_date.to_rd()); - self.0.day_of_year(&calendar_date).0 - } - - /// `CalendarWeekOfYear` - pub fn week_of_year(&self, iso_date: &IsoDate) -> Option { - if self.is_iso() { - return Some(iso_date.to_icu4x_iso().week_of_year().week_number); - } - // TODO: Research in ICU4X and determine best approach. - None - } - - /// `CalendarYearOfWeek` - pub fn year_of_week(&self, iso_date: &IsoDate) -> Option { - if self.is_iso() { - return Some(iso_date.to_icu4x_iso().week_of_year().iso_year); - } - // TODO: Research in ICU4X and determine best approach. - None - } - - /// `CalendarDaysInWeek` - pub fn days_in_week(&self, _iso_date: &IsoDate) -> u16 { - 7 - } - - /// `CalendarDaysInMonth` - pub fn days_in_month(&self, iso_date: &IsoDate) -> u16 { - let calendar_date = self.0.from_rata_die(iso_date.to_rd()); - self.0.days_in_month(&calendar_date) as u16 - } - - /// `CalendarDaysInYear` - pub fn days_in_year(&self, iso_date: &IsoDate) -> u16 { - let calendar_date = self.0.from_rata_die(iso_date.to_rd()); - self.0.days_in_year(&calendar_date) - } - - /// `CalendarMonthsInYear` - pub fn months_in_year(&self, iso_date: &IsoDate) -> u16 { - if self.is_iso() { - return 12; - } - let calendar_date = self.0.from_rata_die(iso_date.to_rd()); - self.0.months_in_year(&calendar_date) as u16 - } - - /// `CalendarInLeapYear` - pub fn in_leap_year(&self, iso_date: &IsoDate) -> bool { - let calendar_date = self.0.from_rata_die(iso_date.to_rd()); - self.0.is_in_leap_year(&calendar_date) - } - - /// Returns the identifier of this calendar slot. - pub fn identifier(&self) -> &'static str { - // icu_calendar lists iso8601 and julian as None - match self.0.calendar_algorithm() { - Some(c) => c.as_str(), - None if self.is_iso() => "iso8601", - None => "julian", - } - } -} - -impl Calendar { - pub(crate) fn calendar_has_eras(kind: AnyCalendarKind) -> bool { - match kind { - AnyCalendarKind::Buddhist - | AnyCalendarKind::Coptic - | AnyCalendarKind::Ethiopian - | AnyCalendarKind::EthiopianAmeteAlem - | AnyCalendarKind::Gregorian - | AnyCalendarKind::Hebrew - | AnyCalendarKind::Indian - | AnyCalendarKind::HijriSimulatedMecca - | AnyCalendarKind::HijriTabularTypeIIFriday - | AnyCalendarKind::HijriTabularTypeIIThursday - | AnyCalendarKind::HijriUmmAlQura - | AnyCalendarKind::Japanese - | AnyCalendarKind::Persian - | AnyCalendarKind::Roc => true, - AnyCalendarKind::Chinese | AnyCalendarKind::Dangi | AnyCalendarKind::Iso => false, - _ => false, - } - } -} - -impl From for Calendar { - fn from(value: PlainDate) -> Self { - value.calendar().clone() - } -} - -impl From for Calendar { - fn from(value: PlainDateTime) -> Self { - value.calendar().clone() - } -} - -impl From for Calendar { - fn from(value: ZonedDateTime) -> Self { - value.calendar().clone() - } -} - -impl From for Calendar { - fn from(value: PlainMonthDay) -> Self { - value.calendar().clone() - } -} - -impl From for Calendar { - fn from(value: PlainYearMonth) -> Self { - value.calendar().clone() - } -} - -#[cfg(test)] -mod tests { - use crate::{iso::IsoDate, options::Unit}; - use core::str::FromStr; - - use super::Calendar; - - #[test] - fn calendar_from_str_is_case_insensitive() { - let cal_str = "iSo8601"; - let calendar = Calendar::try_from_utf8(cal_str.as_bytes()).unwrap(); - assert_eq!(calendar, Calendar::default()); - - let cal_str = "iSO8601"; - let calendar = Calendar::try_from_utf8(cal_str.as_bytes()).unwrap(); - assert_eq!(calendar, Calendar::default()); - } - - #[test] - fn calendar_invalid_ascii_value() { - let cal_str = "İSO8601"; - let _err = Calendar::from_str(cal_str).unwrap_err(); - - let cal_str = "\u{0130}SO8601"; - let _err = Calendar::from_str(cal_str).unwrap_err(); - - // Verify that an empty calendar is an error. - let cal_str = "2025-02-07T01:24:00-06:00[u-ca=]"; - let _err = Calendar::from_str(cal_str).unwrap_err(); - } - - #[test] - fn date_until_largest_year() { - // tests format: (Date one, PlainDate two, Duration result) - let tests = [ - ((2021, 7, 16), (2021, 7, 16), (0, 0, 0, 0, 0, 0, 0, 0, 0, 0)), - ((2021, 7, 16), (2021, 7, 17), (0, 0, 0, 1, 0, 0, 0, 0, 0, 0)), - ((2021, 7, 16), (2021, 7, 23), (0, 0, 0, 7, 0, 0, 0, 0, 0, 0)), - ((2021, 7, 16), (2021, 8, 16), (0, 1, 0, 0, 0, 0, 0, 0, 0, 0)), - ( - (2020, 12, 16), - (2021, 1, 16), - (0, 1, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ((2021, 1, 5), (2021, 2, 5), (0, 1, 0, 0, 0, 0, 0, 0, 0, 0)), - ((2021, 1, 7), (2021, 3, 7), (0, 2, 0, 0, 0, 0, 0, 0, 0, 0)), - ((2021, 7, 16), (2021, 8, 17), (0, 1, 0, 1, 0, 0, 0, 0, 0, 0)), - ( - (2021, 7, 16), - (2021, 8, 13), - (0, 0, 0, 28, 0, 0, 0, 0, 0, 0), - ), - ((2021, 7, 16), (2021, 9, 16), (0, 2, 0, 0, 0, 0, 0, 0, 0, 0)), - ((2021, 7, 16), (2022, 7, 16), (1, 0, 0, 0, 0, 0, 0, 0, 0, 0)), - ( - (2021, 7, 16), - (2031, 7, 16), - (10, 0, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ((2021, 7, 16), (2022, 7, 19), (1, 0, 0, 3, 0, 0, 0, 0, 0, 0)), - ((2021, 7, 16), (2022, 9, 19), (1, 2, 0, 3, 0, 0, 0, 0, 0, 0)), - ( - (2021, 7, 16), - (2031, 12, 16), - (10, 5, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ( - (1997, 12, 16), - (2021, 7, 16), - (23, 7, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ( - (1997, 7, 16), - (2021, 7, 16), - (24, 0, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ( - (1997, 7, 16), - (2021, 7, 15), - (23, 11, 0, 29, 0, 0, 0, 0, 0, 0), - ), - ( - (1997, 6, 16), - (2021, 6, 15), - (23, 11, 0, 30, 0, 0, 0, 0, 0, 0), - ), - ( - (1960, 2, 16), - (2020, 3, 16), - (60, 1, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ( - (1960, 2, 16), - (2021, 3, 15), - (61, 0, 0, 27, 0, 0, 0, 0, 0, 0), - ), - ( - (1960, 2, 16), - (2020, 3, 15), - (60, 0, 0, 28, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 3, 30), - (2021, 7, 16), - (0, 3, 0, 16, 0, 0, 0, 0, 0, 0), - ), - ( - (2020, 3, 30), - (2021, 7, 16), - (1, 3, 0, 16, 0, 0, 0, 0, 0, 0), - ), - ( - (1960, 3, 30), - (2021, 7, 16), - (61, 3, 0, 16, 0, 0, 0, 0, 0, 0), - ), - ( - (2019, 12, 30), - (2021, 7, 16), - (1, 6, 0, 16, 0, 0, 0, 0, 0, 0), - ), - ( - (2020, 12, 30), - (2021, 7, 16), - (0, 6, 0, 16, 0, 0, 0, 0, 0, 0), - ), - ( - (1997, 12, 30), - (2021, 7, 16), - (23, 6, 0, 16, 0, 0, 0, 0, 0, 0), - ), - ( - (1, 12, 25), - (2021, 7, 16), - (2019, 6, 0, 21, 0, 0, 0, 0, 0, 0), - ), - ((2019, 12, 30), (2021, 3, 5), (1, 2, 0, 5, 0, 0, 0, 0, 0, 0)), - ( - (2021, 7, 17), - (2021, 7, 16), - (0, 0, 0, -1, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 7, 23), - (2021, 7, 16), - (0, 0, 0, -7, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 8, 16), - (2021, 7, 16), - (0, -1, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 1, 16), - (2020, 12, 16), - (0, -1, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ((2021, 2, 5), (2021, 1, 5), (0, -1, 0, 0, 0, 0, 0, 0, 0, 0)), - ((2021, 3, 7), (2021, 1, 7), (0, -2, 0, 0, 0, 0, 0, 0, 0, 0)), - ( - (2021, 8, 17), - (2021, 7, 16), - (0, -1, 0, -1, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 8, 13), - (2021, 7, 16), - (0, 0, 0, -28, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 9, 16), - (2021, 7, 16), - (0, -2, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ( - (2022, 7, 16), - (2021, 7, 16), - (-1, 0, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ( - (2031, 7, 16), - (2021, 7, 16), - (-10, 0, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ( - (2022, 7, 19), - (2021, 7, 16), - (-1, 0, 0, -3, 0, 0, 0, 0, 0, 0), - ), - ( - (2022, 9, 19), - (2021, 7, 16), - (-1, -2, 0, -3, 0, 0, 0, 0, 0, 0), - ), - ( - (2031, 12, 16), - (2021, 7, 16), - (-10, -5, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 7, 16), - (1997, 12, 16), - (-23, -7, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 7, 16), - (1997, 7, 16), - (-24, 0, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 7, 15), - (1997, 7, 16), - (-23, -11, 0, -30, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 6, 15), - (1997, 6, 16), - (-23, -11, 0, -29, 0, 0, 0, 0, 0, 0), - ), - ( - (2020, 3, 16), - (1960, 2, 16), - (-60, -1, 0, 0, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 3, 15), - (1960, 2, 16), - (-61, 0, 0, -28, 0, 0, 0, 0, 0, 0), - ), - ( - (2020, 3, 15), - (1960, 2, 16), - (-60, 0, 0, -28, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 7, 16), - (2021, 3, 30), - (0, -3, 0, -17, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 7, 16), - (2020, 3, 30), - (-1, -3, 0, -17, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 7, 16), - (1960, 3, 30), - (-61, -3, 0, -17, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 7, 16), - (2019, 12, 30), - (-1, -6, 0, -17, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 7, 16), - (2020, 12, 30), - (0, -6, 0, -17, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 7, 16), - (1997, 12, 30), - (-23, -6, 0, -17, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 7, 16), - (1, 12, 25), - (-2019, -6, 0, -22, 0, 0, 0, 0, 0, 0), - ), - ( - (2021, 3, 5), - (2019, 12, 30), - (-1, -2, 0, -6, 0, 0, 0, 0, 0, 0), - ), - ]; - - let calendar = Calendar::default(); - - for test in tests { - let first = IsoDate::new_unchecked(test.0 .0, test.0 .1, test.0 .2); - let second = IsoDate::new_unchecked(test.1 .0, test.1 .1, test.1 .2); - let result = calendar.date_until(&first, &second, Unit::Year).unwrap(); - assert_eq!( - result.years() as i32, - test.2 .0, - "year failed for test \"{test:?}\"" - ); - assert_eq!( - result.months() as i32, - test.2 .1, - "months failed for test \"{test:?}\"" - ); - assert_eq!( - result.weeks() as i32, - test.2 .2, - "weeks failed for test \"{test:?}\"" - ); - assert_eq!( - result.days(), - test.2 .3, - "days failed for test \"{test:?}\"" - ); - } - } -} diff --git a/src/builtins/core/duration.rs b/src/builtins/core/duration.rs deleted file mode 100644 index e613f4976..000000000 --- a/src/builtins/core/duration.rs +++ /dev/null @@ -1,1609 +0,0 @@ -//! This module implements `Duration` along with it's methods and components. - -use crate::{ - builtins::core::{PlainDateTime, PlainTime}, - error::ErrorMessage, - iso::{IsoDateTime, IsoTime}, - options::{ - Overflow, RelativeTo, ResolvedRoundingOptions, RoundingIncrement, RoundingOptions, - ToStringRoundingOptions, Unit, UnitGroup, - }, - parsers::{FormattableDateDuration, FormattableDuration, FormattableTimeDuration, Precision}, - primitive::FiniteF64, - provider::TimeZoneProvider, - temporal_assert, Sign, TemporalError, TemporalResult, NS_PER_DAY, -}; -use alloc::string::String; -use core::{cmp::Ordering, str::FromStr}; -use ixdtf::{ - encoding::Utf8, parsers::IsoDurationParser, records::Fraction, records::TimeDurationRecord, -}; -use normalized::InternalDurationRecord; -use num_traits::Euclid; - -use self::normalized::TimeDuration; - -mod date; -pub(crate) mod normalized; - -#[cfg(test)] -mod tests; - -#[doc(inline)] -pub use date::DateDuration; - -/// A `PartialDuration` is a Duration that may have fields not set. -#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)] -pub struct PartialDuration { - /// A potentially existent `years` field. - pub years: Option, - /// A potentially existent `months` field. - pub months: Option, - /// A potentially existent `weeks` field. - pub weeks: Option, - /// A potentially existent `days` field. - pub days: Option, - /// A potentially existent `hours` field. - pub hours: Option, - /// A potentially existent `minutes` field. - pub minutes: Option, - /// A potentially existent `seconds` field. - pub seconds: Option, - /// A potentially existent `milliseconds` field. - pub milliseconds: Option, - /// A potentially existent `microseconds` field. - pub microseconds: Option, - /// A potentially existent `nanoseconds` field. - pub nanoseconds: Option, -} - -impl Default for PartialDuration { - fn default() -> Self { - Self::empty() - } -} - -impl PartialDuration { - pub const fn empty() -> Self { - Self { - years: None, - months: None, - weeks: None, - days: None, - hours: None, - minutes: None, - seconds: None, - milliseconds: None, - microseconds: None, - nanoseconds: None, - } - } - - pub const fn with_years(mut self, years: i64) -> Self { - self.years = Some(years); - self - } - - pub const fn with_months(mut self, months: i64) -> Self { - self.months = Some(months); - self - } - - pub const fn with_weeks(mut self, weeks: i64) -> Self { - self.weeks = Some(weeks); - self - } - - pub const fn with_days(mut self, days: i64) -> Self { - self.days = Some(days); - self - } - - pub const fn with_hours(mut self, hours: i64) -> Self { - self.hours = Some(hours); - self - } - - pub const fn with_minutes(mut self, minutes: i64) -> Self { - self.minutes = Some(minutes); - self - } - - pub const fn with_seconds(mut self, seconds: i64) -> Self { - self.seconds = Some(seconds); - self - } - - pub const fn with_milliseconds(mut self, milliseconds: i64) -> Self { - self.milliseconds = Some(milliseconds); - self - } - - pub const fn with_microseconds(mut self, microseconds: i128) -> Self { - self.microseconds = Some(microseconds); - self - } - - pub const fn with_nanoseconds(mut self, nanoseconds: i128) -> Self { - self.nanoseconds = Some(nanoseconds); - self - } -} - -impl PartialDuration { - /// Returns whether the `PartialDuration` is empty. - #[inline] - #[must_use] - pub fn is_empty(&self) -> bool { - self == &Self::default() - } -} - -/// The native Rust implementation of `Temporal.Duration`. -/// -/// Represents a span of time such as "2 hours and 30 minutes" or "3 years, 2 months". -/// Unlike `Instant` which represents a specific moment in time, Duration represents -/// the amount of time between two moments. -/// -/// A Duration consists of two categories of components: -/// - Date components: years, months, weeks, and days -/// - Time components: hours, minutes, seconds, and subsecond units (nanosecond precision) -/// -/// Note that date arithmetic can be complex. For example, adding "1 month" to January 31st -/// could result in February 28th (non-leap year), February 29th (leap year), or March 3rd -/// (if you overflow February), depending on the calendar system and overflow handling. -/// -/// ## Examples -/// -/// ### Creating durations -/// -/// ```rust -/// use temporal_rs::Duration; -/// -/// // Create a duration with specific components -/// let vacation_duration = Duration::new( -/// 0, 0, 2, 3, // 2 weeks and 3 days -/// 0, 0, 0, // no time components -/// 0, 0, 0 // no subsecond components -/// ).unwrap(); -/// -/// assert_eq!(vacation_duration.weeks(), 2); -/// assert_eq!(vacation_duration.days(), 3); -/// ``` -/// -/// ### Parsing ISO 8601 duration strings -/// -/// ```rust -/// use temporal_rs::Duration; -/// use core::str::FromStr; -/// -/// // Complex duration with multiple components -/// let complex = Duration::from_str("P1Y2M3DT4H5M6.789S").unwrap(); -/// assert_eq!(complex.years(), 1); -/// assert_eq!(complex.months(), 2); -/// assert_eq!(complex.days(), 3); -/// assert_eq!(complex.hours(), 4); -/// assert_eq!(complex.minutes(), 5); -/// assert_eq!(complex.seconds(), 6); -/// -/// // Time-only duration -/// let movie_length = Duration::from_str("PT2H30M").unwrap(); -/// assert_eq!(movie_length.hours(), 2); -/// assert_eq!(movie_length.minutes(), 30); -/// -/// // Negative durations -/// let negative = Duration::from_str("-P1D").unwrap(); -/// assert_eq!(negative.days(), -1); -/// ``` -/// -/// ### Duration arithmetic -/// -/// ```rust -/// use temporal_rs::Duration; -/// use core::str::FromStr; -/// -/// let commute_time = Duration::from_str("PT45M").unwrap(); -/// let lunch_break = Duration::from_str("PT1H").unwrap(); -/// -/// // Add durations together -/// let total_time = commute_time.add(&lunch_break).unwrap(); -/// assert_eq!(total_time.hours(), 1); // Results in 1 hour 45 minutes -/// assert_eq!(total_time.minutes(), 45); -/// -/// // Subtract duration components -/// let shortened = lunch_break.subtract(&Duration::from_str("PT15M").unwrap()).unwrap(); -/// assert_eq!(shortened.minutes(), 45); -/// ``` -/// -/// ### Date arithmetic with durations -/// -/// ```rust -/// use temporal_rs::{PlainDate, Duration, options::Overflow}; -/// use core::str::FromStr; -/// -/// // January 31st in different years -/// let jan_31_2023 = PlainDate::try_new_iso(2023, 1, 31).unwrap(); -/// let jan_31_2024 = PlainDate::try_new_iso(2024, 1, 31).unwrap(); // leap year -/// -/// let one_month = Duration::from_str("P1M").unwrap(); -/// -/// // Adding 1 month to Jan 31st gives different results: -/// let feb_2023 = jan_31_2023.add(&one_month, Some(Overflow::Constrain)).unwrap(); -/// let feb_2024 = jan_31_2024.add(&one_month, Some(Overflow::Constrain)).unwrap(); -/// -/// // 2023: Jan 31 + 1 month = Feb 28 (no Feb 31st exists) -/// assert_eq!(feb_2023.day(), 28); -/// // 2024: Jan 31 + 1 month = Feb 29 (leap year) -/// assert_eq!(feb_2024.day(), 29); -/// ``` -/// -/// ### Working with partial durations -/// -/// ```rust -/// use temporal_rs::{Duration, partial::PartialDuration}; -/// -/// let partial = PartialDuration { -/// hours: Some(3), -/// minutes: Some(45), -/// ..Default::default() -/// }; -/// -/// let duration = Duration::from_partial_duration(partial).unwrap(); -/// assert_eq!(duration.hours(), 3); -/// assert_eq!(duration.minutes(), 45); -/// assert_eq!(duration.days(), 0); // other fields default to 0 -/// ``` -/// -/// ### Duration properties -/// -/// ```rust -/// use temporal_rs::Duration; -/// use core::str::FromStr; -/// -/// let duration = Duration::from_str("P1Y2M3D").unwrap(); -/// -/// // Check if duration is zero -/// assert!(!duration.is_zero()); -/// -/// // Get the sign of the duration -/// let sign = duration.sign(); -/// // Note: This particular duration has mixed signs which affects the overall sign -/// -/// // Get absolute value -/// let abs_duration = duration.abs(); -/// assert_eq!(abs_duration.years(), 1); -/// assert_eq!(abs_duration.months(), 2); -/// assert_eq!(abs_duration.days(), 3); -/// -/// // Negate duration -/// let negated = duration.negated(); -/// assert_eq!(negated.years(), -1); -/// assert_eq!(negated.months(), -2); -/// assert_eq!(negated.days(), -3); -/// ``` -/// -/// ## Reference -/// -/// For more information, see the [MDN documentation][mdn-duration]. -/// -/// [mdn-duration]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Duration -#[non_exhaustive] -#[derive(Debug, Clone, Copy, PartialEq, PartialOrd)] -pub struct Duration { - pub(crate) sign: Sign, - pub(crate) years: u32, - pub(crate) months: u32, - pub(crate) weeks: u32, - pub(crate) days: u64, - pub(crate) hours: u64, - pub(crate) minutes: u64, - pub(crate) seconds: u64, - pub(crate) milliseconds: u64, - pub(crate) microseconds: u128, - pub(crate) nanoseconds: u128, -} - -impl Default for Duration { - fn default() -> Self { - Self { - sign: Sign::Zero, - years: 0, - months: 0, - weeks: 0, - days: 0, - hours: 0, - minutes: 0, - seconds: 0, - milliseconds: 0, - microseconds: 0, - nanoseconds: 0, - } - } -} - -impl core::fmt::Display for Duration { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - let string = self.as_temporal_string(ToStringRoundingOptions::default()); - - debug_assert!( - string.is_ok(), - "Duration must return a valid string with default options." - ); - f.write_str(&string.map_err(|_| Default::default())?) - } -} - -impl TryFrom for Duration { - type Error = TemporalError; - fn try_from(partial: PartialDuration) -> Result { - Duration::from_partial_duration(partial) - } -} - -// NOTE(nekevss): Structure of the below is going to be a little convoluted, -// but intended to section everything based on the below -// -// Notation - [section](sub-section(s)). -// -// Sections: -// - Creation (private/public) -// - Getters/Setters -// - Methods (private/public/feature) -// - -#[cfg(test)] -impl Duration { - pub(crate) fn from_hours(value: i64) -> Self { - Self { - sign: Sign::from(value.signum() as i8), - hours: value.saturating_abs() as u64, - ..Default::default() - } - } -} - -// ==== Private Creation methods ==== - -impl Duration { - /// Creates a new `Duration` from a `DateDuration` and `TimeDuration`. - #[allow(clippy::too_many_arguments)] - pub(crate) const fn new_unchecked( - sign: Sign, - years: u32, - months: u32, - weeks: u32, - days: u64, - hours: u64, - minutes: u64, - seconds: u64, - milliseconds: u64, - microseconds: u128, - nanoseconds: u128, - ) -> Self { - Self { - sign, - years, - months, - weeks, - days, - hours, - minutes, - seconds, - - // https://github.com/boa-dev/temporal/issues/613 - // With float64_representable_durations enabled, force all smaller units - // to be in the float64-representable range. - #[cfg(feature = "float64_representable_durations")] - milliseconds: milliseconds as f64 as u64, - #[cfg(feature = "float64_representable_durations")] - microseconds: microseconds as f64 as u128, - #[cfg(feature = "float64_representable_durations")] - nanoseconds: nanoseconds as f64 as u128, - #[cfg(not(feature = "float64_representable_durations"))] - milliseconds, - #[cfg(not(feature = "float64_representable_durations"))] - microseconds, - #[cfg(not(feature = "float64_representable_durations"))] - nanoseconds, - } - } - - #[inline] - pub(crate) fn from_internal( - duration_record: InternalDurationRecord, - largest_unit: Unit, - ) -> TemporalResult { - // 1. Let days, hours, minutes, seconds, milliseconds, and microseconds be 0. - let mut days = 0; - let mut hours = 0; - let mut minutes = 0; - let mut seconds = 0; - let mut milliseconds = 0; - let mut microseconds = 0; - - // 2. Let sign be TimeDurationSign(internalDuration.[[Time]]). - let sign = duration_record - .normalized_time_duration() - .sign() - .as_sign_multiplier(); - - // 3. Let nanoseconds be abs(internalDuration.[[Time]]). - let mut nanoseconds = duration_record.normalized_time_duration().0.abs(); - match largest_unit { - // 4. If largestUnit is "year", "month", "week", or "day", then - Unit::Year | Unit::Month | Unit::Week | Unit::Day => { - // a. Set microseconds to floor(nanoseconds / 1000). - // b. Set nanoseconds to nanoseconds modulo 1000. - (microseconds, nanoseconds) = nanoseconds.div_rem_euclid(&1_000); - - // c. Set milliseconds to floor(microseconds / 1000). - // d. Set microseconds to microseconds modulo 1000. - (milliseconds, microseconds) = microseconds.div_rem_euclid(&1_000); - - // e. Set seconds to floor(milliseconds / 1000). - // f. Set milliseconds to milliseconds modulo 1000. - (seconds, milliseconds) = milliseconds.div_rem_euclid(&1_000); - - // g. Set minutes to floor(seconds / 60). - // h. Set seconds to seconds modulo 60. - (minutes, seconds) = seconds.div_rem_euclid(&60); - - // i. Set hours to floor(minutes / 60). - // j. Set minutes to minutes modulo 60. - (hours, minutes) = minutes.div_rem_euclid(&60); - - // k. Set days to floor(hours / 24). - // l. Set hours to hours modulo 24. - (days, hours) = hours.div_rem_euclid(&24); - } - // 5. Else if largestUnit is "hour", then - Unit::Hour => { - // a. Set microseconds to floor(nanoseconds / 1000). - // b. Set nanoseconds to nanoseconds modulo 1000. - (microseconds, nanoseconds) = nanoseconds.div_rem_euclid(&1_000); - - // c. Set milliseconds to floor(microseconds / 1000). - // d. Set microseconds to microseconds modulo 1000. - (milliseconds, microseconds) = microseconds.div_rem_euclid(&1_000); - - // e. Set seconds to floor(milliseconds / 1000). - // f. Set milliseconds to milliseconds modulo 1000. - (seconds, milliseconds) = milliseconds.div_rem_euclid(&1_000); - - // g. Set minutes to floor(seconds / 60). - // h. Set seconds to seconds modulo 60. - (minutes, seconds) = seconds.div_rem_euclid(&60); - - // i. Set hours to floor(minutes / 60). - // j. Set minutes to minutes modulo 60. - (hours, minutes) = minutes.div_rem_euclid(&60); - } - // 6. Else if largestUnit is "minute", then - Unit::Minute => { - // a. Set microseconds to floor(nanoseconds / 1000). - // b. Set nanoseconds to nanoseconds modulo 1000. - (microseconds, nanoseconds) = nanoseconds.div_rem_euclid(&1_000); - - // c. Set milliseconds to floor(microseconds / 1000). - // d. Set microseconds to microseconds modulo 1000. - (milliseconds, microseconds) = microseconds.div_rem_euclid(&1_000); - - // e. Set seconds to floor(milliseconds / 1000). - // f. Set milliseconds to milliseconds modulo 1000. - (seconds, milliseconds) = milliseconds.div_rem_euclid(&1_000); - - // g. Set minutes to floor(seconds / 60). - // h. Set seconds to seconds modulo 60. - (minutes, seconds) = seconds.div_rem_euclid(&60); - } - // 7. Else if largestUnit is "second", then - Unit::Second => { - // a. Set microseconds to floor(nanoseconds / 1000). - // b. Set nanoseconds to nanoseconds modulo 1000. - (microseconds, nanoseconds) = nanoseconds.div_rem_euclid(&1_000); - - // c. Set milliseconds to floor(microseconds / 1000). - // d. Set microseconds to microseconds modulo 1000. - (milliseconds, microseconds) = microseconds.div_rem_euclid(&1_000); - - // e. Set seconds to floor(milliseconds / 1000). - // f. Set milliseconds to milliseconds modulo 1000. - (seconds, milliseconds) = milliseconds.div_rem_euclid(&1_000); - } - // 8. Else if largestUnit is "millisecond", then - Unit::Millisecond => { - // a. Set microseconds to floor(nanoseconds / 1000). - // b. Set nanoseconds to nanoseconds modulo 1000. - (microseconds, nanoseconds) = nanoseconds.div_rem_euclid(&1_000); - - // c. Set milliseconds to floor(microseconds / 1000). - // d. Set microseconds to microseconds modulo 1000. - (milliseconds, microseconds) = microseconds.div_rem_euclid(&1_000); - } - // 9. Else if largestUnit is "microsecond", then - Unit::Microsecond => { - // a. Set microseconds to floor(nanoseconds / 1000). - // b. Set nanoseconds to nanoseconds modulo 1000. - (microseconds, nanoseconds) = nanoseconds.div_rem_euclid(&1_000); - } - // 10. Else, - // a. Assert: largestUnit is "nanosecond". - _ => temporal_assert!(largest_unit == Unit::Nanosecond), - } - // 11. NOTE: When largestUnit is millisecond, microsecond, or nanosecond, milliseconds, microseconds, or - // nanoseconds may be an unsafe integer. In this case, care must be taken when implementing the calculation using - // floating point arithmetic. It can be implemented in C++ using std::fma(). String manipulation will also give an - // exact result, since the multiplication is by a power of 10. - // 12. Return ? CreateTemporalDuration(internalDuration.[[Date]].[[Years]], internalDuration.[[Date]].[[Months]], - // internalDuration.[[Date]].[[Weeks]], internalDuration.[[Date]].[[Days]] + days × sign, hours × sign, minutes × sign, - // seconds × sign, milliseconds × sign, microseconds × sign, nanoseconds × sign). - Duration::new( - duration_record.date().years, - duration_record.date().months, - duration_record.date().weeks, - duration_record.date().days + days as i64 * sign as i64, - hours as i64 * sign as i64, - minutes as i64 * sign as i64, - seconds as i64 * sign as i64, - milliseconds as i64 * sign as i64, - microseconds * sign as i128, - nanoseconds * sign as i128, - ) - } - - /// Returns this `Duration` as a `TimeDuration`. - #[inline] - pub(crate) fn to_normalized(self) -> TimeDuration { - TimeDuration::from_duration(&self) - } - - /// Returns the a `Vec` of the fields values. - #[inline] - #[must_use] - pub(crate) fn fields_signum(&self) -> [i64; 10] { - [ - self.years().signum(), - self.months().signum(), - self.weeks().signum(), - self.days().signum(), - self.hours().signum(), - self.minutes().signum(), - self.seconds().signum(), - self.milliseconds().signum(), - self.microseconds().signum() as i64, - self.nanoseconds().signum() as i64, - ] - } - - /// Returns the `Unit` corresponding to the largest non-zero field. - #[inline] - pub(crate) fn default_largest_unit(&self) -> Unit { - self.fields_signum() - .iter() - .enumerate() - .find(|x| x.1 != &0) - .map(|x| Unit::from(10 - x.0)) - .unwrap_or(Unit::Nanosecond) - } - - // 7.5.5 ToInternalDurationRecord ( duration ) - pub(crate) fn to_internal_duration_record(self) -> InternalDurationRecord { - // 1. Let dateDuration be ! CreateDateDurationRecord(duration.[[Years]], duration.[[Months]], duration.[[Weeks]], duration.[[Days]]). - let date_duration = - DateDuration::new_unchecked(self.years(), self.months(), self.weeks(), self.days()); - // 2. Let timeDuration be TimeDurationFromComponents(duration.[[Hours]], duration.[[Minutes]], duration.[[Seconds]], duration.[[Milliseconds]], duration.[[Microseconds]], duration.[[Nanoseconds]]). - let time_duration = TimeDuration::from_components( - self.hours(), - self.minutes(), - self.seconds(), - self.milliseconds(), - self.microseconds(), - self.nanoseconds(), - ); - // 3. Return CombineDateAndTimeDuration(dateDuration, timeDuration). - InternalDurationRecord::combine(date_duration, time_duration) - } - - /// Equivalent of [`7.5.7 ToDateDurationRecordWithoutTime ( duration )`][spec] - /// - /// [spec]: - /// - // spec(2025-06-23): https://github.com/tc39/proposal-temporal/tree/ed49b0b482981119c9b5e28b0686d877d4a9bae0 - #[allow(clippy::wrong_self_convention)] - pub(crate) fn to_date_duration_record_without_time(&self) -> TemporalResult { - // 1. Let internalDuration be ToInternalDurationRecordWith24HourDays(duration). - let internal_duration = InternalDurationRecord::from_duration_with_24_hour_days(self)?; - - // 2. Let days be truncate(internalDuration.[[Time]] / nsPerDay). - // 3. Return ! CreateDateDurationRecord(internalDuration.[[Date]].[[Years]], internalDuration.[[Date]].[[Months]], internalDuration.[[Date]].[[Weeks]], days). - internal_duration.to_date_duration_record_without_time() - } -} - -// ==== Public Duration API ==== - -impl Duration { - /// Creates a new validated `Duration`. - #[allow(clippy::too_many_arguments)] - pub fn new( - years: i64, - months: i64, - weeks: i64, - days: i64, - hours: i64, - minutes: i64, - seconds: i64, - milliseconds: i64, - microseconds: i128, - nanoseconds: i128, - ) -> TemporalResult { - if !is_valid_duration( - years, - months, - weeks, - days, - hours, - minutes, - seconds, - milliseconds, - microseconds, - nanoseconds, - ) { - return Err(TemporalError::range().with_enum(ErrorMessage::DurationNotValid)); - } - let sign = duration_sign(&[ - years, - months, - weeks, - days, - hours, - minutes, - seconds, - milliseconds, - microseconds.signum() as i64, - nanoseconds.signum() as i64, - ]); - Ok(Duration::new_unchecked( - sign, - years.saturating_abs() as u32, - months.saturating_abs() as u32, - weeks.saturating_abs() as u32, - days.unsigned_abs(), - hours.unsigned_abs(), - minutes.unsigned_abs(), - seconds.unsigned_abs(), - milliseconds.unsigned_abs(), - microseconds.unsigned_abs(), - nanoseconds.unsigned_abs(), - )) - } - - /// Creates a `Duration` from a provided `PartialDuration`. - /// - /// ## Examples - /// - /// ```rust - /// use temporal_rs::{partial::PartialDuration, Duration}; - /// - /// let duration = Duration::from_partial_duration(PartialDuration { - /// seconds: Some(4), - /// ..Default::default() - /// }).unwrap(); - /// - /// assert_eq!(duration.seconds(), 4); - /// assert_eq!(duration.to_string(), "PT4S"); - /// ``` - pub fn from_partial_duration(partial: PartialDuration) -> TemporalResult { - if partial == PartialDuration::default() { - return Err(TemporalError::r#type() - .with_message("PartialDuration cannot have all empty fields.")); - } - Self::new( - partial.years.unwrap_or_default(), - partial.months.unwrap_or_default(), - partial.weeks.unwrap_or_default(), - partial.days.unwrap_or_default(), - partial.hours.unwrap_or_default(), - partial.minutes.unwrap_or_default(), - partial.seconds.unwrap_or_default(), - partial.milliseconds.unwrap_or_default(), - partial.microseconds.unwrap_or_default(), - partial.nanoseconds.unwrap_or_default(), - ) - } - - // Converts a UTF-8 encoded string into a `Duration`. - pub fn from_utf8(s: &[u8]) -> TemporalResult { - let parse_record = IsoDurationParser::::from_utf8(s).parse()?; - - fn fraction_to_unadjusted_ns(fraction: Option) -> Result { - if let Some(fraction) = fraction { - fraction.to_nanoseconds().ok_or( - TemporalError::range() - .with_enum(ErrorMessage::FractionalTimeMoreThanNineDigits), - ) - } else { - Ok(0) - } - } - - let (hours, minutes, seconds, millis, micros, nanos) = match parse_record.time { - Some(TimeDurationRecord::Hours { hours, fraction }) => { - let unadjusted_fraction = fraction_to_unadjusted_ns(fraction)? as u64; - let fractional_hours_ns = unadjusted_fraction * 3600; - let minutes = fractional_hours_ns.div_euclid(60 * 1_000_000_000); - let fractional_minutes_ns = fractional_hours_ns.rem_euclid(60 * 1_000_000_000); - - let seconds = fractional_minutes_ns.div_euclid(1_000_000_000); - let fractional_seconds = fractional_minutes_ns.rem_euclid(1_000_000_000); - - let milliseconds = fractional_seconds.div_euclid(1_000_000); - let rem = fractional_seconds.rem_euclid(1_000_000); - - let microseconds = rem.div_euclid(1_000); - let nanoseconds = rem.rem_euclid(1_000); - - ( - hours, - minutes, - seconds, - milliseconds, - microseconds, - nanoseconds, - ) - } - // Minutes variant is defined as { hours: u32, minutes: u32, fraction: u64 } - Some(TimeDurationRecord::Minutes { - hours, - minutes, - fraction, - }) => { - let unadjusted_fraction = fraction_to_unadjusted_ns(fraction)? as u64; - let fractional_minutes_ns = unadjusted_fraction * 60; - let seconds = fractional_minutes_ns.div_euclid(1_000_000_000); - let fractional_seconds = fractional_minutes_ns.rem_euclid(1_000_000_000); - - let milliseconds = fractional_seconds.div_euclid(1_000_000); - let rem = fractional_seconds.rem_euclid(1_000_000); - - let microseconds = rem.div_euclid(1_000); - let nanoseconds = rem.rem_euclid(1_000); - - ( - hours, - minutes, - seconds, - milliseconds, - microseconds, - nanoseconds, - ) - } - // Seconds variant is defined as { hours: u32, minutes: u32, seconds: u32, fraction: u32 } - Some(TimeDurationRecord::Seconds { - hours, - minutes, - seconds, - fraction, - }) => { - let ns = fraction_to_unadjusted_ns(fraction)?; - let milliseconds = ns.div_euclid(1_000_000); - let rem = ns.rem_euclid(1_000_000); - - let microseconds = rem.div_euclid(1_000); - let nanoseconds = rem.rem_euclid(1_000); - - ( - hours, - minutes, - seconds, - milliseconds as u64, - microseconds as u64, - nanoseconds as u64, - ) - } - None => (0, 0, 0, 0, 0, 0), - }; - - let (years, months, weeks, days) = if let Some(date) = parse_record.date { - (date.years, date.months, date.weeks, date.days) - } else { - (0, 0, 0, 0) - }; - - let sign = parse_record.sign as i64; - - Self::new( - years as i64 * sign, - months as i64 * sign, - weeks as i64 * sign, - days as i64 * sign, - hours as i64 * sign, - minutes as i64 * sign, - seconds as i64 * sign, - millis as i64 * sign, - micros as i128 * sign as i128, - nanos as i128 * sign as i128, - ) - } - - /// Return if the Durations values are within their valid ranges. - #[inline] - #[must_use] - pub fn is_time_within_range(&self) -> bool { - self.hours < 24 - && self.minutes < 60 - && self.seconds < 60 - && self.milliseconds < 1000 - && self.microseconds < 1000 - && self.nanoseconds < 1000 - } - - #[inline] - pub fn compare_with_provider( - &self, - other: &Duration, - relative_to: Option, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - if self == other { - return Ok(Ordering::Equal); - } - // 8. Let largestUnit1 be DefaultTemporalLargestUnit(one). - // 9. Let largestUnit2 be DefaultTemporalLargestUnit(two). - let largest_unit_1 = self.default_largest_unit(); - let largest_unit_2 = other.default_largest_unit(); - // 10. Let duration1 be ToInternalDurationRecord(one). - let duration_one = self.to_internal_duration_record(); - // 11. Let duration2 be ToInternalDurationRecord(two). - let duration_two = other.to_internal_duration_record(); - // 12. If zonedRelativeTo is not undefined, and either UnitCategory(largestUnit1) or UnitCategory(largestUnit2) is date, then - if let Some(RelativeTo::ZonedDateTime(zdt)) = relative_to.as_ref() { - if largest_unit_1.is_date_unit() || largest_unit_2.is_date_unit() { - // a. Let timeZone be zonedRelativeTo.[[TimeZone]]. - // b. Let calendar be zonedRelativeTo.[[Calendar]]. - // c. Let after1 be ? AddZonedDateTime(zonedRelativeTo.[[EpochNanoseconds]], timeZone, calendar, duration1, constrain). - // d. Let after2 be ? AddZonedDateTime(zonedRelativeTo.[[EpochNanoseconds]], timeZone, calendar, duration2, constrain). - let after1 = - zdt.add_zoned_date_time(duration_one, Overflow::Constrain, provider)?; - let after2 = - zdt.add_zoned_date_time(duration_two, Overflow::Constrain, provider)?; - // e. If after1 > after2, return 1𝔽. - // f. If after1 < after2, return -1𝔽. - // g. Return +0𝔽. - return Ok(after1.cmp(&after2)); - } - } - // 13. If IsCalendarUnit(largestUnit1) is true or IsCalendarUnit(largestUnit2) is true, then - let (days1, days2) = - if largest_unit_1.is_calendar_unit() || largest_unit_2.is_calendar_unit() { - // a. If plainRelativeTo is undefined, throw a RangeError exception. - // b. Let days1 be ? DateDurationDays(duration1.[[Date]], plainRelativeTo). - // c. Let days2 be ? DateDurationDays(duration2.[[Date]], plainRelativeTo). - let Some(RelativeTo::PlainDate(pdt)) = relative_to.as_ref() else { - return Err(TemporalError::range()); - }; - let days1 = self.date().days(pdt)?; - let days2 = other.date().days(pdt)?; - (days1, days2) - } else { - (self.date().days, other.date().days) - }; - // 15. Let timeDuration1 be ? Add24HourDaysToTimeDuration(duration1.[[Time]], days1). - let time_duration_1 = self.to_normalized().add_days(days1)?; - // 16. Let timeDuration2 be ? Add24HourDaysToTimeDuration(duration2.[[Time]], days2). - let time_duration_2 = other.to_normalized().add_days(days2)?; - // 17. Return 𝔽(CompareTimeDuration(timeDuration1, timeDuration2)). - Ok(time_duration_1.cmp(&time_duration_2)) - } -} - -// ==== Public `Duration` Getters/Setters ==== - -impl Duration { - /// Returns a reference to the inner `DateDuration` - #[inline] - #[must_use] - pub fn date(&self) -> DateDuration { - DateDuration::from(self) - } - - /// Returns the `years` field of duration. - #[inline] - #[must_use] - pub const fn years(&self) -> i64 { - self.years as i64 * self.sign.as_sign_multiplier() as i64 - } - - /// Returns the `months` field of duration. - #[inline] - #[must_use] - pub const fn months(&self) -> i64 { - self.months as i64 * self.sign.as_sign_multiplier() as i64 - } - - /// Returns the `weeks` field of duration. - #[inline] - #[must_use] - pub const fn weeks(&self) -> i64 { - self.weeks as i64 * self.sign.as_sign_multiplier() as i64 - } - - /// Returns the `days` field of duration. - #[inline] - #[must_use] - pub const fn days(&self) -> i64 { - self.days as i64 * self.sign.as_sign_multiplier() as i64 - } - - /// Returns the `hours` field of duration. - #[inline] - #[must_use] - pub const fn hours(&self) -> i64 { - self.hours as i64 * self.sign.as_sign_multiplier() as i64 - } - - /// Returns the `hours` field of duration. - #[inline] - #[must_use] - pub const fn minutes(&self) -> i64 { - self.minutes as i64 * self.sign.as_sign_multiplier() as i64 - } - - /// Returns the `seconds` field of duration. - #[inline] - #[must_use] - pub const fn seconds(&self) -> i64 { - self.seconds as i64 * self.sign.as_sign_multiplier() as i64 - } - - /// Returns the `hours` field of duration. - #[inline] - #[must_use] - pub const fn milliseconds(&self) -> i64 { - self.milliseconds as i64 * self.sign.as_sign_multiplier() as i64 - } - - /// Returns the `microseconds` field of duration. - #[inline] - #[must_use] - pub const fn microseconds(&self) -> i128 { - self.microseconds as i128 * self.sign.as_sign_multiplier() as i128 - } - - /// Returns the `nanoseconds` field of duration. - #[inline] - #[must_use] - pub const fn nanoseconds(&self) -> i128 { - self.nanoseconds as i128 * self.sign.as_sign_multiplier() as i128 - } -} - -// ==== Public Duration methods ==== - -impl Duration { - /// Determines the sign for the current self. - #[inline] - #[must_use] - pub fn sign(&self) -> Sign { - self.sign - } - - /// Returns whether the current `Duration` is zero. - /// - /// Equivalant to `Temporal.Duration.blank()`. - #[inline] - #[must_use] - pub fn is_zero(&self) -> bool { - self.sign() == Sign::Zero - } - - /// Returns a negated `Duration` - #[inline] - #[must_use] - pub fn negated(&self) -> Self { - Self { - sign: self.sign.negate(), - ..*self - } - } - - /// Returns the absolute value of `Duration`. - #[inline] - #[must_use] - pub fn abs(&self) -> Self { - Self { - sign: if self.sign == Sign::Zero { - Sign::Zero - } else { - Sign::Positive - }, - ..*self - } - } - - /// Returns the result of adding a `Duration` to the current `Duration` - #[inline] - pub fn add(&self, other: &Self) -> TemporalResult { - // 1. Set other to ? ToTemporalDuration(other). - // 2. If operation is subtract, set other to CreateNegatedTemporalDuration(other). - // 3. Let largestUnit1 be DefaultTemporalLargestUnit(duration). - let largest_unit_one = self.default_largest_unit(); - // 4. Let largestUnit2 be DefaultTemporalLargestUnit(other). - let largest_unit_two = other.default_largest_unit(); - // 5. Let largestUnit be LargerOfTwoTemporalUnits(largestUnit1, largestUnit2). - let largest_unit = largest_unit_one.max(largest_unit_two); - // 6. If IsCalendarUnit(largestUnit) is true, throw a RangeError exception. - if largest_unit.is_calendar_unit() { - return Err(TemporalError::range().with_message( - "Largest unit cannot be a calendar unit when adding two durations.", - )); - } - - // 7. Let d1 be ToInternalDurationRecordWith24HourDays(duration). - let d1 = InternalDurationRecord::from_duration_with_24_hour_days(self)?; - // 8. Let d2 be ToInternalDurationRecordWith24HourDays(other). - let d2 = InternalDurationRecord::from_duration_with_24_hour_days(other)?; - // 9. Let timeResult be ? AddTimeDuration(d1.[[Time]], d2.[[Time]]). - let time_result = (d1.normalized_time_duration() + d2.normalized_time_duration())?; - // 10. Let result be CombineDateAndTimeDuration(ZeroDateDuration(), timeResult). - let result = InternalDurationRecord::combine(DateDuration::default(), time_result); - // 11. Return ? TemporalDurationFromInternal(result, largestUnit). - Duration::from_internal(result, largest_unit) - } - - /// Returns the result of subtracting a `Duration` from the current `Duration` - #[inline] - pub fn subtract(&self, other: &Self) -> TemporalResult { - self.add(&other.negated()) - } - - /// `17.3.20 Temporal.Duration.prototype.round ( roundTo )` - /// - /// Spec: - /// - // Spec last accessed: 2025-09-08, - #[inline] - pub fn round_with_provider( - &self, - options: RoundingOptions, - relative_to: Option, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - // NOTE(HalidOdat): Steps 1-12 are handled before calling the function. - // - // SKIP: 1. Let duration be the this value. - // SKIP: 2. Perform ? RequireInternalSlot(duration, [[InitializedTemporalDuration]]). - // SKIP: 3. If roundTo is undefined, then - // SKIP: a. Throw a TypeError exception. - // SKIP: 4. If roundTo is a String, then - // SKIP: a. Let paramString be roundTo. - // SKIP: b. Set roundTo to OrdinaryObjectCreate(null). - // SKIP: c. Perform ! CreateDataPropertyOrThrow(roundTo, "smallestUnit", paramString). - // SKIP: 5. Else, - // SKIP: a. Set roundTo to ? GetOptionsObject(roundTo). - // SKIP: 6. Let smallestUnitPresent be true. - // SKIP: 7. Let largestUnitPresent be true. - // SKIP: 8. NOTE: The following steps read options and perform independent validation in alphabetical order - // (GetTemporalRelativeToOption reads "relativeTo", - // GetRoundingIncrementOption reads "roundingIncrement" - // and GetRoundingModeOption reads "roundingMode"). - // SKIP: 9. Let largestUnit be ? GetTemporalUnitValuedOption(roundTo, "largestUnit", unset). - // SKIP: 10. Let relativeToRecord be ? GetTemporalRelativeToOption(roundTo). - // SKIP: 11. Let zonedRelativeTo be relativeToRecord.[[ZonedRelativeTo]]. - // SKIP: 12. Let plainRelativeTo be relativeToRecord.[[PlainRelativeTo]]. - - // 13. Let roundingIncrement be ? GetRoundingIncrementOption(roundTo). - let rounding_increment = options.increment.unwrap_or_default(); - - // 14. Let roundingMode be ? GetRoundingModeOption(roundTo, half-expand). - let rounding_mode = options.rounding_mode.unwrap_or_default(); - - // 15. Let smallestUnit be ? GetTemporalUnitValuedOption(roundTo, "smallestUnit", datetime, unset). - let smallest_unit = options.smallest_unit; - - // 16. Perform ?ValidateTemporalUnitValue(smallestUnit, datetime). - UnitGroup::DateTime.validate_unit(smallest_unit, None)?; - - // 17. If smallestUnit is unset, then - // a. Set smallestUnitPresent to false. - // b. Set smallestUnit to nanosecond. - let smallest_unit = smallest_unit.unwrap_or(Unit::Nanosecond); - - // 18. Let existingLargestUnit be DefaultTemporalLargestUnit(duration). - let existing_largest_unit = self.default_largest_unit(); - - // 19. Let defaultLargestUnit be LargerOfTwoTemporalUnits(existingLargestUnit, smallestUnit). - let default_largest_unit = Unit::larger(existing_largest_unit, smallest_unit)?; - - let largest_unit = match options.largest_unit { - // 20. If largestUnit is unset, then - // a. Set largestUnitPresent to false. - // b. Set largestUnit to defaultLargestUnit. - // 21. Else if largestUnit is auto, then - // a. Set largestUnit to defaultLargestUnit. - Some(Unit::Auto) | None => default_largest_unit, - Some(unit) => unit, - }; - - // 22. If smallestUnitPresent is false and largestUnitPresent is false, then - if options.largest_unit.is_none() && options.smallest_unit.is_none() { - // a. Throw a RangeError exception. - return Err(TemporalError::range() - .with_message("smallestUnit and largestUnit cannot both be None.")); - } - - // 23. If LargerOfTwoTemporalUnits(largestUnit, smallestUnit) is not largestUnit, throw a RangeError exception. - if Unit::larger(largest_unit, smallest_unit)? != largest_unit { - return Err( - TemporalError::range().with_message("smallestUnit is larger than largestUnit.") - ); - } - - // 24. Let maximum be MaximumTemporalDurationRoundingIncrement(smallestUnit). - let maximum = smallest_unit.to_maximum_rounding_increment(); - - // 25. If maximum is not unset, perform ? ValidateTemporalRoundingIncrement(roundingIncrement, maximum, false). - if let Some(maximum) = maximum { - rounding_increment.validate(maximum.into(), false)?; - } - - // 26. If roundingIncrement > 1, and largestUnit is not smallestUnit, and TemporalUnitCategory(smallestUnit) is date, throw a RangeError exception. - if rounding_increment > RoundingIncrement::ONE - && largest_unit != smallest_unit - && smallest_unit.is_date_unit() - { - return Err(TemporalError::range().with_message( - "roundingIncrement > 1 and largest_unit is not smallest_unit and smallest_unit is date", - )); - } - - let resolved_options = ResolvedRoundingOptions { - largest_unit, - smallest_unit, - increment: rounding_increment, - rounding_mode, - }; - - match relative_to { - // 27. If zonedRelativeTo is not undefined, then - Some(RelativeTo::ZonedDateTime(zoned_relative_to)) => { - // a. Let internalDuration be ToInternalDurationRecord(duration). - let internal_duration = self.to_internal_duration_record(); - - // b. Let timeZone be zonedRelativeTo.[[TimeZone]]. - // c. Let calendar be zonedRelativeTo.[[Calendar]]. - // (bundled in zoned_relative_to) - - // d. Let relativeEpochNs be zonedRelativeTo.[[EpochNanoseconds]]. - // let relative_epoch_ns = zoned_relative_to.epoch_nanoseconds(); - - // e. Let targetEpochNs be ? AddZonedDateTime(relativeEpochNs, timeZone, calendar, internalDuration, constrain). - let target_epoch_ns = zoned_relative_to.add_zoned_date_time( - internal_duration, - Overflow::Constrain, - provider, - )?; - - // f. Set internalDuration to ? DifferenceZonedDateTimeWithRounding(relativeEpochNs, targetEpochNs, timeZone, calendar, largestUnit, roundingIncrement, smallestUnit, roundingMode). - let internal = zoned_relative_to.diff_with_rounding( - &target_epoch_ns, - resolved_options, - provider, - )?; - - // g. If TemporalUnitCategory(largestUnit) is date, set largestUnit to hour. - let mut largest_unit = resolved_options.largest_unit; - if resolved_options.largest_unit.is_date_unit() { - largest_unit = Unit::Hour; - } - - // h. Return ? TemporalDurationFromInternal(internalDuration, largestUnit). - return Duration::from_internal(internal, largest_unit); - } - - // 28. If plainRelativeTo is not undefined, then - Some(RelativeTo::PlainDate(plain_relative_to)) => { - // a. Let internalDuration be ToInternalDurationRecordWith24HourDays(duration). - let internal_duration = - InternalDurationRecord::from_duration_with_24_hour_days(self)?; - - // b. Let targetTime be AddTime(MidnightTimeRecord(), internalDuration.[[Time]]). - let (target_time_days, target_time) = PlainTime::default() - .add_normalized_time_duration(internal_duration.normalized_time_duration()); - - // c. Let calendar be plainRelativeTo.[[Calendar]]. - let calendar = plain_relative_to.calendar(); - - // d. Let dateDuration be ! AdjustDateDurationRecord(internalDuration.[[Date]], targetTime.[[Days]]). - let date_duration = - internal_duration - .date() - .adjust(target_time_days, None, None)?; - - // e. Let targetDate be ? CalendarDateAdd(calendar, plainRelativeTo.[[ISODate]], dateDuration, constrain). - let target_date = calendar.date_add( - &plain_relative_to.iso, - &date_duration, - Overflow::Constrain, - )?; - - // f. Let isoDateTime be CombineISODateAndTimeRecord(plainRelativeTo.[[ISODate]], MidnightTimeRecord()). - let iso_date_time = - IsoDateTime::new_unchecked(plain_relative_to.iso, IsoTime::default()); - - // g. Let targetDateTime be CombineISODateAndTimeRecord(targetDate, targetTime). - let target_date_time = IsoDateTime::new_unchecked(target_date.iso, target_time.iso); - - // h. Set internalDuration to ? DifferencePlainDateTimeWithRounding(isoDateTime, targetDateTime, calendar, largestUnit, roundingIncrement, smallestUnit, roundingMode). - let internal_duration = - PlainDateTime::new_unchecked(iso_date_time, calendar.clone()) - .diff_dt_with_rounding( - &PlainDateTime::new_unchecked(target_date_time, calendar.clone()), - resolved_options, - )?; - - // i. Return ? TemporalDurationFromInternal(internalDuration, largestUnit). - return Duration::from_internal(internal_duration, resolved_options.largest_unit); - } - None => {} - } - - // 29. If IsCalendarUnit(existingLargestUnit) is true, or IsCalendarUnit(largestUnit) is true, throw a RangeError exception. - if existing_largest_unit.is_calendar_unit() - || resolved_options.largest_unit.is_calendar_unit() - { - return Err(TemporalError::range().with_message( - "largestUnit when rounding Duration was not the largest provided unit", - )); - } - - // 30. Assert: IsCalendarUnit(smallestUnit) is false. - temporal_assert!(!resolved_options.smallest_unit.is_calendar_unit()); - - // 31. Let internalDuration be ToInternalDurationRecordWith24HourDays(duration). - let internal_duration = InternalDurationRecord::from_duration_with_24_hour_days(self)?; - - // 32. If smallestUnit is day, then - let internal_duration = if resolved_options.smallest_unit == Unit::Day { - // a. Let fractionalDays be TotalTimeDuration(internalDuration.[[Time]], day). - // b. Let days be RoundNumberToIncrement(fractionalDays, roundingIncrement, roundingMode). - let days = internal_duration - .normalized_time_duration() - .round_to_fractional_days( - resolved_options.increment, - resolved_options.rounding_mode, - )?; - - // c. Let dateDuration be ? CreateDateDurationRecord(0, 0, 0, days). - let date = DateDuration::new(0, 0, 0, days)?; - - // d. Set internalDuration to CombineDateAndTimeDuration(dateDuration, 0). - InternalDurationRecord::new(date, TimeDuration::default())? - } else { - // 33. Else, - // a. Let timeDuration be ? RoundTimeDuration(internalDuration.[[Time]], roundingIncrement, smallestUnit, roundingMode). - let time_duration = internal_duration - .normalized_time_duration() - .round(resolved_options)?; - - // b. Set internalDuration to CombineDateAndTimeDuration(ZeroDateDuration(), timeDuration). - InternalDurationRecord::new(DateDuration::default(), time_duration)? - }; - - // 34. Return ? TemporalDurationFromInternal(internalDuration, largestUnit). - Duration::from_internal(internal_duration, resolved_options.largest_unit) - } - - /// Returns the total of the `Duration` - pub fn total_with_provider( - &self, - unit: Unit, - relative_to: Option, - provider: &(impl TimeZoneProvider + ?Sized), - // Review question what is the return type of duration.prototye.total? - ) -> TemporalResult { - match relative_to { - // 11. If zonedRelativeTo is not undefined, then - Some(RelativeTo::ZonedDateTime(zoned_datetime)) => { - // a. Let internalDuration be ToInternalDurationRecord(duration). - let internal_duration = self.to_internal_duration_record(); - // b. Let timeZone be zonedRelativeTo.[[TimeZone]]. - // c. Let calendar be zonedRelativeTo.[[Calendar]]. - // d. Let relativeEpochNs be zonedRelativeTo.[[EpochNanoseconds]]. - // e. Let targetEpochNs be ? AddZonedDateTime(relativeEpochNs, timeZone, calendar, internalDuration, constrain). - let target_epoch_ns = zoned_datetime.add_zoned_date_time( - internal_duration, - Overflow::Constrain, - provider, - )?; - // f. Let total be ? DifferenceZonedDateTimeWithTotal(relativeEpochNs, targetEpochNs, timeZone, calendar, unit). - let total = zoned_datetime.diff_with_total(&target_epoch_ns, unit, provider)?; - Ok(total) - } - // 12. Else if plainRelativeTo is not undefined, then - Some(RelativeTo::PlainDate(plain_date)) => { - // a. Let internalDuration be ToInternalDurationRecordWith24HourDays(duration). - // b. Let targetTime be AddTime(MidnightTimeRecord(), internalDuration.[[Time]]). - let (balanced_days, time) = - PlainTime::default().add_normalized_time_duration(self.to_normalized()); - // c. Let calendar be plainRelativeTo.[[Calendar]]. - // d. Let dateDuration be ! AdjustDateDurationRecord(internalDuration.[[Date]], targetTime.[[Days]]). - let date_duration = DateDuration::new( - self.years(), - self.months(), - self.weeks(), - self.days() - .checked_add(balanced_days) - .ok_or(TemporalError::range())?, - )?; - // e. Let targetDate be ? CalendarDateAdd(calendar, plainRelativeTo.[[ISODate]], dateDuration, constrain). - let target_date = plain_date.calendar().date_add( - &plain_date.iso, - &date_duration, - Overflow::Constrain, - )?; - // f. Let isoDateTime be CombineISODateAndTimeRecord(plainRelativeTo.[[ISODate]], MidnightTimeRecord()). - let iso_date_time = IsoDateTime::new_unchecked(plain_date.iso, IsoTime::default()); - // g. Let targetDateTime be CombineISODateAndTimeRecord(targetDate, targetTime). - let target_date_time = IsoDateTime::new_unchecked(target_date.iso, time.iso); - // h. Let total be ? DifferencePlainDateTimeWithTotal(isoDateTime, targetDateTime, calendar, unit). - let plain_dt = - PlainDateTime::new_unchecked(iso_date_time, plain_date.calendar().clone()); - let total = plain_dt.diff_dt_with_total( - &PlainDateTime::new_unchecked(target_date_time, plain_date.calendar().clone()), - unit, - )?; - Ok(total) - } - None => { - // a. Let largestUnit be DefaultTemporalLargestUnit(duration). - let largest_unit = self.default_largest_unit(); - // b. If IsCalendarUnit(largestUnit) is true, or IsCalendarUnit(unit) is true, throw a RangeError exception. - if largest_unit.is_calendar_unit() || unit.is_calendar_unit() { - return Err(TemporalError::range()); - } - // c. Let internalDuration be ToInternalDurationRecordWith24HourDays(duration). - let internal = InternalDurationRecord::from_duration_with_24_hour_days(self)?; - // d. Let total be TotalTimeDuration(internalDuration.[[Time]], unit). - let total = internal.normalized_time_duration().total(unit)?; - Ok(total) - } - } - } - - /// Returns the `Duration` as a formatted string - pub fn as_temporal_string(&self, options: ToStringRoundingOptions) -> TemporalResult { - if options.smallest_unit == Some(Unit::Hour) || options.smallest_unit == Some(Unit::Minute) - { - return Err(TemporalError::range().with_message( - "string rounding options cannot have hour or minute smallest unit.", - )); - } - - let resolved_options = options.resolve()?; - if resolved_options.smallest_unit == Unit::Nanosecond - && resolved_options.increment == RoundingIncrement::ONE - { - let duration = duration_to_formattable(self, resolved_options.precision)?; - return Ok(duration.to_string()); - } - - let rounding_options = ResolvedRoundingOptions::from_to_string_options(&resolved_options); - - // 12. Let largestUnit be DefaultTemporalLargestUnit(duration). - let largest = self.default_largest_unit(); - // 13. Let internalDuration be ToInternalDurationRecord(duration). - let internal_duration = self.to_internal_duration_record(); - // 14. Let timeDuration be ? RoundTimeDuration(internalDuration.[[Time]], precision.[[Increment]], precision.[[Unit]], roundingMode). - let time_duration = internal_duration - .normalized_time_duration() - .round(rounding_options)?; - // 15. Set internalDuration to CombineDateAndTimeDuration(internalDuration.[[Date]], timeDuration). - let internal_duration = - InternalDurationRecord::combine(internal_duration.date(), time_duration); - // 16. Let roundedLargestUnit be LargerOfTwoTemporalUnits(largestUnit, second). - let rounded_largest_unit = largest.max(Unit::Second); - - // 17. Let roundedDuration be ? TemporalDurationFromInternal(internalDuration, roundedLargestUnit). - let rounded = Self::from_internal(internal_duration, rounded_largest_unit)?; - - // 18. Return TemporalDurationToString(roundedDuration, precision.[[Precision]]). - Ok(duration_to_formattable(&rounded, resolved_options.precision)?.to_string()) - } -} - -pub fn duration_to_formattable( - duration: &Duration, - precision: Precision, -) -> TemporalResult { - let sign = duration.sign(); - let duration = duration.abs(); - let date = duration.years() + duration.months() + duration.weeks() + duration.days(); - let date = if date != 0 { - Some(FormattableDateDuration { - years: duration.years() as u32, - months: duration.months() as u32, - weeks: duration.weeks() as u32, - days: duration.days() as u64, - }) - } else { - None - }; - - let hours = duration.hours().abs(); - let minutes = duration.minutes().abs(); - - let time = TimeDuration::from_components( - 0, - 0, - duration.seconds(), - duration.milliseconds(), - duration.microseconds(), - duration.nanoseconds(), - ); - - let seconds = time.seconds().unsigned_abs(); - let subseconds = time.subseconds().unsigned_abs(); - - let time = Some(FormattableTimeDuration::Seconds( - hours as u64, - minutes as u64, - seconds, - Some(subseconds), - )); - - Ok(FormattableDuration { - precision, - sign, - date, - time, - }) -} - -// TODO: Update, optimize, and fix the below. is_valid_duration should probably be generic over a T. - -const TWO_POWER_FIFTY_THREE: i128 = 9_007_199_254_740_992; -const MAX_SAFE_NS_PRECISION: i128 = TWO_POWER_FIFTY_THREE * 1_000_000_000; - -// NOTE: Can FiniteF64 optimize the duration_validation -/// Utility function to check whether the `Duration` fields are valid. -#[inline] -#[must_use] -#[allow(clippy::too_many_arguments)] -pub(crate) fn is_valid_duration( - years: i64, - months: i64, - weeks: i64, - days: i64, - hours: i64, - minutes: i64, - seconds: i64, - milliseconds: i64, - microseconds: i128, - nanoseconds: i128, -) -> bool { - // 1. Let sign be ! DurationSign(years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds). - let set = [ - years, - months, - weeks, - days, - hours, - minutes, - seconds, - milliseconds, - microseconds.signum() as i64, - nanoseconds.signum() as i64, - ]; - let sign = duration_sign(&set); - // 2. For each value v of « years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds », do - for v in set { - // FiniteF64 must always be finite. - // a. If 𝔽(v) is not finite, return false. - // b. If v < 0 and sign > 0, return false. - if v < 0 && sign == Sign::Positive { - return false; - } - // c. If v > 0 and sign < 0, return false. - if v > 0 && sign == Sign::Negative { - return false; - } - } - // 3. If abs(years) ≥ 2**32, return false. - // n.b. u32::MAX is 2**32 - 1 - if years.saturating_abs() > u32::MAX as i64 { - return false; - }; - // 4. If abs(months) ≥ 2**32, return false. - if months.saturating_abs() > u32::MAX as i64 { - return false; - }; - // 5. If abs(weeks) ≥ 2**32, return false. - if weeks.saturating_abs() > u32::MAX as i64 { - return false; - }; - - // Work around https://github.com/boa-dev/temporal/issues/189 - // For the purpose of the validity check, we should normalize the i128 values - // to valid floating point values. This may round up! - // - // We only need to do this seconds and below, if any of the larger - // values are near MAX_SAFE_INTEGER then their seconds value will without question - // also be near MAX_SAFE_INTEGER. - let seconds = seconds as f64 as i64; - let milliseconds = milliseconds as f64 as i64; - let microseconds = microseconds as f64 as i128; - let nanoseconds = nanoseconds as f64 as i128; - - // 6. Let normalizedSeconds be days × 86,400 + hours × 3600 + minutes × 60 + seconds - // + ℝ(𝔽(milliseconds)) × 10**-3 + ℝ(𝔽(microseconds)) × 10**-6 + ℝ(𝔽(nanoseconds)) × 10**-9. - // 7. NOTE: The above step cannot be implemented directly using floating-point arithmetic. - // Multiplying by 10**-3, 10**-6, and 10**-9 respectively may be imprecise when milliseconds, - // microseconds, or nanoseconds is an unsafe integer. This multiplication can be implemented - // in C++ with an implementation of core::remquo() with sufficient bits in the quotient. - // String manipulation will also give an exact result, since the multiplication is by a power of 10. - // Seconds part - // TODO: Fix the below parts after clarification around behavior. - let normalized_nanoseconds = (days as i128 * NS_PER_DAY as i128) - + (hours as i128) * 3_600_000_000_000 - + minutes as i128 * 60_000_000_000 - + seconds as i128 * 1_000_000_000; - // Subseconds part - let normalized_subseconds_parts = (milliseconds as i128) - .saturating_mul(1_000_000) - .saturating_add(microseconds.saturating_mul(1_000)) - .saturating_add(nanoseconds); - - let total_normalized_seconds = - normalized_nanoseconds.saturating_add(normalized_subseconds_parts); - // 8. If abs(normalizedSeconds) ≥ 2**53, return false. - if total_normalized_seconds.saturating_abs() >= MAX_SAFE_NS_PRECISION { - return false; - } - - // 9. Return true. - true -} - -/// Utility function for determining the sign for the current set of `Duration` fields. -/// -/// Equivalent: 7.5.10 `DurationSign ( years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds )` -#[inline] -#[must_use] -pub(crate) fn duration_sign(set: &[i64]) -> Sign { - // 1. For each value v of « years, months, weeks, days, hours, minutes, seconds, milliseconds, microseconds, nanoseconds », do - for v in set { - // a. If v < 0, return -1. - // b. If v > 0, return 1. - match (*v).cmp(&0) { - Ordering::Less => return Sign::Negative, - Ordering::Greater => return Sign::Positive, - _ => {} - } - } - // 2. Return 0. - Sign::Zero -} - -impl From for Duration { - fn from(value: DateDuration) -> Self { - Self { - sign: value.sign(), - years: value.years.unsigned_abs() as u32, - months: value.months.unsigned_abs() as u32, - weeks: value.weeks.unsigned_abs() as u32, - days: value.days.unsigned_abs(), - ..Default::default() - } - } -} - -// ==== FromStr trait impl ==== - -impl FromStr for Duration { - type Err = TemporalError; - - fn from_str(s: &str) -> Result { - Self::from_utf8(s.as_bytes()) - } -} diff --git a/src/builtins/core/instant.rs b/src/builtins/core/instant.rs deleted file mode 100644 index db482553e..000000000 --- a/src/builtins/core/instant.rs +++ /dev/null @@ -1,846 +0,0 @@ -//! An implementation of the Temporal Instant. - -use alloc::string::String; -use core::{num::NonZeroU128, str::FromStr}; - -use crate::{ - builtins::core::{zoned_date_time::nanoseconds_to_formattable_offset_minutes, Duration}, - error::ErrorMessage, - iso::IsoDateTime, - options::{ - DifferenceOperation, DifferenceSettings, DisplayOffset, ResolvedRoundingOptions, - RoundingOptions, ToStringRoundingOptions, Unit, UnitGroup, - }, - parsers::{parse_instant, IxdtfStringBuilder}, - provider::TimeZoneProvider, - rounding::IncrementRounder, - unix_time::EpochNanoseconds, - Calendar, TemporalError, TemporalResult, TemporalUnwrap, TimeZone, -}; - -use ixdtf::records::UtcOffsetRecordOrZ; -use num_traits::Euclid; -use writeable::Writeable; - -use super::{ - duration::normalized::{InternalDurationRecord, TimeDuration}, - DateDuration, ZonedDateTime, -}; - -pub(crate) const NANOSECONDS_PER_SECOND: i64 = 1_000_000_000; -const NANOSECONDS_PER_MINUTE: i64 = 60 * NANOSECONDS_PER_SECOND; -const NANOSECONDS_PER_HOUR: i64 = 60 * NANOSECONDS_PER_MINUTE; - -/// The native Rust implementation of `Temporal.Instant`. -/// -/// Represents a precise moment in time measured as nanoseconds since the Unix epoch -/// (1970-01-01T00:00:00\[UTC\]). An `Instant` provides a universal timestamp -/// that represents the same moment regardless of timezone or calendar system. -/// -/// Use `Instant` when you need to record exact moments in time, measure elapsed time, -/// or work with high-precision timestamps. Unlike `PlainDateTime`, an `Instant` -/// represents an absolute point on the timeline. -/// -/// ## Examples -/// -/// ### Creating instants -/// -/// ```rust -/// use temporal_rs::Instant; -/// -/// // From epoch nanoseconds (high-precision timestamps) -/// let precise_moment = Instant::try_new(1609459200000000000).unwrap(); -/// assert_eq!(precise_moment.epoch_milliseconds(), 1609459200000); -/// -/// // From epoch milliseconds (common in web applications) -/// let web_timestamp = Instant::from_epoch_milliseconds(1609459200000).unwrap(); -/// assert_eq!(web_timestamp.epoch_nanoseconds().as_i128(), 1609459200000000000); -/// ``` -/// -/// ### Parsing ISO 8601 instant strings -/// -/// ```rust -/// use temporal_rs::Instant; -/// use core::str::FromStr; -/// -/// // Parse ISO 8601 instant strings (must include timezone info) -/// let instant = Instant::from_str("2024-03-15T14:30:45.123Z").unwrap(); -/// assert_eq!(instant.epoch_milliseconds(), 1710513045123); -/// -/// // Parse instants with different timezone notations -/// let instant2 = Instant::from_str("2024-03-15T14:30:45.123+00:00").unwrap(); -/// let instant3 = Instant::from_str("2024-03-15T14:30:45.123-00:00").unwrap(); -/// assert_eq!(instant, instant2); -/// assert_eq!(instant2, instant3); -/// ``` -/// -/// ### Instant arithmetic -/// -/// ```rust -/// use temporal_rs::{Instant, Duration}; -/// use core::str::FromStr; -/// -/// let instant = Instant::try_new(1609459200000000000).unwrap(); // 2021-01-01T00:00:00Z -/// -/// // Add time duration (only time durations, not date durations) -/// let later = instant.add(&Duration::from_str("PT1H30M").unwrap()).unwrap(); -/// let expected_ns = 1609459200000000000 + (1 * 3600 + 30 * 60) * 1_000_000_000; -/// assert_eq!(later.epoch_nanoseconds().as_i128(), expected_ns); -/// -/// // Calculate difference between instants -/// let earlier = Instant::try_new(1609459200000000000 - 3600_000_000_000).unwrap(); -/// let duration = earlier.until(&instant, Default::default()).unwrap(); -/// assert_eq!(duration.seconds(), 3600); -/// ``` -/// -/// ### Instant precision and limits -/// -/// ```rust -/// use temporal_rs::Instant; -/// -/// // Instants have well-defined limits based on approximately 100 million days before/after Unix epoch -/// let max_ns = 8_640_000_000_000_000_000_000i128; // ~100M days * 24 * 60 * 60 * 1e9 -/// let min_ns = -max_ns; -/// -/// let max_instant = Instant::try_new(max_ns).unwrap(); -/// let min_instant = Instant::try_new(min_ns).unwrap(); -/// -/// // Values outside the range will fail -/// assert!(Instant::try_new(max_ns + 1).is_err()); -/// assert!(Instant::try_new(min_ns - 1).is_err()); -/// ``` -/// -/// ### Converting to ZonedDateTime (requires provider) -/// -/// ```rust,ignore -/// use temporal_rs::{Instant, TimeZone, Calendar}; -/// -/// let instant = Instant::try_new(1609459200000000000).unwrap(); -/// let timezone = TimeZone::try_from_str("America/New_York").unwrap(); -/// -/// // Convert to a zoned date-time for display in local time -/// let zdt = instant.to_zoned_date_time_iso(timezone); -/// assert_eq!(zdt.timezone().identifier(), "America/New_York"); -/// assert_eq!(zdt.calendar().identifier(), "iso8601"); -/// ``` -/// -/// ### Rounding instants -/// -/// ```rust -/// use temporal_rs::{Instant, options::{RoundingOptions, Unit}}; -/// -/// let instant = Instant::try_new(1609459245123456789).unwrap(); // some precise moment -/// -/// let mut opts = RoundingOptions::default(); -/// opts.smallest_unit = Some(Unit::Second); -/// let rounded = instant.round(opts).unwrap(); -/// -/// // Rounded to the nearest second -/// assert_eq!(rounded.epoch_nanoseconds().as_i128() % 1_000_000_000, 0); -/// ``` -/// -/// ## Reference -/// -/// For more information, see the [MDN documentation][mdn-instant]. -/// -/// [mdn-instant]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/Instant -#[non_exhaustive] -#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] -pub struct Instant(EpochNanoseconds); - -impl From for Instant { - fn from(value: EpochNanoseconds) -> Self { - Self(value) - } -} - -// ==== Private API ==== - -impl Instant { - /// Adds a `TimeDuration` to the current `Instant`. - /// - /// Temporal-Proposal equivalent: `AddInstant`. - pub(crate) fn add_to_instant(&self, duration: &TimeDuration) -> TemporalResult { - // 1. Let result be AddTimeDurationToEpochNanoseconds(timeDuration, epochNanoseconds). - let result = self.epoch_nanoseconds().0 + duration.0; - let ns = EpochNanoseconds::from(result); - // 2. If IsValidEpochNanoseconds(result) is false, throw a RangeError exception. - ns.check_validity()?; - // 3. Return result. - Ok(Self::from(ns)) - } - - /// 8.5.10 AddDurationToInstant ( operation, instant, temporalDurationLike ) - pub(crate) fn add_duration_to_instant(&self, duration: &Duration) -> TemporalResult { - // 3. Let largestUnit be DefaultTemporalLargestUnit(duration). - let largest_unit = duration.default_largest_unit(); - // 4. If TemporalUnitCategory(largestUnit) is date, throw a RangeError exception. - if largest_unit.is_date_unit() { - return Err(TemporalError::range().with_enum(ErrorMessage::LargestUnitCannotBeDateUnit)); - } - // 5. Let internalDuration be ToInternalDurationRecordWith24HourDays(duration). - let internal_duration = InternalDurationRecord::from_duration_with_24_hour_days(duration)?; - // 6. Let ns be ? AddInstant(instant.[[EpochNanoseconds]], internalDuration.[[Time]]). - // 7. Return ! CreateTemporalInstant(ns). - self.add_to_instant(&internal_duration.normalized_time_duration()) - } - - /// `temporal_rs` equivalent of `DifferenceInstant` - pub(crate) fn diff_instant_internal( - &self, - other: &Self, - resolved_options: ResolvedRoundingOptions, - ) -> TemporalResult { - let diff = TimeDuration::from_nanosecond_difference(other.as_i128(), self.as_i128())?; - let normalized_time = diff.round(resolved_options)?; - InternalDurationRecord::new(DateDuration::default(), normalized_time) - } - - // TODO: Add test for `diff_instant`. - // NOTE(nekevss): As the below is internal, op will be left as a boolean - // with a `since` op being true and `until` being false. - /// Internal operation to handle `since` and `until` difference ops. - pub(crate) fn diff_instant( - &self, - op: DifferenceOperation, - other: &Self, - options: DifferenceSettings, - ) -> TemporalResult { - // 1. If operation is since, let sign be -1. Otherwise, let sign be 1. - // 2. Set other to ? ToTemporalInstant(other). - // 3. Let resolvedOptions be ? SnapshotOwnProperties(? GetOptionsObject(options), null). - // 4. Let settings be ? GetDifferenceSettings(operation, resolvedOptions, time, « », "nanosecond", "second"). - let resolved_options = ResolvedRoundingOptions::from_diff_settings( - options, - op, - UnitGroup::Time, - Unit::Second, - Unit::Nanosecond, - )?; - - // Below are the steps from Difference Instant. - // 5. Let diffRecord be DifferenceInstant(instant.[[Nanoseconds]], other.[[Nanoseconds]], - // settings.[[RoundingIncrement]], settings.[[SmallestUnit]], settings.[[RoundingMode]]). - let internal_record = self.diff_instant_internal(other, resolved_options)?; - - let result = Duration::from_internal(internal_record, resolved_options.largest_unit)?; - - // 6. Let norm be diffRecord.[[TimeDuration]]. - // 7. Let result be ! BalanceTimeDuration(norm, settings.[[LargestUnit]]). - // 8. Return ! CreateTemporalDuration(0, 0, 0, 0, sign × result.[[Hours]], sign × result.[[Minutes]], sign × result.[[Seconds]], sign × result.[[Milliseconds]], sign × result.[[Microseconds]], sign × result.[[Nanoseconds]]). - match op { - DifferenceOperation::Until => Ok(result), - DifferenceOperation::Since => Ok(result.negated()), - } - } - - /// Rounds a current `Instant` given the resolved options, returning a `BigInt` result. - pub(crate) fn round_instant( - &self, - resolved_options: ResolvedRoundingOptions, - ) -> TemporalResult { - let increment = resolved_options.increment.as_extended_increment(); - let increment = match resolved_options.smallest_unit { - Unit::Hour => increment - .checked_mul(NonZeroU128::new(NANOSECONDS_PER_HOUR as u128).temporal_unwrap()?), - Unit::Minute => increment - .checked_mul(NonZeroU128::new(NANOSECONDS_PER_MINUTE as u128).temporal_unwrap()?), - Unit::Second => increment - .checked_mul(NonZeroU128::new(NANOSECONDS_PER_SECOND as u128).temporal_unwrap()?), - Unit::Millisecond => { - increment.checked_mul(NonZeroU128::new(1_000_000).temporal_unwrap()?) - } - Unit::Microsecond => increment.checked_mul(NonZeroU128::new(1_000).temporal_unwrap()?), - Unit::Nanosecond => Some(increment), - _ => { - return Err(TemporalError::range() - .with_message("Invalid unit provided for Instant::round.")) - } - }; - - // NOTE: Potentially remove the below and just `temporal_unwrap` - let Some(increment) = increment else { - return Err(TemporalError::range().with_message("Increment exceeded a valid range.")); - }; - - let rounded = IncrementRounder::::from_signed_num(self.as_i128(), increment)? - .round_as_if_positive(resolved_options.rounding_mode); - - Ok(rounded) - } - - // Utility for converting `Instant` to `i128`. - pub fn as_i128(&self) -> i128 { - self.epoch_nanoseconds().0 - } -} - -// ==== Public API ==== - -impl Instant { - /// Create a new validated `Instant`. - #[inline] - pub fn try_new(nanoseconds: i128) -> TemporalResult { - let ns = EpochNanoseconds::from(nanoseconds); - ns.check_validity()?; - Ok(Self::from(ns)) - } - - /// Creates a new `Instant` from the provided Epoch millisecond value. - pub fn from_epoch_milliseconds(epoch_milliseconds: i64) -> TemporalResult { - // Input at most is `i64::MAX`. This means guarantees that the - // transition into nanoseconds MUST be in range of `i128` - let epoch_nanos = (epoch_milliseconds as i128) * 1_000_000; - Self::try_new(epoch_nanos) - } - - // Converts a UTF-8 encoded string into a `Instant`. - pub fn from_utf8(s: &[u8]) -> TemporalResult { - let ixdtf_record = parse_instant(s)?; - - // Find the offset - let ns_offset = match ixdtf_record.offset { - UtcOffsetRecordOrZ::Offset(offset) => { - let ns = offset - .fraction() - .map(|x| { - x.to_nanoseconds().ok_or( - TemporalError::range() - .with_enum(ErrorMessage::FractionalTimeMoreThanNineDigits), - ) - }) - .transpose()? - .unwrap_or(0); - (offset.hour() as i64 * NANOSECONDS_PER_HOUR - + i64::from(offset.minute()) * NANOSECONDS_PER_MINUTE - + i64::from(offset.second().unwrap_or(0)) * NANOSECONDS_PER_SECOND - + i64::from(ns)) - * offset.sign() as i64 - } - UtcOffsetRecordOrZ::Z => 0, - }; - - let time_nanoseconds = ixdtf_record - .time - .fraction - .map(|x| { - x.to_nanoseconds().ok_or( - TemporalError::range() - .with_enum(ErrorMessage::FractionalTimeMoreThanNineDigits), - ) - }) - .transpose()? - .unwrap_or(0); - let (millisecond, rem) = time_nanoseconds.div_rem_euclid(&1_000_000); - let (microsecond, nanosecond) = rem.div_rem_euclid(&1_000); - - let balanced = IsoDateTime::balance( - ixdtf_record.date.year, - ixdtf_record.date.month.into(), - ixdtf_record.date.day.into(), - ixdtf_record.time.hour.into(), - ixdtf_record.time.minute.into(), - ixdtf_record.time.second.clamp(0, 59).into(), - millisecond.into(), - microsecond.into(), - i128::from(nanosecond) - i128::from(ns_offset), - ); - - let nanoseconds = balanced.as_nanoseconds(); - - nanoseconds.check_validity()?; - - Ok(Self(nanoseconds)) - } - - /// Adds a `Duration` to the current `Instant`, returning an error if the `Duration` - /// contains a `DateDuration`. - #[inline] - pub fn add(&self, duration: &Duration) -> TemporalResult { - self.add_duration_to_instant(duration) - } - - /// Subtract a `Duration` to the current `Instant`, returning an error if the `Duration` - /// contains a `DateDuration`. - #[inline] - pub fn subtract(&self, duration: &Duration) -> TemporalResult { - self.add_duration_to_instant(&duration.negated()) - } - - /// Returns a `Duration` representing the duration since provided `Instant` - #[inline] - pub fn since(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { - self.diff_instant(DifferenceOperation::Since, other, settings) - } - - /// Returns a `Duration` representing the duration until provided `Instant` - #[inline] - pub fn until(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { - self.diff_instant(DifferenceOperation::Until, other, settings) - } - - /// Returns an `Instant` by rounding the current `Instant` according to the provided settings. - #[inline] - pub fn round(&self, options: RoundingOptions) -> TemporalResult { - let resolved_options = ResolvedRoundingOptions::from_instant_options(options)?; - - let round_result = self.round_instant(resolved_options)?; - Self::try_new(round_result) - } - - /// Returns the `epochMilliseconds` value for this `Instant`. - #[inline] - #[must_use] - pub fn epoch_milliseconds(&self) -> i64 { - self.as_i128().div_euclid(1_000_000) as i64 - } - - /// Returns the [`EpochNanoseconds`] value for this `Instant`. - #[inline] - #[must_use] - pub fn epoch_nanoseconds(&self) -> &EpochNanoseconds { - &self.0 - } - - /// Returns a [`ZonedDateTime`] for the current `Instant`. - #[inline] - pub fn to_zoned_date_time_iso_with_provider( - &self, - time_zone: TimeZone, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - ZonedDateTime::new_unchecked_with_provider(*self, time_zone, Calendar::ISO, provider) - } -} - -// ==== Instant Provider API ==== - -impl Instant { - /// Returns an RFC9557 IXDTF string representing the current `Instant`. - pub fn to_ixdtf_string_with_provider( - &self, - timezone: Option, - options: ToStringRoundingOptions, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - self.to_ixdtf_writeable_with_provider(timezone, options, provider) - .map(|x| x.write_to_string().into()) - } - - /// Returns a [`Writeable`] for formatting the current `Instant` in RFC9557's IXDTF. - pub fn to_ixdtf_writeable_with_provider( - &self, - timezone: Option, - options: ToStringRoundingOptions, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - let resolved_options = options.resolve()?; - let round = self.round_instant(ResolvedRoundingOptions::from_to_string_options( - &resolved_options, - ))?; - let rounded_instant = Instant::try_new(round)?; - - let mut ixdtf = IxdtfStringBuilder::default(); - let datetime = if let Some(timezone) = timezone { - let datetime = timezone.get_iso_datetime_for(&rounded_instant, provider)?; - let nanoseconds = timezone.get_offset_nanos_for(rounded_instant.as_i128(), provider)?; - let (sign, hour, minute) = nanoseconds_to_formattable_offset_minutes(nanoseconds)?; - ixdtf = ixdtf.with_minute_offset(sign, hour, minute, DisplayOffset::Auto); - datetime - } else { - ixdtf = ixdtf.with_z(DisplayOffset::Auto); - TimeZone::utc_with_provider(provider) - .get_iso_datetime_for(&rounded_instant, provider)? - }; - let builder = ixdtf - .with_date(datetime.date) - .with_time(datetime.time, resolved_options.precision); - - Ok(builder) - } -} - -// ==== Utility Functions ==== - -impl FromStr for Instant { - type Err = TemporalError; - - fn from_str(s: &str) -> Result { - Self::from_utf8(s.as_bytes()) - } -} - -// ==== Instant Tests ==== - -#[cfg(test)] -mod tests { - - use core::str::FromStr; - - use crate::{ - builtins::{core::Instant, duration::duration_sign}, - options::{DifferenceSettings, RoundingMode, Unit}, - partial::PartialDuration, - unix_time::EpochNanoseconds, - Duration, NS_MAX_INSTANT, NS_MIN_INSTANT, - }; - - #[test] - #[allow(clippy::float_cmp)] - fn max_and_minimum_instant_bounds() { - // This test is primarily to assert that the `expect` in the epoch methods is - // valid, i.e., a valid instant is within the range of an f64. - let max = NS_MAX_INSTANT; - let min = NS_MIN_INSTANT; - let max_instant = Instant::try_new(max).unwrap(); - let min_instant = Instant::try_new(min).unwrap(); - - assert_eq!(max_instant.epoch_nanoseconds().0, max); - assert_eq!(min_instant.epoch_nanoseconds().0, min); - - let max_plus_one = NS_MAX_INSTANT + 1; - let min_minus_one = NS_MIN_INSTANT - 1; - - assert!(Instant::try_new(max_plus_one).is_err()); - assert!(Instant::try_new(min_minus_one).is_err()); - } - - #[test] - fn max_min_epoch_millseconds() { - // Assert the casting is valid. - let max = NS_MAX_INSTANT; - let min = NS_MIN_INSTANT; - let max_instant = Instant::try_new(max).unwrap(); - let min_instant = Instant::try_new(min).unwrap(); - - // Assert max and min are valid for casting. - assert_eq!( - max_instant.epoch_milliseconds(), - max.div_euclid(1_000_000) as i64 - ); - assert_eq!( - min_instant.epoch_milliseconds(), - min.div_euclid(1_000_000) as i64 - ); - // Assert the max and min are not being truncated. - assert_ne!(max_instant.epoch_milliseconds(), i64::MAX); - assert_ne!(max_instant.epoch_milliseconds(), i64::MIN); - } - - #[test] - fn instant_parsing_limits() { - // valid cases - let valid_str = "-271821-04-20T00:00Z"; - let instant = Instant::from_str(valid_str).unwrap(); - assert_eq!( - instant, - Instant::from(EpochNanoseconds(-8640000000000000000000)) - ); - - let valid_str = "-271821-04-19T23:00-01:00"; - let instant = Instant::from_str(valid_str).unwrap(); - assert_eq!( - instant, - Instant::from(EpochNanoseconds(-8640000000000000000000)) - ); - - let valid_str = "-271821-04-19T00:00:00.000000001-23:59:59.999999999"; - let instant = Instant::from_str(valid_str).unwrap(); - assert_eq!( - instant, - Instant::from(EpochNanoseconds(-8640000000000000000000)) - ); - - let valid_str = "+275760-09-13T00:00Z"; - let instant = Instant::from_str(valid_str).unwrap(); - assert_eq!( - instant, - Instant::from(EpochNanoseconds(8640000000000000000000)) - ); - - // invalid cases - let invalid_str = "-271821-04-19T00:00Z"; - let instant = Instant::from_str(invalid_str); - assert!(instant.is_err()); - - let invalid_str = "-271821-04-19T23:59:59.999999999Z"; - let instant = Instant::from_str(invalid_str); - assert!(instant.is_err()); - - let invalid_str = "-271821-04-19T23:00-00:59:59.999999999"; - let instant = Instant::from_str(invalid_str); - assert!(instant.is_err()); - } - - #[test] - fn basic_instant_until() { - let init_diff_setting = |unit: Unit| -> DifferenceSettings { - DifferenceSettings { - largest_unit: Some(Unit::Hour), - rounding_mode: Some(RoundingMode::Ceil), - increment: None, - smallest_unit: Some(unit), - } - }; - - let assert_duration = |td: Duration, expected: (i64, i64, i64, i64, i128, i128)| { - assert_eq!( - td, - Duration { - sign: duration_sign(&[ - expected.0, - expected.1, - expected.2, - expected.3, - expected.4 as i64, - expected.5 as i64 - ]), - hours: expected.0.unsigned_abs(), - minutes: expected.1.unsigned_abs(), - seconds: expected.2.unsigned_abs(), - milliseconds: expected.3.unsigned_abs(), - microseconds: expected.4.unsigned_abs(), - nanoseconds: expected.5.unsigned_abs(), - ..Default::default() - } - ) - }; - - let earlier = Instant::try_new( - 217_178_610_123_456_789, /* 1976-11-18T15:23:30.123456789Z */ - ) - .unwrap(); - let later = Instant::try_new( - 1_572_345_998_271_986_289, /* 2019-10-29T10:46:38.271986289Z */ - ) - .unwrap(); - - let positive_result = earlier - .until(&later, init_diff_setting(Unit::Hour)) - .unwrap(); - assert_duration(positive_result, (376436, 0, 0, 0, 0, 0)); - let negative_result = later - .until(&earlier, init_diff_setting(Unit::Hour)) - .unwrap(); - assert_duration(negative_result, (-376435, 0, 0, 0, 0, 0)); - - let positive_result = earlier - .until(&later, init_diff_setting(Unit::Minute)) - .unwrap(); - assert_duration(positive_result, (376435, 24, 0, 0, 0, 0)); - let negative_result = later - .until(&earlier, init_diff_setting(Unit::Minute)) - .unwrap(); - assert_duration(negative_result, (-376435, -23, 0, 0, 0, 0)); - - // ... Skip to lower units ... - - let positive_result = earlier - .until(&later, init_diff_setting(Unit::Microsecond)) - .unwrap(); - assert_duration(positive_result, (376435, 23, 8, 148, 530, 0)); - let negative_result = later - .until(&earlier, init_diff_setting(Unit::Microsecond)) - .unwrap(); - assert_duration(negative_result, (-376435, -23, -8, -148, -529, 0)); - - let positive_result = earlier - .until(&later, init_diff_setting(Unit::Nanosecond)) - .unwrap(); - assert_duration(positive_result, (376435, 23, 8, 148, 529, 500)); - let negative_result = later - .until(&earlier, init_diff_setting(Unit::Nanosecond)) - .unwrap(); - assert_duration(negative_result, (-376435, -23, -8, -148, -529, -500)); - } - - #[test] - fn basic_instant_since() { - let init_diff_setting = |unit: Unit| -> DifferenceSettings { - DifferenceSettings { - largest_unit: Some(Unit::Hour), - rounding_mode: Some(RoundingMode::Ceil), - increment: None, - smallest_unit: Some(unit), - } - }; - - let assert_duration = |td: Duration, expected: (i64, i64, i64, i64, i128, i128)| { - assert_eq!( - td, - Duration { - sign: duration_sign(&[ - expected.0, - expected.1, - expected.2, - expected.3, - expected.4 as i64, - expected.5 as i64 - ]), - hours: expected.0.unsigned_abs(), - minutes: expected.1.unsigned_abs(), - seconds: expected.2.unsigned_abs(), - milliseconds: expected.3.unsigned_abs(), - microseconds: expected.4.unsigned_abs(), - nanoseconds: expected.5.unsigned_abs(), - ..Default::default() - } - ) - }; - - let earlier = Instant::try_new( - 217_178_610_123_456_789, /* 1976-11-18T15:23:30.123456789Z */ - ) - .unwrap(); - let later = Instant::try_new( - 1_572_345_998_271_986_289, /* 2019-10-29T10:46:38.271986289Z */ - ) - .unwrap(); - - let positive_result = later - .since(&earlier, init_diff_setting(Unit::Hour)) - .unwrap(); - assert_duration(positive_result, (376436, 0, 0, 0, 0, 0)); - let negative_result = earlier - .since(&later, init_diff_setting(Unit::Hour)) - .unwrap(); - assert_duration(negative_result, (-376435, 0, 0, 0, 0, 0)); - - let positive_result = later - .since(&earlier, init_diff_setting(Unit::Minute)) - .unwrap(); - assert_duration(positive_result, (376435, 24, 0, 0, 0, 0)); - let negative_result = earlier - .since(&later, init_diff_setting(Unit::Minute)) - .unwrap(); - assert_duration(negative_result, (-376435, -23, 0, 0, 0, 0)); - - // ... Skip to lower units ... - - let positive_result = later - .since(&earlier, init_diff_setting(Unit::Microsecond)) - .unwrap(); - assert_duration(positive_result, (376435, 23, 8, 148, 530, 0)); - let negative_result = earlier - .since(&later, init_diff_setting(Unit::Microsecond)) - .unwrap(); - assert_duration(negative_result, (-376435, -23, -8, -148, -529, 0)); - - let positive_result = later - .since(&earlier, init_diff_setting(Unit::Nanosecond)) - .unwrap(); - assert_duration(positive_result, (376435, 23, 8, 148, 529, 500)); - let negative_result = earlier - .since(&later, init_diff_setting(Unit::Nanosecond)) - .unwrap(); - assert_duration(negative_result, (-376435, -23, -8, -148, -529, -500)); - } - - // /test/built-ins/Temporal/Instant/prototype/add/cross-epoch.js - #[cfg(feature = "tzdb")] - #[test] - fn instant_add_across_epoch() { - use crate::builtins::core::Duration; - use crate::{ - options::ToStringRoundingOptions, partial::PartialDuration, tzdb::FsTzdbProvider, - }; - use core::str::FromStr; - - let instant = Instant::from_str("1969-12-25T12:23:45.678901234Z").unwrap(); - let one = instant - .subtract( - &Duration::from_partial_duration(PartialDuration { - hours: Some(240.into()), - nanoseconds: Some(800.into()), - ..Default::default() - }) - .unwrap(), - ) - .unwrap(); - let two = instant - .add( - &Duration::from_partial_duration(PartialDuration { - hours: Some(240.into()), - nanoseconds: Some(800.into()), - ..Default::default() - }) - .unwrap(), - ) - .unwrap(); - let three = two - .subtract( - &Duration::from_partial_duration(PartialDuration { - hours: Some(480.into()), - nanoseconds: Some(1600.into()), - ..Default::default() - }) - .unwrap(), - ) - .unwrap(); - let four = one - .add( - &Duration::from_partial_duration(PartialDuration { - hours: Some(480.into()), - nanoseconds: Some(1600.into()), - ..Default::default() - }) - .unwrap(), - ) - .unwrap(); - - let one_comp = Instant::from_str("1969-12-15T12:23:45.678900434Z").unwrap(); - let two_comp = Instant::from_str("1970-01-04T12:23:45.678902034Z").unwrap(); - - // Assert the comparisons all hold. - assert_eq!(one, one_comp); - assert_eq!(two, two_comp); - assert_eq!(three, one); - assert_eq!(four, two); - - // Assert the to_string is valid. - let provider = &FsTzdbProvider::default(); - let inst_string = instant - .to_ixdtf_string_with_provider(None, ToStringRoundingOptions::default(), provider) - .unwrap(); - let one_string = one - .to_ixdtf_string_with_provider(None, ToStringRoundingOptions::default(), provider) - .unwrap(); - let two_string = two - .to_ixdtf_string_with_provider(None, ToStringRoundingOptions::default(), provider) - .unwrap(); - - assert_eq!(&inst_string, "1969-12-25T12:23:45.678901234Z"); - assert_eq!(&one_string, "1969-12-15T12:23:45.678900434Z"); - assert_eq!(&two_string, "1970-01-04T12:23:45.678902034Z"); - } - - // Adapted from add[subtract]/minimum-maximum-instant.js - #[test] - fn instant_add_subtract_max_min() { - let min = Instant::try_new(-86_40000_00000_00000_00000).unwrap(); - let max = Instant::try_new(86_40000_00000_00000_00000).unwrap(); - - let zero = Duration::from_partial_duration(PartialDuration::default().with_nanoseconds(0)) - .unwrap(); - let one = Duration::from_partial_duration(PartialDuration::default().with_nanoseconds(1)) - .unwrap(); - let neg_one = - Duration::from_partial_duration(PartialDuration::default().with_nanoseconds(-1)) - .unwrap(); - // Adding/subtracting zero does not cross max/min boundary. - assert_eq!(min.add(&zero).unwrap(), min); - assert_eq!(min.subtract(&zero).unwrap(), min); - - // Addition or subtraction crosses boundary. - assert!(max.add(&one).is_err()); - assert!(max.subtract(&neg_one).is_err()); - assert!(min.add(&neg_one).is_err()); - assert!(min.subtract(&one).is_err()); - - let insanely_large_partial = - PartialDuration::default().with_nanoseconds(-86_40000_00000_00000_00000 * 2); - let large_duration = Duration::from_partial_duration(insanely_large_partial).unwrap(); - assert_eq!(min.subtract(&large_duration).unwrap(), max); - assert_eq!(max.add(&large_duration).unwrap(), min); - } -} diff --git a/src/builtins/core/plain_date.rs b/src/builtins/core/plain_date.rs deleted file mode 100644 index 871a36461..000000000 --- a/src/builtins/core/plain_date.rs +++ /dev/null @@ -1,1107 +0,0 @@ -//! This module implements `PlainDate` and any directly related algorithms. - -use crate::error::ErrorMessage; -use crate::parsed_intermediates::ParsedDate; -use crate::{ - builtins::{ - calendar::{CalendarFields, YearMonthCalendarFields}, - core::{ - calendar::Calendar, duration::DateDuration, Duration, PlainDateTime, PlainTime, - ZonedDateTime, - }, - }, - iso::{IsoDate, IsoDateTime, IsoTime}, - options::{ - DifferenceOperation, DifferenceSettings, Disambiguation, DisplayCalendar, Overflow, - ResolvedRoundingOptions, Unit, UnitGroup, - }, - parsers::IxdtfStringBuilder, - provider::{NeverProvider, TimeZoneProvider}, - unix_time::EpochNanoseconds, - MonthCode, TemporalError, TemporalResult, TimeZone, -}; -use alloc::string::String; -use core::{cmp::Ordering, str::FromStr}; -use icu_calendar::AnyCalendarKind; -use writeable::Writeable; - -use super::{duration::normalized::InternalDurationRecord, PlainMonthDay, PlainYearMonth}; -use tinystr::TinyAsciiStr; - -// TODO (potentially): Bump era up to TinyAsciiStr<18> to accomodate -// "ethiopic-amete-alem". TODO: PrepareTemporalFields expects a type -// error to be thrown when all partial fields are None/undefined. -/// A partial PlainDate that may or may not be complete. -#[derive(Debug, Default, Clone, PartialEq)] -pub struct PartialDate { - /// The calendar fields representing a calendar date. - pub calendar_fields: CalendarFields, - /// The calendar of this `PartialDate` - pub calendar: Calendar, -} - -/// Convenience methods for building a `PartialDate` -impl PartialDate { - pub const fn new() -> Self { - Self { - calendar_fields: CalendarFields { - year: None, - month: None, - month_code: None, - day: None, - era: None, - era_year: None, - }, - calendar: Calendar::new(AnyCalendarKind::Iso), - } - } - - pub const fn with_era(mut self, era: Option>) -> Self { - self.calendar_fields.era = era; - self - } - - pub const fn with_era_year(mut self, era_year: Option) -> Self { - self.calendar_fields.era_year = era_year; - self - } - - pub const fn with_year(mut self, year: Option) -> Self { - self.calendar_fields.year = year; - self - } - - pub const fn with_month(mut self, month: Option) -> Self { - self.calendar_fields.month = month; - self - } - - pub const fn with_month_code(mut self, month_code: Option) -> Self { - self.calendar_fields.month_code = month_code; - self - } - - pub const fn with_day(mut self, day: Option) -> Self { - self.calendar_fields.day = day; - self - } - - pub const fn with_calendar(mut self, calendar: Calendar) -> Self { - self.calendar = calendar; - self - } -} - -/// The native Rust implementation of `Temporal.PlainDate`. -/// -/// Represents a calendar date without any time or timezone -/// information. Useful for dates where the specific time of day doesn't matter, -/// such as deadlines, birth dates, or historical events. -/// -/// Uses the ISO 8601 calendar (proleptic Gregorian calendar) by default, with -/// support for other calendar systems when needed. -/// -/// ## Examples -/// -/// ### Creating dates -/// -/// ```rust -/// use temporal_rs::{PlainDate, Calendar}; -/// -/// // Create a date using the ISO calendar -/// let christmas = PlainDate::try_new_iso(2024, 12, 25).unwrap(); -/// assert_eq!(christmas.year(), 2024); -/// assert_eq!(christmas.month(), 12); -/// assert_eq!(christmas.day(), 25); -/// -/// // Explicit calendar specification -/// let date = PlainDate::try_new(2024, 12, 25, Calendar::default()).unwrap(); -/// assert_eq!(date.year(), 2024); -/// assert_eq!(christmas, date); // Both represent the same date -/// ``` -/// -/// ### Date arithmetic operations -/// -/// ```rust -/// use temporal_rs::{PlainDate, Duration}; -/// use core::str::FromStr; -/// -/// let start = PlainDate::try_new_iso(2024, 1, 15).unwrap(); -/// -/// // Add one month -/// let later = start.add(&Duration::from_str("P1M").unwrap(), None).unwrap(); -/// assert_eq!(later.month(), 2); // Results in 2024-02-15 -/// assert_eq!(later.day(), 15); -/// -/// // Calculate duration between dates -/// let new_year = PlainDate::try_new_iso(2024, 1, 1).unwrap(); -/// let diff = new_year.until(&start, Default::default()).unwrap(); -/// assert_eq!(diff.days(), 14); -/// ``` -/// -/// ### Parsing ISO 8601 date strings -/// -/// ```rust -/// use temporal_rs::PlainDate; -/// use core::str::FromStr; -/// -/// // Standard ISO date format -/// let date = PlainDate::from_str("2024-03-15").unwrap(); -/// assert_eq!(date.year(), 2024); -/// assert_eq!(date.month(), 3); -/// assert_eq!(date.day(), 15); -/// -/// // With explicit calendar annotation -/// let date2 = PlainDate::from_str("2024-03-15[u-ca=iso8601]").unwrap(); -/// assert_eq!(date, date2); -/// ``` -/// -/// ## Reference -/// -/// For more information, see the [MDN documentation][mdn-plaindate]. -/// -/// [mdn-plaindate]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDate -#[non_exhaustive] -#[derive(Debug, Default, Clone, PartialEq, Eq)] -pub struct PlainDate { - pub(crate) iso: IsoDate, - calendar: Calendar, -} - -impl core::fmt::Display for PlainDate { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - f.write_str(&self.to_ixdtf_string(DisplayCalendar::Auto)) - } -} - -// ==== Private API ==== - -impl PlainDate { - /// Create a new `PlainDate` with the date values and calendar slot. - #[inline] - #[must_use] - pub(crate) fn new_unchecked(iso: IsoDate, calendar: Calendar) -> Self { - Self { iso, calendar } - } - - // Updated: 2025-08-03 - /// Returns the date after adding the given duration to date. - /// - /// 3.5.14 `AddDurationToDate` - /// - /// More information: - /// - /// - [AO specification](https://tc39.es/proposal-temporal/#sec-temporal-adddurationtodate) - #[inline] - pub(crate) fn add_duration_to_date( - &self, - duration: &Duration, - overflow: Option, - ) -> TemporalResult { - // 3. If operation is subtract, set duration to CreateNegatedTemporalDuration(duration). - // 4. Let dateDuration be ToDateDurationRecordWithoutTime(duration). - // TODO: Look into why this is fallible, and make some adjustments - let date_duration = duration.to_date_duration_record_without_time()?; - // 5. Let resolvedOptions be ? GetOptionsObject(options). - // 6. Let overflow be ? GetTemporalOverflowOption(resolvedOptions). - let overflow = overflow.unwrap_or(Overflow::Constrain); - // 7. Let result be ? CalendarDateAdd(calendar, temporalDate.[[ISODate]], dateDuration, overflow). - // 8. Return ! CreateTemporalDate(result, calendar). - self.calendar() - .date_add(&self.iso, &date_duration, overflow) - } - - /// Returns a duration representing the difference between the dates one and two. - /// - /// Temporal Equivalent: 3.5.6 `DifferenceDate ( calendar, one, two, options )` - #[inline] - pub(crate) fn internal_diff_date( - &self, - other: &Self, - largest_unit: Unit, - ) -> TemporalResult { - if self.iso.year == other.iso.year - && self.iso.month == other.iso.month - && self.iso.day == other.iso.day - { - return Ok(Duration::default()); - } - - if largest_unit == Unit::Day { - let days = self.days_until(other); - return Ok(Duration::from(DateDuration::new(0, 0, 0, days.into())?)); - } - - self.calendar() - .date_until(&self.iso, &other.iso, largest_unit) - } - - /// Equivalent: DifferenceTemporalPlainDate - pub(crate) fn diff_date( - &self, - op: DifferenceOperation, - other: &Self, - settings: DifferenceSettings, - ) -> TemporalResult { - // 1. If operation is SINCE, let sign be -1. Otherwise, let sign be 1. - // 2. Set other to ? ToTemporalDate(other). - - // 3. If ? CalendarEquals(temporalDate.[[Calendar]], other.[[Calendar]]) is false, throw a RangeError exception. - if self.calendar().identifier() != other.calendar().identifier() { - return Err(TemporalError::range() - .with_message("Calendars are for difference operation are not the same.")); - } - - // 4. Let resolvedOptions be ? SnapshotOwnProperties(? GetOptionsObject(options), null). - // 5. Let settings be ? GetDifferenceSettings(operation, resolvedOptions, DATE, « », "day", "day"). - let resolved = ResolvedRoundingOptions::from_diff_settings( - settings, - op, - UnitGroup::Date, - Unit::Day, - Unit::Day, - )?; - - // 6. If temporalDate.[[ISOYear]] = other.[[ISOYear]], and temporalDate.[[ISOMonth]] = other.[[ISOMonth]], - // and temporalDate.[[ISODay]] = other.[[ISODay]], then - if self.iso == other.iso { - // a. Return ! CreateTemporalDuration(0, 0, 0, 0, 0, 0, 0, 0, 0, 0). - return Ok(Duration::default()); - } - - // 7. Let calendarRec be ? CreateCalendarMethodsRecord(temporalDate.[[Calendar]], « DATE-ADD, DATE-UNTIL »). - // 8. Perform ! CreateDataPropertyOrThrow(resolvedOptions, "largestUnit", settings.[[LargestUnit]]). - // 9. Let result be ? DifferenceDate(calendarRec, temporalDate, other, resolvedOptions). - let result = self.internal_diff_date(other, resolved.largest_unit)?; - - // 10. Let duration be ! CreateNormalizedDurationRecord(result.[[Years]], result.[[Months]], result.[[Weeks]], result.[[Days]], ZeroTimeDuration()). - let mut duration = InternalDurationRecord::from_date_duration(result.date())?; - // 11. If settings.[[SmallestUnit]] is "day" and settings.[[RoundingIncrement]] = 1, let roundingGranularityIsNoop be true; else let roundingGranularityIsNoop be false. - let rounding_granularity_is_noop = - resolved.smallest_unit == Unit::Day && resolved.increment.get() == 1; - // 12. If roundingGranularityIsNoop is false, then - if !rounding_granularity_is_noop { - let iso_date_time = IsoDateTime::new_unchecked(self.iso, IsoTime::default()); - let origin_epoch_ns = iso_date_time.as_nanoseconds(); - // a. Let destEpochNs be GetUTCEpochNanoseconds(other.[[ISOYear]], other.[[ISOMonth]], other.[[ISODay]], 0, 0, 0, 0, 0, 0). - let dest_epoch_ns = other.iso.as_nanoseconds(); - // b. Let dateTime be ISO Date-Time Record { [[Year]]: temporalDate.[[ISOYear]], [[Month]]: temporalDate.[[ISOMonth]], [[Day]]: temporalDate.[[ISODay]], [[Hour]]: 0, [[Minute]]: 0, [[Second]]: 0, [[Millisecond]]: 0, [[Microsecond]]: 0, [[Nanosecond]]: 0 }. - let dt = PlainDateTime::new_unchecked(iso_date_time, self.calendar.clone()); - // c. Set duration to ? RoundRelativeDuration(duration, destEpochNs, dateTime, calendarRec, unset, settings.[[LargestUnit]], settings.[[RoundingIncrement]], settings.[[SmallestUnit]], settings.[[RoundingMode]]). - duration = duration.round_relative_duration( - origin_epoch_ns, - dest_epoch_ns.0, - &dt, - Option::<(&TimeZone, &NeverProvider)>::None, - resolved, - )? - } - let result = Duration::from_internal(duration, Unit::Day)?; - // 13. Return ! CreateTemporalDuration(sign × duration.[[Years]], sign × duration.[[Months]], sign × duration.[[Weeks]], sign × duration.[[Days]], 0, 0, 0, 0, 0, 0). - match op { - DifferenceOperation::Until => Ok(result), - DifferenceOperation::Since => Ok(result.negated()), - } - } - - /// Abstract operation `DaysUntil` - /// - /// Calculates the epoch days between two `PlainDate`s - #[inline] - #[must_use] - fn days_until(&self, other: &Self) -> i32 { - // NOTE: cast to i32 is safe as both IsoDates must be in valid range. - debug_assert!(self.iso.check_within_limits().is_ok()); - debug_assert!(other.iso.check_within_limits().is_ok()); - (other.iso.to_epoch_days() - self.iso.to_epoch_days()) as i32 - } - - /// Returns this `PlainDate`'s ISO year value. - #[inline] - #[must_use] - pub(crate) const fn iso_year(&self) -> i32 { - self.iso.year - } - - /// Returns this `PlainDate`'s ISO month value. - #[inline] - #[must_use] - pub(crate) const fn iso_month(&self) -> u8 { - self.iso.month - } - - /// Returns this `PlainDate`'s ISO day value. - #[inline] - #[must_use] - pub(crate) const fn iso_day(&self) -> u8 { - self.iso.day - } -} - -// ==== Public API ==== - -impl PlainDate { - /// Creates a new `PlainDate` automatically constraining any values that may be invalid. - #[inline] - pub fn new(year: i32, month: u8, day: u8, calendar: Calendar) -> TemporalResult { - Self::new_with_overflow(year, month, day, calendar, Overflow::Constrain) - } - - /// Creates a new `PlainDate` with an ISO 8601 calendar automatically constraining any - /// values that may be invalid into a valid range. - #[inline] - pub fn new_iso(year: i32, month: u8, day: u8) -> TemporalResult { - Self::new(year, month, day, Calendar::default()) - } - - /// Creates a new `PlainDate` rejecting any date that may be invalid. - #[inline] - pub fn try_new(year: i32, month: u8, day: u8, calendar: Calendar) -> TemporalResult { - Self::new_with_overflow(year, month, day, calendar, Overflow::Reject) - } - - /// Creates a new `PlainDate` with an ISO 8601 calendar rejecting any date that may be invalid. - #[inline] - pub fn try_new_iso(year: i32, month: u8, day: u8) -> TemporalResult { - Self::try_new(year, month, day, Calendar::default()) - } - - /// Creates a new `PlainDate` with the specified overflow. - /// - /// This operation is the public facing API to Temporal's `RegulateIsoDate` - #[inline] - pub fn new_with_overflow( - year: i32, - month: u8, - day: u8, - calendar: Calendar, - overflow: Overflow, - ) -> TemporalResult { - let iso = IsoDate::new_with_overflow(year, month, day, overflow)?; - Ok(Self::new_unchecked(iso, calendar)) - } - - /// Create a `PlainDate` from a `PartialDate` - /// - /// ```rust - /// use temporal_rs::{PlainDate, fields::CalendarFields, Calendar, partial::PartialDate}; - /// - /// let partial = PartialDate { - /// calendar_fields: CalendarFields::new() - /// .with_year(2000) - /// .with_month(13) - /// .with_day(2), - /// calendar: Calendar::ISO, - /// }; - /// - /// let date = PlainDate::from_partial(partial, None).unwrap(); - /// - /// assert_eq!(date.year(), 2000); - /// assert_eq!(date.month(), 12); - /// assert_eq!(date.day(), 2); - /// assert_eq!(date.calendar().identifier(), "iso8601"); - /// - /// ``` - #[inline] - pub fn from_partial(partial: PartialDate, overflow: Option) -> TemporalResult { - let year_check = partial.calendar_fields.year.is_some() - || (partial.calendar_fields.era.is_some() - && partial.calendar_fields.era_year.is_some()); - let month_check = - partial.calendar_fields.month.is_some() || partial.calendar_fields.month_code.is_some(); - if !year_check || !month_check || partial.calendar_fields.day.is_none() { - return Err(TemporalError::r#type().with_message("Invalid PlainDate fields provided.")); - } - - let overflow = overflow.unwrap_or_default(); - partial - .calendar - .date_from_fields(partial.calendar_fields, overflow) - } - - /// Converts a UTF-8 encoded string into a `PlainDate`. - pub fn from_utf8(s: &[u8]) -> TemporalResult { - let parsed = ParsedDate::from_utf8(s)?; - - Self::from_parsed(parsed) - } - - /// Creates a `PlainDate` from a [`ParsedDate`]. - pub fn from_parsed(parsed: ParsedDate) -> TemporalResult { - Self::try_new( - parsed.record.year, - parsed.record.month, - parsed.record.day, - Calendar::new(parsed.calendar), - ) - } - - /// Creates a `PlainDate` with values from a [`PartialDate`]. - pub fn with(&self, fields: CalendarFields, overflow: Option) -> TemporalResult { - if fields.is_empty() { - return Err(TemporalError::r#type().with_enum(ErrorMessage::EmptyFieldsIsInvalid)); - } - // 6. Let fieldsResult be ? PrepareCalendarFieldsAndFieldNames(calendarRec, temporalDate, « "day", "month", "monthCode", "year" »). - // 7. Let partialDate be ? PrepareTemporalFields(temporalDateLike, fieldsResult.[[FieldNames]], partial). - // 8. Let fields be ? CalendarMergeFields(calendarRec, fieldsResult.[[Fields]], partialDate). - // 9. Set fields to ? PrepareTemporalFields(fields, fieldsResult.[[FieldNames]], «»). - // 10. Return ? CalendarDateFromFields(calendarRec, fields, resolvedOptions). - let overflow = overflow.unwrap_or(Overflow::Constrain); - self.calendar.date_from_fields( - fields.with_fallback_date(self, self.calendar.kind())?, - overflow, - ) - } - - /// Creates a new `PlainDate` from the current `PlainDate` and the provided calendar. - pub fn with_calendar(&self, calendar: Calendar) -> Self { - Self::new_unchecked(self.iso, calendar) - } - - #[inline] - #[must_use] - /// Returns a reference to this `PlainDate`'s calendar slot. - pub fn calendar(&self) -> &Calendar { - &self.calendar - } - - /// 3.5.7 `IsValidISODate` - /// - /// Checks if the current date is a valid `ISODate`. - #[must_use] - pub fn is_valid(&self) -> bool { - self.iso.is_valid() - } - - /// Compares one `PlainDate` to another `PlainDate` using their - /// `IsoDate` representation. - /// - /// # Note on Ordering. - /// - /// `temporal_rs` does not implement `PartialOrd`/`Ord` as `PlainDate` does - /// not fulfill all the conditions required to implement the traits. However, - /// it is possible to compare `PlainDate`'s as their `IsoDate` representation. - #[inline] - #[must_use] - pub fn compare_iso(&self, other: &Self) -> Ordering { - self.iso.cmp(&other.iso) - } - - #[inline] - /// Adds a [`Duration`] to the current `PlainDate`. - pub fn add(&self, duration: &Duration, overflow: Option) -> TemporalResult { - self.add_duration_to_date(duration, overflow) - } - - #[inline] - /// Subtracts a [`Duration`] from the current `PlainDate`. - pub fn subtract( - &self, - duration: &Duration, - overflow: Option, - ) -> TemporalResult { - self.add_duration_to_date(&duration.negated(), overflow) - } - - #[inline] - /// Returns a [`Duration`] representing the time from this `PlainDate` until the other `PlainDate`. - pub fn until(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { - self.diff_date(DifferenceOperation::Until, other, settings) - } - - #[inline] - /// Returns a [`Duration`] representing the time passed from this `PlainDate` since the other `PlainDate`. - pub fn since(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { - self.diff_date(DifferenceOperation::Since, other, settings) - } -} - -// ==== Calendar-derived Public API ==== - -impl PlainDate { - /// Returns the calendar year value. - pub fn year(&self) -> i32 { - self.calendar.year(&self.iso) - } - - /// Returns the calendar month value. - pub fn month(&self) -> u8 { - self.calendar.month(&self.iso) - } - - /// Returns the calendar month code value. - pub fn month_code(&self) -> MonthCode { - self.calendar.month_code(&self.iso) - } - - /// Returns the calendar day value. - pub fn day(&self) -> u8 { - self.calendar.day(&self.iso) - } - - /// Returns the calendar day of week value. - pub fn day_of_week(&self) -> u16 { - self.calendar.day_of_week(&self.iso) - } - - /// Returns the calendar day of year value. - pub fn day_of_year(&self) -> u16 { - self.calendar.day_of_year(&self.iso) - } - - /// Returns the calendar week of year value. - pub fn week_of_year(&self) -> Option { - self.calendar.week_of_year(&self.iso) - } - - /// Returns the calendar year of week value. - pub fn year_of_week(&self) -> Option { - self.calendar.year_of_week(&self.iso) - } - - /// Returns the calendar days in week value. - pub fn days_in_week(&self) -> u16 { - self.calendar.days_in_week(&self.iso) - } - - /// Returns the calendar days in month value. - pub fn days_in_month(&self) -> u16 { - self.calendar.days_in_month(&self.iso) - } - - /// Returns the calendar days in year value. - pub fn days_in_year(&self) -> u16 { - self.calendar.days_in_year(&self.iso) - } - - /// Returns the calendar months in year value. - pub fn months_in_year(&self) -> u16 { - self.calendar.months_in_year(&self.iso) - } - - /// Returns whether the `PlainDate` is in a leap year for the given calendar. - pub fn in_leap_year(&self) -> bool { - self.calendar.in_leap_year(&self.iso) - } - - /// Returns the era current `PlainDate`. - pub fn era(&self) -> Option> { - self.calendar.era(&self.iso) - } - - /// Returns the era year for the current `PlainDate`. - pub fn era_year(&self) -> Option { - self.calendar.era_year(&self.iso) - } -} - -// ==== ToX Methods ==== - -impl PlainDate { - /// Converts the current `PlainDate` into a [`PlainDateTime`]. - /// - /// # Notes - /// - /// If no time is provided, then the time will default to midnight. - #[inline] - pub fn to_plain_date_time(&self, time: Option) -> TemporalResult { - let time = time.unwrap_or_default(); - let iso = IsoDateTime::new(self.iso, time.iso)?; - Ok(PlainDateTime::new_unchecked(iso, self.calendar().clone())) - } - - /// Converts the current `PlainDate` into a [`PlainYearMonth`]. - #[inline] - pub fn to_plain_year_month(&self) -> TemporalResult { - let era = self - .era() - .map(|e| { - TinyAsciiStr::<19>::try_from_utf8(e.as_bytes()) - .map_err(|_| TemporalError::general("Parsing era failed")) - }) - .transpose()?; - let fields = YearMonthCalendarFields::new() - .with_year(self.year()) - .with_era(era) - .with_era_year(self.era_year()) - .with_month(self.month()) - .with_month_code(self.month_code()); - self.calendar() - .year_month_from_fields(fields, Overflow::Constrain) - } - - /// Converts the current `PlainDate` into a [`PlainMonthDay`]. - #[inline] - pub fn to_plain_month_day(&self) -> TemporalResult { - let overflow = Overflow::Constrain; - self.calendar().month_day_from_fields( - CalendarFields::default().with_fallback_date(self, self.calendar.kind())?, - overflow, - ) - } - - #[inline] - pub fn to_ixdtf_string(&self, display_calendar: DisplayCalendar) -> String { - self.to_ixdtf_writeable(display_calendar) - .write_to_string() - .into() - } - - #[inline] - pub fn to_ixdtf_writeable(&self, display_calendar: DisplayCalendar) -> impl Writeable + '_ { - IxdtfStringBuilder::default() - .with_date(self.iso) - .with_calendar(self.calendar.identifier(), display_calendar) - .build() - } - - /// Creates a [`ZonedDateTime`] from the current `PlainDate` with a provided [`TimeZone`] and - /// optional [`PlainTime`]. - #[inline] - pub fn to_zoned_date_time_with_provider( - &self, - time_zone: TimeZone, - plain_time: Option, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - // NOTE (nekevss): Steps 1-4 are engine specific - let epoch_ns = if let Some(time) = plain_time { - // 6. Else, - // a. Set temporalTime to ? ToTemporalTime(temporalTime). - // b. Let isoDateTime be CombineISODateAndTimeRecord(temporalDate.[[ISODate]], temporalTime.[[Time]]). - // c. If ISODateTimeWithinLimits(isoDateTime) is false, throw a RangeError exception. - let result_iso = IsoDateTime::new(self.iso, time.iso)?; - // d. Let epochNs be ? GetEpochNanosecondsFor(timeZone, isoDateTime, compatible). - time_zone.get_epoch_nanoseconds_for(result_iso, Disambiguation::Compatible, provider)? - // 5. If temporalTime is undefined, then - } else { - // a. Let epochNs be ? GetStartOfDay(timeZone, temporalDate.[[ISODate]]). - time_zone.get_start_of_day(&self.iso, provider)? - }; - // 7. Return ! CreateTemporalZonedDateTime(epochNs, timeZone, temporalDate.[[Calendar]]). - ZonedDateTime::try_new_with_cached_offset( - epoch_ns.ns.0, - time_zone, - self.calendar.clone(), - epoch_ns.offset, - ) - } - - /// Gets the EpochNanoseconds represented by this PlainDate - /// (using noon time, and UTC timezone) - /// - // Useful for implementing HandleDateTimeTemporalYearMonth - pub fn epoch_ns_for_utc(&self) -> EpochNanoseconds { - // 2. Let isoDateTime be CombineISODateAndTimeRecord(temporalYearMonth.[[ISODate]], NoonTimeRecord()). - let iso = IsoDateTime::new(self.iso, IsoTime::noon()); - debug_assert!(iso.is_ok()); - // 3. Let epochNs be ? GetUTCEpochNanoseconds(isoDateTime). - iso.unwrap_or_default().as_nanoseconds() - } -} - -// ==== Trait impls ==== - -impl From for PlainDate { - fn from(pdt: PlainDateTime) -> Self { - pdt.to_plain_date() - } -} - -impl FromStr for PlainDate { - type Err = TemporalError; - - fn from_str(s: &str) -> Result { - Self::from_utf8(s.as_bytes()) - } -} - -#[cfg(test)] -mod tests { - use tinystr::tinystr; - - use crate::options::{RoundingIncrement, RoundingMode}; - - use super::*; - - #[test] - fn new_date_limits() { - let err = PlainDate::try_new(-271_821, 4, 18, Calendar::default()); - assert!(err.is_err()); - let err = PlainDate::try_new(275_760, 9, 14, Calendar::default()); - assert!(err.is_err()); - let ok = PlainDate::try_new(-271_821, 4, 19, Calendar::default()); - assert_eq!( - ok, - Ok(PlainDate { - iso: IsoDate { - year: -271_821, - month: 4, - day: 19, - }, - calendar: Calendar::default(), - }) - ); - - let ok = PlainDate::try_new(275_760, 9, 13, Calendar::default()); - assert_eq!( - ok, - Ok(PlainDate { - iso: IsoDate { - year: 275760, - month: 9, - day: 13, - }, - calendar: Calendar::default(), - }) - ); - } - - #[test] - fn simple_date_add() { - let base = PlainDate::from_str("1976-11-18").unwrap(); - - // Test 1 - let result = base - .add(&Duration::from_str("P43Y").unwrap(), None) - .unwrap(); - assert_eq!( - result.iso, - IsoDate { - year: 2019, - month: 11, - day: 18, - } - ); - - // Test 2 - let result = base.add(&Duration::from_str("P3M").unwrap(), None).unwrap(); - assert_eq!( - result.iso, - IsoDate { - year: 1977, - month: 2, - day: 18, - } - ); - - // Test 3 - let result = base - .add(&Duration::from_str("P20D").unwrap(), None) - .unwrap(); - assert_eq!( - result.iso, - IsoDate { - year: 1976, - month: 12, - day: 8, - } - ) - } - - #[test] - fn date_add_limits() { - let max = PlainDate::try_new(275_760, 9, 13, Calendar::default()).unwrap(); - let result = max.add(&Duration::from_str("P1D").unwrap(), None); - assert!(result.is_err()); - - let max = PlainDate::try_new(275_760, 9, 12, Calendar::default()).unwrap(); - let result = max.add(&Duration::from_str("P1D").unwrap(), None); - assert_eq!( - result, - Ok(PlainDate { - iso: IsoDate { - year: 275760, - month: 9, - day: 13 - }, - calendar: Calendar::default(), - }) - ); - - let min = PlainDate::try_new(-271_821, 4, 19, Calendar::default()).unwrap(); - let result = min.add(&Duration::from_str("-P1D").unwrap(), None); - assert!(result.is_err()); - - let min = PlainDate::try_new(-271_821, 4, 20, Calendar::default()).unwrap(); - let result = min.add(&Duration::from_str("-P1D").unwrap(), None); - assert_eq!( - result, - Ok(PlainDate { - iso: IsoDate { - year: -271_821, - month: 4, - day: 19 - }, - calendar: Calendar::default(), - }) - ); - } - - #[test] - fn simple_date_subtract() { - let base = PlainDate::from_str("2019-11-18").unwrap(); - - // Test 1 - let result = base - .subtract(&Duration::from_str("P43Y").unwrap(), None) - .unwrap(); - assert_eq!( - result.iso, - IsoDate { - year: 1976, - month: 11, - day: 18, - } - ); - - // Test 2 - let result = base - .subtract(&Duration::from_str("P11M").unwrap(), None) - .unwrap(); - assert_eq!( - result.iso, - IsoDate { - year: 2018, - month: 12, - day: 18, - } - ); - - // Test 3 - let result = base - .subtract(&Duration::from_str("P20D").unwrap(), None) - .unwrap(); - assert_eq!( - result.iso, - IsoDate { - year: 2019, - month: 10, - day: 29, - } - ) - } - - #[test] - fn simple_date_until() { - let earlier = PlainDate::from_str("1969-07-24").unwrap(); - let later = PlainDate::from_str("1969-10-05").unwrap(); - let result = earlier - .until(&later, DifferenceSettings::default()) - .unwrap(); - assert_eq!(result.days(), 73,); - - let later = PlainDate::from_str("1996-03-03").unwrap(); - let result = earlier - .until(&later, DifferenceSettings::default()) - .unwrap(); - assert_eq!(result.days(), 9719,); - } - - #[test] - fn simple_date_since() { - let earlier = PlainDate::from_str("1969-07-24").unwrap(); - let later = PlainDate::from_str("1969-10-05").unwrap(); - let result = later - .since(&earlier, DifferenceSettings::default()) - .unwrap(); - assert_eq!(result.days(), 73,); - - let later = PlainDate::from_str("1996-03-03").unwrap(); - let result = later - .since(&earlier, DifferenceSettings::default()) - .unwrap(); - assert_eq!(result.days(), 9719,); - } - - #[test] - fn date_with_empty_error() { - let base = PlainDate::new(1976, 11, 18, Calendar::default()).unwrap(); - - let err = base.with(CalendarFields::default(), None); - assert!(err.is_err()); - } - - #[test] - fn basic_date_with() { - let base = PlainDate::new(1976, 11, 18, Calendar::default()).unwrap(); - - // Year - let fields = CalendarFields::new().with_year(2019); - let with_year = base.with(fields, None).unwrap(); - assert_eq!(with_year.year(), 2019); - assert_eq!(with_year.month(), 11); - assert_eq!(with_year.month_code(), MonthCode::from_str("M11").unwrap()); - assert_eq!(with_year.day(), 18); - - // Month - let fields = CalendarFields::new().with_month(5); - let with_month = base.with(fields, None).unwrap(); - assert_eq!(with_month.year(), 1976); - assert_eq!(with_month.month(), 5); - assert_eq!(with_month.month_code(), MonthCode::from_str("M05").unwrap()); - assert_eq!(with_month.day(), 18); - - // Month Code - let fields = CalendarFields::new().with_month_code(MonthCode(tinystr!(4, "M05"))); - let with_mc = base.with(fields, None).unwrap(); - assert_eq!(with_mc.year(), 1976); - assert_eq!(with_mc.month(), 5); - assert_eq!(with_mc.month_code(), MonthCode::from_str("M05").unwrap()); - assert_eq!(with_mc.day(), 18); - - // Day - let fields = CalendarFields::new().with_day(17); - let with_day = base.with(fields, None).unwrap(); - assert_eq!(with_day.year(), 1976); - assert_eq!(with_day.month(), 11); - assert_eq!(with_day.month_code(), MonthCode::from_str("M11").unwrap()); - assert_eq!(with_day.day(), 17); - } - - // test toZonedDateTime - #[cfg(feature = "tzdb")] - #[test] - fn to_zoned_date_time() { - use timezone_provider::tzif::FsTzdbProvider; - let provider = &FsTzdbProvider::default(); - let date = PlainDate::from_str("2020-01-01").unwrap(); - let time_zone = TimeZone::try_from_str_with_provider("UTC", provider).unwrap(); - let zdt = date - .to_zoned_date_time_with_provider(time_zone, None, provider) - .unwrap(); - assert_eq!(zdt.year(), 2020); - assert_eq!(zdt.month(), 1); - assert_eq!(zdt.day(), 1); - assert_eq!(zdt.hour(), 0); - assert_eq!(zdt.minute(), 0); - assert_eq!(zdt.second(), 0); - assert_eq!(zdt.millisecond(), 0); - assert_eq!(zdt.microsecond(), 0); - assert_eq!(zdt.nanosecond(), 0); - } - - #[cfg(feature = "tzdb")] - #[test] - fn to_zoned_date_time_error() { - use timezone_provider::tzif::FsTzdbProvider; - let provider = &FsTzdbProvider::default(); - let date = PlainDate::try_new_iso(-271_821, 4, 19).unwrap(); - let time_zone = TimeZone::try_from_str_with_provider("+00", provider).unwrap(); - let zdt = date.to_zoned_date_time_with_provider(time_zone, None, provider); - assert!(zdt.is_err()) - } - - // test262/test/built-ins/Temporal/Calendar/prototype/month/argument-string-invalid.js - #[test] - fn invalid_strings() { - const INVALID_STRINGS: &[&str] = &[ - // invalid ISO strings: - "", - "invalid iso8601", - "2020-01-00", - "2020-01-32", - "2020-02-30", - "2021-02-29", - "2020-00-01", - "2020-13-01", - "2020-01-01T", - "2020-01-01T25:00:00", - "2020-01-01T01:60:00", - "2020-01-01T01:60:61", - "2020-01-01junk", - "2020-01-01T00:00:00junk", - "2020-01-01T00:00:00+00:00junk", - "2020-01-01T00:00:00+00:00[UTC]junk", - "2020-01-01T00:00:00+00:00[UTC][u-ca=iso8601]junk", - "02020-01-01", - "2020-001-01", - "2020-01-001", - "2020-01-01T001", - "2020-01-01T01:001", - "2020-01-01T01:01:001", - // valid, but forms not supported in Temporal: - "2020-W01-1", - "2020-001", - "+0002020-01-01", - // valid, but this calendar must not exist: - "2020-01-01[u-ca=notexist]", - // may be valid in other contexts, but insufficient information for PlainDate: - "2020-01", - "+002020-01", - "01-01", - "2020-W01", - "P1Y", - "-P12Y", - // valid, but outside the supported range: - "-999999-01-01", - "+999999-01-01", - // built-ins/Temporal/PlainDate/from/argument-string-too-many-decimals - "1970-01-01T00:00:00.1234567891", - "1970-01-01T00:00:00.1234567890", - "1970-01-01T00+00:00:00.1234567891", - "1970-01-01T00+00:00:00.1234567890", - ]; - for s in INVALID_STRINGS { - assert!(PlainDate::from_str(s).is_err(), "{} should not parse", s) - } - } - - // test262/test/built-ins/Temporal/Calendar/prototype/day/argument-string-critical-unknown-annotation.js - #[test] - fn argument_string_critical_unknown_annotation() { - const INVALID_STRINGS: [&str; 6] = [ - "1970-01-01[!foo=bar]", - "1970-01-01T00:00[!foo=bar]", - "1970-01-01T00:00[UTC][!foo=bar]", - "1970-01-01T00:00[u-ca=iso8601][!foo=bar]", - "1970-01-01T00:00[UTC][!foo=bar][u-ca=iso8601]", - "1970-01-01T00:00[foo=bar][!_foo-bar0=Dont-Ignore-This-99999999999]", - ]; - for s in INVALID_STRINGS { - assert!(PlainDate::from_str(s).is_err()) - } - } - - #[test] - fn rounding_increment_observed() { - let earlier = PlainDate::try_new_iso(2019, 1, 8).unwrap(); - let later = PlainDate::try_new_iso(2021, 9, 7).unwrap(); - - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Year), - rounding_mode: Some(RoundingMode::HalfExpand), - increment: Some(RoundingIncrement::try_new(4).unwrap()), - ..Default::default() - }; - let result = later.since(&earlier, settings).unwrap(); - assert_eq!(result.years(), 4); - - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Month), - rounding_mode: Some(RoundingMode::HalfExpand), - increment: Some(RoundingIncrement::try_new(10).unwrap()), - ..Default::default() - }; - let result = later.since(&earlier, settings).unwrap(); - assert_eq!(result.months(), 30); - - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Week), - rounding_mode: Some(RoundingMode::HalfExpand), - increment: Some(RoundingIncrement::try_new(12).unwrap()), - ..Default::default() - }; - let result = later.since(&earlier, settings).unwrap(); - assert_eq!(result.weeks(), 144); - - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Day), - rounding_mode: Some(RoundingMode::HalfExpand), - increment: Some(RoundingIncrement::try_new(100).unwrap()), - ..Default::default() - }; - let result = later.since(&earlier, settings).unwrap(); - assert_eq!(result.days(), 1000); - } -} diff --git a/src/builtins/core/plain_date_time.rs b/src/builtins/core/plain_date_time.rs deleted file mode 100644 index 102d54c36..000000000 --- a/src/builtins/core/plain_date_time.rs +++ /dev/null @@ -1,1582 +0,0 @@ -//! This module implements `PlainDateTime` any directly related algorithms. - -use super::{ - duration::normalized::InternalDurationRecord, Duration, PartialTime, PlainDate, PlainTime, - ZonedDateTime, -}; -use crate::error::ErrorMessage; -use crate::parsed_intermediates::ParsedDateTime; -use crate::{ - builtins::{ - calendar::CalendarFields, - core::{calendar::Calendar, Instant}, - }, - iso::{IsoDate, IsoDateTime, IsoTime}, - options::{ - DifferenceOperation, DifferenceSettings, Disambiguation, DisplayCalendar, Overflow, - ResolvedRoundingOptions, RoundingOptions, ToStringRoundingOptions, Unit, UnitGroup, - }, - parsers::IxdtfStringBuilder, - primitive::FiniteF64, - provider::{NeverProvider, TimeZoneProvider}, - unix_time::EpochNanoseconds, - MonthCode, TemporalError, TemporalResult, TimeZone, -}; -use alloc::string::String; -use core::{cmp::Ordering, str::FromStr}; -use tinystr::TinyAsciiStr; -use writeable::Writeable; - -/// A partial PlainDateTime record -#[derive(Debug, Default, Clone)] -pub struct PartialDateTime { - /// The `PartialDate` portion of a `PartialDateTime` - pub fields: DateTimeFields, - /// The calendar of the `PartialDateTime`. - pub calendar: Calendar, -} - -#[derive(Debug, Default, Clone)] -pub struct DateTimeFields { - pub calendar_fields: CalendarFields, - pub time: PartialTime, -} - -impl DateTimeFields { - pub fn is_empty(&self) -> bool { - self.calendar_fields.is_empty() && self.time.is_empty() - } -} - -impl DateTimeFields { - pub const fn new() -> Self { - Self { - calendar_fields: CalendarFields::new(), - time: PartialTime::new(), - } - } - - pub const fn with_partial_date(mut self, fields: CalendarFields) -> Self { - self.calendar_fields = fields; - self - } - - pub const fn with_partial_time(mut self, partial_time: PartialTime) -> Self { - self.time = partial_time; - self - } -} - -/// The native Rust implementation of a Temporal `PlainDateTime`. -/// -/// Combines a date and time into a single value representing a specific moment -/// in calendar time, such as "2024-03-15T14:30:45". Unlike `Instant`, -/// a `PlainDateTime` does not include timezone information. -/// -/// Use `PlainDateTime` when you need to represent a specific date and time but -/// timezone handling is not required, or when working with local times that -/// don't need to be converted across timezones. -/// -/// ## Examples -/// -/// ### Creating date and time values -/// -/// ```rust -/// use temporal_rs::PlainDateTime; -/// use core::str::FromStr; -/// -/// // Create a specific date and time from IXDTF string -/// let meeting = PlainDateTime::from_str("2024-03-15T14:30:45.123456789").unwrap(); -/// assert_eq!(meeting.year(), 2024); -/// assert_eq!(meeting.hour(), 14); -/// assert_eq!(meeting.minute(), 30); -/// ``` -/// -/// ### Parsing ISO 8601 datetime strings -/// -/// ```rust -/// use temporal_rs::PlainDateTime; -/// use core::str::FromStr; -/// -/// let dt = PlainDateTime::from_str("2024-03-15T14:30:45.123456789").unwrap(); -/// assert_eq!(dt.year(), 2024); -/// assert_eq!(dt.month(), 3); -/// assert_eq!(dt.day(), 15); -/// assert_eq!(dt.hour(), 14); -/// assert_eq!(dt.minute(), 30); -/// assert_eq!(dt.second(), 45); -/// assert_eq!(dt.millisecond(), 123); -/// assert_eq!(dt.microsecond(), 456); -/// assert_eq!(dt.nanosecond(), 789); -/// ``` -/// -/// ### DateTime arithmetic -/// -/// ```rust -/// use temporal_rs::{PlainDateTime, Duration}; -/// use core::str::FromStr; -/// -/// let dt = PlainDateTime::from_str("2024-01-15T12:00:00").unwrap(); -/// -/// // Add duration -/// let later = dt.add(&Duration::from_str("P1M2DT3H4M").unwrap(), None).unwrap(); -/// assert_eq!(later.month(), 2); -/// assert_eq!(later.day(), 17); -/// assert_eq!(later.hour(), 15); -/// assert_eq!(later.minute(), 4); -/// -/// // Calculate difference -/// let earlier = PlainDateTime::from_str("2024-01-10T10:30:00").unwrap(); -/// let duration = earlier.until(&dt, Default::default()).unwrap(); -/// assert_eq!(duration.days(), 5); -/// assert_eq!(duration.hours(), 1); -/// assert_eq!(duration.minutes(), 30); -/// ``` -/// -/// ### Working with partial fields -/// -/// ```rust -/// use temporal_rs::{PlainDateTime, fields::DateTimeFields, partial::PartialTime}; -/// use core::str::FromStr; -/// -/// let dt = PlainDateTime::from_str("2024-01-15T12:30:45").unwrap(); -/// -/// // Change only the hour -/// let fields = DateTimeFields::new().with_partial_time(PartialTime::new().with_hour(Some(18))); -/// let modified = dt.with(fields, None).unwrap(); -/// assert_eq!(modified.hour(), 18); -/// assert_eq!(modified.minute(), 30); // unchanged -/// assert_eq!(modified.second(), 45); // unchanged -/// ``` -/// -/// ### Converting to other types -/// -/// ```rust -/// use temporal_rs::{PlainDateTime, PlainTime}; -/// use core::str::FromStr; -/// -/// let dt = PlainDateTime::from_str("2024-03-15T14:30:45").unwrap(); -/// -/// // Extract date component -/// let date = dt.to_plain_date(); -/// assert_eq!(date.year(), 2024); -/// assert_eq!(date.month(), 3); -/// assert_eq!(date.day(), 15); -/// -/// // Extract time component -/// let time = dt.to_plain_time(); -/// assert_eq!(time.hour(), 14); -/// assert_eq!(time.minute(), 30); -/// assert_eq!(time.second(), 45); -/// ``` -/// -/// ## Reference -/// -/// For more information, see the [MDN documentation][mdn-datetime]. -/// -/// [mdn-datetime]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainDateTime -#[non_exhaustive] -#[derive(Debug, Default, Clone, PartialEq, Eq)] -pub struct PlainDateTime { - pub(crate) iso: IsoDateTime, - calendar: Calendar, -} - -impl core::fmt::Display for PlainDateTime { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - let string = - self.to_ixdtf_string(ToStringRoundingOptions::default(), DisplayCalendar::Auto); - - debug_assert!( - string.is_ok(), - "Duration must return a valid string with default options." - ); - - f.write_str(&string.map_err(|_| Default::default())?) - } -} - -// ==== Private PlainDateTime API ==== - -impl PlainDateTime { - /// Creates a new unchecked `PlainDateTime`. - #[inline] - #[must_use] - pub(crate) fn new_unchecked(iso: IsoDateTime, calendar: Calendar) -> Self { - Self { iso, calendar } - } - - // TODO: Potentially deprecate and remove. - /// Create a new `PlainDateTime` from an `Instant`. - #[allow(unused)] - #[inline] - pub(crate) fn from_instant(instant: &Instant, offset: i64, calendar: Calendar) -> Self { - let iso = IsoDateTime::from_epoch_nanos(instant.epoch_nanoseconds(), offset); - Self { iso, calendar } - } - - // 5.5.14 AddDurationToOrSubtractDurationFromPlainDateTime ( operation, dateTime, temporalDurationLike, options ) - fn add_or_subtract_duration( - &self, - duration: &Duration, - overflow: Option, - ) -> TemporalResult { - // SKIP: 1, 2, 3, 4 - // 5. Let internalDuration be ToInternalDurationRecordWith24HourDays(duration). - let internal_duration = InternalDurationRecord::from_duration_with_24_hour_days(duration)?; - // 6. Let timeResult be AddTime(dateTime.[[ISODateTime]].[[Time]], internalDuration.[[Time]]). - let (days, time_result) = self - .iso - .time - .add(internal_duration.normalized_time_duration()); - // 7. Let dateDuration be ? AdjustDateDurationRecord(internalDuration.[[Date]], timeResult.[[Days]]). - let date_duration = internal_duration.date().adjust(days, None, None)?; - // 8. Let addedDate be ? CalendarDateAdd(dateTime.[[Calendar]], dateTime.[[ISODateTime]].[[ISODate]], dateDuration, overflow). - let added_date = self.calendar().date_add( - &self.iso.date, - &date_duration, - overflow.unwrap_or(Overflow::Constrain), - )?; - // 9. Let result be CombineISODateAndTimeRecord(addedDate, timeResult). - let result = IsoDateTime::new(added_date.iso, time_result)?; - // 10. Return ? CreateTemporalDateTime(result, dateTime.[[Calendar]]). - Ok(Self::new_unchecked(result, self.calendar().clone())) - } - - /// Difference two `PlainDateTime`s together. - pub(crate) fn diff( - &self, - op: DifferenceOperation, - other: &Self, - settings: DifferenceSettings, - ) -> TemporalResult { - // 3. If ? CalendarEquals(dateTime.[[Calendar]], other.[[Calendar]]) is false, throw a RangeError exception. - if self.calendar != other.calendar { - return Err(TemporalError::range() - .with_message("Calendar must be the same when diffing two PlainDateTimes")); - } - - // 5. Let settings be ? GetDifferenceSettings(operation, resolvedOptions, datetime, « », "nanosecond", "day"). - let options = ResolvedRoundingOptions::from_diff_settings( - settings, - op, - UnitGroup::DateTime, - Unit::Day, - Unit::Nanosecond, - )?; - - // Step 7-8 combined. - if self.iso == other.iso { - return Ok(Duration::default()); - } - - // Step 10-11. - let norm_record = self.diff_dt_with_rounding(other, options)?; - - let result = Duration::from_internal(norm_record, options.largest_unit)?; - - // Step 12 - match op { - DifferenceOperation::Until => Ok(result), - DifferenceOperation::Since => Ok(result.negated()), - } - } - - // TODO: Figure out whether to handle resolvedOptions - // 5.5.12 DifferencePlainDateTimeWithRounding ( y1, mon1, d1, h1, min1, s1, ms1, mus1, ns1, y2, mon2, d2, h2, min2, s2, ms2, - // mus2, ns2, calendarRec, largestUnit, roundingIncrement, smallestUnit, roundingMode, resolvedOptions ) - pub(crate) fn diff_dt_with_rounding( - &self, - other: &Self, - options: ResolvedRoundingOptions, - ) -> TemporalResult { - // 1. If CompareISODateTime(y1, mon1, d1, h1, min1, s1, ms1, mus1, ns1, y2, mon2, d2, h2, min2, s2, ms2, mus2, ns2) = 0, then - if matches!(self.iso.cmp(&other.iso), Ordering::Equal) { - // a. Let durationRecord be CreateDurationRecord(0, 0, 0, 0, 0, 0, 0, 0, 0, 0). - // b. Return the Record { [[DurationRecord]]: durationRecord, [[Total]]: 0 }. - return Ok(InternalDurationRecord::default()); - } - // 2. If ISODateTimeWithinLimits(isoDateTime1) is false or ISODateTimeWithinLimits(isoDateTime2) is false, throw a RangeError exception. - self.iso.check_within_limits()?; - other.iso.check_within_limits()?; - - // 3. Let diff be DifferenceISODateTime(isoDateTime1, isoDateTime2, calendar, largestUnit). - let diff = self - .iso - .diff(&other.iso, &self.calendar, options.largest_unit)?; - // 4. If smallestUnit is nanosecond and roundingIncrement = 1, return diff. - if options.smallest_unit == Unit::Nanosecond && options.increment.get() == 1 { - return Ok(diff); - } - - // 5. Let destEpochNs be GetUTCEpochNanoseconds(isoDateTime2). - let dest_epoch_ns = other.iso.as_nanoseconds(); - // 6. Return ? RoundRelativeDuration(diff, destEpochNs, isoDateTime1, unset, calendar, largestUnit, roundingIncrement, smallestUnit, roundingMode). - diff.round_relative_duration( - self.iso.as_nanoseconds(), - dest_epoch_ns.0, - self, - Option::<(&TimeZone, &NeverProvider)>::None, - options, - ) - } - - // 5.5.14 DifferencePlainDateTimeWithTotal ( isoDateTime1, isoDateTime2, calendar, unit ) - pub(crate) fn diff_dt_with_total(&self, other: &Self, unit: Unit) -> TemporalResult { - // 1. If CompareISODateTime(isoDateTime1, isoDateTime2) = 0, then - // a. Return 0. - if matches!(self.iso.cmp(&other.iso), Ordering::Equal) { - return FiniteF64::try_from(0.0); - } - // 2. If ISODateTimeWithinLimits(isoDateTime1) is false or ISODateTimeWithinLimits(isoDateTime2) is false, throw a RangeError exception. - if !self.iso.is_within_limits() || !other.iso.is_within_limits() { - return Err(TemporalError::range().with_message("DateTime is not within valid limits.")); - } - // 3. Let diff be DifferenceISODateTime(isoDateTime1, isoDateTime2, calendar, unit). - let diff = self.iso.diff(&other.iso, &self.calendar, unit)?; - // 4. If unit is nanosecond, return diff.[[Time]]. - if unit == Unit::Nanosecond { - return FiniteF64::try_from(diff.normalized_time_duration().0); - } - let origin_epoch_ns = self.iso.as_nanoseconds(); - // 5. Let destEpochNs be GetUTCEpochNanoseconds(isoDateTime2). - let dest_epoch_ns = other.iso.as_nanoseconds(); - // 6. Return ? TotalRelativeDuration(diff, destEpochNs, isoDateTime1, unset, calendar, unit). - diff.total_relative_duration( - origin_epoch_ns, - dest_epoch_ns.0, - self, - Option::<(&TimeZone, &NeverProvider)>::None, - unit, - ) - } - - /// Returns this `PlainDateTime`'s ISO year value. - #[inline] - #[must_use] - pub const fn iso_year(&self) -> i32 { - self.iso.date.year - } - - /// Returns this `PlainDateTime`'s ISO month value. - #[inline] - #[must_use] - pub const fn iso_month(&self) -> u8 { - self.iso.date.month - } - - /// Returns this `PlainDateTime`'s ISO day value. - #[inline] - #[must_use] - pub const fn iso_day(&self) -> u8 { - self.iso.date.day - } -} - -// ==== Public PlainDateTime API ==== - -impl PlainDateTime { - /// Creates a new `PlainDateTime`, constraining any arguments that are invalid - /// into a valid range. - #[inline] - #[allow(clippy::too_many_arguments)] - pub fn new( - year: i32, - month: u8, - day: u8, - hour: u8, - minute: u8, - second: u8, - millisecond: u16, - microsecond: u16, - nanosecond: u16, - calendar: Calendar, - ) -> TemporalResult { - Self::new_with_overflow( - year, - month, - day, - hour, - minute, - second, - millisecond, - microsecond, - nanosecond, - calendar, - Overflow::Constrain, - ) - } - - /// Creates a new `PlainDateTime` with an ISO 8601 calendar, constraining any - /// arguments that are invalid into a valid range. - #[inline] - #[allow(clippy::too_many_arguments)] - pub fn new_iso( - year: i32, - month: u8, - day: u8, - hour: u8, - minute: u8, - second: u8, - millisecond: u16, - microsecond: u16, - nanosecond: u16, - ) -> TemporalResult { - Self::new( - year, - month, - day, - hour, - minute, - second, - millisecond, - microsecond, - nanosecond, - Calendar::default(), - ) - } - - /// Creates a new `PlainDateTime`, rejecting any arguments that are not in a valid range. - #[inline] - #[allow(clippy::too_many_arguments)] - pub fn try_new( - year: i32, - month: u8, - day: u8, - hour: u8, - minute: u8, - second: u8, - millisecond: u16, - microsecond: u16, - nanosecond: u16, - calendar: Calendar, - ) -> TemporalResult { - Self::new_with_overflow( - year, - month, - day, - hour, - minute, - second, - millisecond, - microsecond, - nanosecond, - calendar, - Overflow::Reject, - ) - } - - /// Creates a new `PlainDateTime` with an ISO 8601 calendar, rejecting any arguments that are not in a valid range. - #[inline] - #[allow(clippy::too_many_arguments)] - pub fn try_new_iso( - year: i32, - month: u8, - day: u8, - hour: u8, - minute: u8, - second: u8, - millisecond: u16, - microsecond: u16, - nanosecond: u16, - ) -> TemporalResult { - Self::try_new( - year, - month, - day, - hour, - minute, - second, - millisecond, - microsecond, - nanosecond, - Calendar::default(), - ) - } - - /// Creates a new `PlainDateTime` with the provided [`Overflow`] option. - #[inline] - #[allow(clippy::too_many_arguments)] - pub fn new_with_overflow( - year: i32, - month: u8, - day: u8, - hour: u8, - minute: u8, - second: u8, - millisecond: u16, - microsecond: u16, - nanosecond: u16, - calendar: Calendar, - overflow: Overflow, - ) -> TemporalResult { - let iso_date = IsoDate::new_with_overflow(year, month, day, overflow)?; - let iso_time = IsoTime::new( - hour, - minute, - second, - millisecond, - microsecond, - nanosecond, - overflow, - )?; - Ok(Self::new_unchecked( - IsoDateTime::new(iso_date, iso_time)?, - calendar, - )) - } - - /// Create a `PlainDateTime` from a `Date` and a `Time`. - pub fn from_date_and_time(date: PlainDate, time: PlainTime) -> TemporalResult { - Ok(Self::new_unchecked( - IsoDateTime::new(date.iso, time.iso)?, - date.calendar().clone(), - )) - } - - /// Creates a `PlainDateTime` from a `PartialDateTime`. - /// - /// ```rust - /// use temporal_rs::{Calendar, PlainDateTime, fields::{CalendarFields, DateTimeFields}, partial::{PartialDateTime, PartialTime, PartialDate}}; - /// - /// let calendar_fields = CalendarFields::new() - /// .with_year(2000) - /// .with_month(13) - /// .with_day(2); - /// - /// let time = PartialTime { - /// hour: Some(4), - /// minute: Some(25), - /// ..Default::default() - /// }; - /// - /// let fields = PartialDateTime { - /// fields: DateTimeFields { - /// calendar_fields, - /// time, - /// }, - /// calendar: Calendar::ISO, - /// }; - /// - /// let date = PlainDateTime::from_partial(fields, None).unwrap(); - /// - /// assert_eq!(date.year(), 2000); - /// assert_eq!(date.month(), 12); - /// assert_eq!(date.day(), 2); - /// assert_eq!(date.calendar().identifier(), "iso8601"); - /// assert_eq!(date.hour(), 4); - /// assert_eq!(date.minute(), 25); - /// assert_eq!(date.second(), 0); - /// assert_eq!(date.millisecond(), 0); - /// - /// ``` - pub fn from_partial( - partial: PartialDateTime, - overflow: Option, - ) -> TemporalResult { - if partial.fields.is_empty() { - return Err(TemporalError::r#type().with_message("PartialDateTime cannot be empty.")); - } - // The steps here largely follow `InterpretTemporalDateTimeFields` - // 1. Let isoDate be ? CalendarDateFromFields(calendar, fields, overflow). - let date = partial.calendar.date_from_fields( - partial.fields.calendar_fields, - overflow.unwrap_or(Overflow::Constrain), - )?; - // 2. Let time be ? RegulateTime(fields.[[Hour]], fields.[[Minute]], fields.[[Second]], fields.[[Millisecond]], fields.[[Microsecond]], fields.[[Nanosecond]], overflow). - let iso_time = - IsoTime::default().with(partial.fields.time, overflow.unwrap_or_default())?; - // 3. Return CombineISODateAndTimeRecord(isoDate, time). - let iso = IsoDateTime::new(date.iso, iso_time)?; - Ok(Self::new_unchecked(iso, partial.calendar)) - } - - // Converts a UTF-8 encoded string into a `PlainDateTime`. - pub fn from_utf8(s: &[u8]) -> TemporalResult { - let parsed = ParsedDateTime::from_utf8(s)?; - Self::from_parsed(parsed) - } - - pub fn from_parsed(parsed: ParsedDateTime) -> TemporalResult { - let date = IsoDate::new_with_overflow( - parsed.date.record.year, - parsed.date.record.month, - parsed.date.record.day, - Overflow::Reject, - )?; - let iso = IsoDateTime::new(date, parsed.time)?; - - Ok(Self::new_unchecked( - iso, - Calendar::new(parsed.date.calendar), - )) - } - - /// Creates a new `PlainDateTime` with the fields of a `PartialDateTime`. - /// - /// ```rust - /// use temporal_rs::{Calendar, PlainDateTime, fields::{CalendarFields, DateTimeFields}, partial::{PartialDateTime, PartialTime, PartialDate}}; - /// - /// let initial = PlainDateTime::try_new(2000, 12, 2, 0,0,0,0,0,0, Calendar::default()).unwrap(); - /// - /// let calendar_fields = CalendarFields::new() - /// .with_month(5); - /// - /// let time = PartialTime { - /// hour: Some(4), - /// second: Some(30), - /// ..Default::default() - /// }; - /// - /// let fields = DateTimeFields { calendar_fields, time }; - /// - /// let date = initial.with(fields, None).unwrap(); - /// - /// assert_eq!(date.year(), 2000); - /// assert_eq!(date.month(), 5); - /// assert_eq!(date.day(), 2); - /// assert_eq!(date.calendar().identifier(), "iso8601"); - /// assert_eq!(date.hour(), 4); - /// assert_eq!(date.minute(), 0); - /// assert_eq!(date.second(), 30); - /// assert_eq!(date.millisecond(), 0); - /// - /// ``` - #[inline] - pub fn with(&self, fields: DateTimeFields, overflow: Option) -> TemporalResult { - if fields.is_empty() { - return Err(TemporalError::r#type().with_enum(ErrorMessage::EmptyFieldsIsInvalid)); - } - let overflow = overflow.unwrap_or(Overflow::Constrain); - - let result_date = self.calendar.date_from_fields( - fields - .calendar_fields - .with_fallback_datetime(self, self.calendar.kind())?, - overflow, - )?; - - // Determine the `Time` based off the partial values. - let time = self.iso.time.with(fields.time, overflow)?; - - let iso_datetime = IsoDateTime::new(result_date.iso, time)?; - - Ok(Self::new_unchecked(iso_datetime, self.calendar().clone())) - } - - /// Creates a new `PlainDateTime` from the current `PlainDateTime` and the provided `Time`. - #[inline] - pub fn with_time(&self, time: Option) -> TemporalResult { - let time = time.unwrap_or_default(); - Self::try_new( - self.iso_year(), - self.iso_month(), - self.iso_day(), - time.hour(), - time.minute(), - time.second(), - time.millisecond(), - time.microsecond(), - time.nanosecond(), - self.calendar.clone(), - ) - } - - /// Creates a new `PlainDateTime` from the current `PlainDateTime` and a provided [`Calendar`]. - #[inline] - pub fn with_calendar(&self, calendar: Calendar) -> Self { - Self::new_unchecked(self.iso, calendar) - } - - /// Returns the hour value - #[inline] - #[must_use] - pub fn hour(&self) -> u8 { - self.iso.time.hour - } - - /// Returns the minute value - #[inline] - #[must_use] - pub fn minute(&self) -> u8 { - self.iso.time.minute - } - - /// Returns the second value - #[inline] - #[must_use] - pub fn second(&self) -> u8 { - self.iso.time.second - } - - /// Returns the `millisecond` value - #[inline] - #[must_use] - pub fn millisecond(&self) -> u16 { - self.iso.time.millisecond - } - - /// Returns the `microsecond` value - #[inline] - #[must_use] - pub fn microsecond(&self) -> u16 { - self.iso.time.microsecond - } - - /// Returns the `nanosecond` value - #[inline] - #[must_use] - pub fn nanosecond(&self) -> u16 { - self.iso.time.nanosecond - } - - /// Returns the Calendar value. - #[inline] - #[must_use] - pub fn calendar(&self) -> &Calendar { - &self.calendar - } -} - -// ==== Calendar-derived public API ==== - -impl PlainDateTime { - /// Returns the calendar year value. - #[inline] - pub fn year(&self) -> i32 { - self.calendar.year(&self.iso.date) - } - - /// Returns the calendar month value. - #[inline] - pub fn month(&self) -> u8 { - self.calendar.month(&self.iso.date) - } - - /// Returns the calendar month code value. - #[inline] - pub fn month_code(&self) -> MonthCode { - self.calendar.month_code(&self.iso.date) - } - - /// Returns the calendar day value. - #[inline] - pub fn day(&self) -> u8 { - self.calendar.day(&self.iso.date) - } - - /// Returns the calendar day of week value. - #[inline] - pub fn day_of_week(&self) -> u16 { - self.calendar.day_of_week(&self.iso.date) - } - - /// Returns the calendar day of year value. - #[inline] - pub fn day_of_year(&self) -> u16 { - self.calendar.day_of_year(&self.iso.date) - } - - /// Returns the calendar week of year value. - #[inline] - pub fn week_of_year(&self) -> Option { - self.calendar.week_of_year(&self.iso.date) - } - - /// Returns the calendar year of week value. - #[inline] - pub fn year_of_week(&self) -> Option { - self.calendar.year_of_week(&self.iso.date) - } - - /// Returns the calendar days in week value. - #[inline] - pub fn days_in_week(&self) -> u16 { - self.calendar.days_in_week(&self.iso.date) - } - - /// Returns the calendar days in month value. - #[inline] - pub fn days_in_month(&self) -> u16 { - self.calendar.days_in_month(&self.iso.date) - } - - /// Returns the calendar days in year value. - #[inline] - pub fn days_in_year(&self) -> u16 { - self.calendar.days_in_year(&self.iso.date) - } - - /// Returns the calendar months in year value. - #[inline] - pub fn months_in_year(&self) -> u16 { - self.calendar.months_in_year(&self.iso.date) - } - - /// Returns whether the date in a leap year for the given calendar. - #[inline] - pub fn in_leap_year(&self) -> bool { - self.calendar.in_leap_year(&self.iso.date) - } - - /// Returns the era for the current `PlainDateTime`. - #[inline] - pub fn era(&self) -> Option> { - self.calendar.era(&self.iso.date) - } - - /// Returns the era year for the current `PlainDateTime`. - #[inline] - pub fn era_year(&self) -> Option { - self.calendar.era_year(&self.iso.date) - } -} - -impl PlainDateTime { - /// Compares one `PlainDateTime` to another `PlainDateTime` using their - /// `IsoDate` representation. - /// - /// # Note on Ordering - /// - /// `temporal_rs` does not implement `PartialOrd`/`Ord` as `PlainDateTime` does - /// not fulfill all the conditions required to implement the traits. However, - /// it is possible to compare `PlainDate`'s as their `IsoDate` representation. - #[inline] - #[must_use] - pub fn compare_iso(&self, other: &Self) -> Ordering { - self.iso.cmp(&other.iso) - } - - /// Adds a [`Duration`] to the current `PlainDateTime`. - #[inline] - pub fn add(&self, duration: &Duration, overflow: Option) -> TemporalResult { - self.add_or_subtract_duration(duration, overflow) - } - - /// Subtracts a [`Duration`] to the current `PlainDateTime`. - #[inline] - pub fn subtract( - &self, - duration: &Duration, - overflow: Option, - ) -> TemporalResult { - self.add_or_subtract_duration(&duration.negated(), overflow) - } - - /// Returns a [`Duration`] representing the period of time from this `PlainDateTime` until the other `PlainDateTime`. - #[inline] - pub fn until(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { - self.diff(DifferenceOperation::Until, other, settings) - } - - /// Returns a [`Duration`] representing the period of time from this `PlainDateTime` since the other `PlainDateTime`. - #[inline] - pub fn since(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { - self.diff(DifferenceOperation::Since, other, settings) - } - - /// Rounds the current `PlainDateTime` based on provided options. - #[inline] - pub fn round(&self, options: RoundingOptions) -> TemporalResult { - let resolved = ResolvedRoundingOptions::from_datetime_options(options)?; - - if resolved.is_noop() { - return Ok(self.clone()); - } - - let result = self.iso.round(resolved)?; - - Ok(Self::new_unchecked(result, self.calendar.clone())) - } - - /// Create a [`ZonedDateTime`] from the current `PlainDateTime` with the provided options. - #[inline] - pub fn to_zoned_date_time_with_provider( - &self, - time_zone: TimeZone, - disambiguation: Disambiguation, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - // 6. Let epochNs be ? GetEpochNanosecondsFor(timeZone, dateTime.[[ISODateTime]], disambiguation). - let epoch_ns = time_zone.get_epoch_nanoseconds_for(self.iso, disambiguation, provider)?; - // 7. Return ! CreateTemporalZonedDateTime(epochNs, timeZone, dateTime.[[Calendar]]). - Ok(ZonedDateTime::new_unchecked( - Instant::from(epoch_ns.ns), - time_zone, - self.calendar.clone(), - epoch_ns.offset, - )) - } - - /// Gets the EpochNanoseconds represented by this PlainDateTime - /// (using and UTC timezone) - /// - // Useful for implementing HandleDateTimeTemporalDateTime - pub fn epoch_ns_for_utc(&self) -> EpochNanoseconds { - // 3. Let epochNs be ? GetUTCEpochNanoseconds(isoDateTime). - self.iso.as_nanoseconds() - } - - /// Create a [`PlainDate`] from the current `PlainDateTime`. - #[inline] - pub fn to_plain_date(&self) -> PlainDate { - // 3. Return ! CreateTemporalDate(dateTime.[[ISODateTime]].[[ISODate]], dateTime.[[Calendar]]). - PlainDate::new_unchecked(self.iso.date, self.calendar.clone()) - } - - /// Create a [`PlainTime`] from the current `PlainDateTime`. - #[inline] - pub fn to_plain_time(&self) -> PlainTime { - // 3. Return ! CreateTemporalTime(dateTime.[[ISODateTime]].[[Time]]). - PlainTime::new_unchecked(self.iso.time) - } - - /// Creates an efficient [`Writeable`] implementation for the RFC 9557 IXDTF format - /// using the current `PlainDateTime` and options. - #[inline] - pub fn to_ixdtf_writeable( - &self, - options: ToStringRoundingOptions, - display_calendar: DisplayCalendar, - ) -> TemporalResult { - let resolved_options = options.resolve()?; - let result = self - .iso - .round(ResolvedRoundingOptions::from_to_string_options( - &resolved_options, - ))?; - if !result.is_within_limits() { - return Err(TemporalError::range().with_message("DateTime is not within valid limits.")); - } - let builder = IxdtfStringBuilder::default() - .with_date(result.date) - .with_time(result.time, resolved_options.precision) - .with_calendar(self.calendar.identifier(), display_calendar); - Ok(builder) - } - - /// Returns the RFC 9557 IXDTF string for the current `PlainDateTime` with the provided - /// options. - #[inline] - pub fn to_ixdtf_string( - &self, - options: ToStringRoundingOptions, - display_calendar: DisplayCalendar, - ) -> TemporalResult { - self.to_ixdtf_writeable(options, display_calendar) - .map(|x| x.write_to_string().into()) - } -} - -// ==== Trait impls ==== - -impl FromStr for PlainDateTime { - type Err = TemporalError; - - fn from_str(s: &str) -> Result { - Self::from_utf8(s.as_bytes()) - } -} - -#[cfg(test)] -mod tests { - use tinystr::{tinystr, TinyAsciiStr}; - - use crate::{ - builtins::{ - calendar::CalendarFields, - core::{ - calendar::Calendar, duration::DateDuration, plain_date_time::DateTimeFields, - Duration, PartialTime, PlainDateTime, - }, - }, - iso::{IsoDate, IsoDateTime, IsoTime}, - options::{ - DifferenceSettings, DisplayCalendar, RoundingIncrement, RoundingMode, RoundingOptions, - ToStringRoundingOptions, Unit, - }, - parsers::Precision, - MonthCode, TemporalResult, - }; - - fn assert_datetime( - dt: PlainDateTime, - fields: (i32, u8, TinyAsciiStr<4>, u8, u8, u8, u8, u16, u16, u16), - ) { - assert_eq!(dt.year(), fields.0); - assert_eq!(dt.month(), fields.1); - assert_eq!(dt.month_code(), MonthCode(fields.2)); - assert_eq!(dt.day(), fields.3); - assert_eq!(dt.hour(), fields.4); - assert_eq!(dt.minute(), fields.5); - assert_eq!(dt.second(), fields.6); - assert_eq!(dt.millisecond(), fields.7); - assert_eq!(dt.microsecond(), fields.8); - assert_eq!(dt.nanosecond(), fields.9); - } - - fn pdt_from_date(year: i32, month: u8, day: u8) -> TemporalResult { - PlainDateTime::try_new(year, month, day, 0, 0, 0, 0, 0, 0, Calendar::default()) - } - - #[test] - #[allow(clippy::float_cmp)] - fn plain_date_time_limits() { - // This test is primarily to assert that the `expect` in the epoch methods is - // valid, i.e., a valid instant is within the range of an f64. - let negative_limit = pdt_from_date(-271_821, 4, 19); - assert!(negative_limit.is_err()); - let positive_limit = pdt_from_date(275_760, 9, 14); - assert!(positive_limit.is_err()); - let within_negative_limit = pdt_from_date(-271_821, 4, 20); - assert_eq!( - within_negative_limit, - Ok(PlainDateTime { - iso: IsoDateTime { - date: IsoDate { - year: -271_821, - month: 4, - day: 20, - }, - time: IsoTime::default(), - }, - calendar: Calendar::default(), - }) - ); - - let within_positive_limit = pdt_from_date(275_760, 9, 13); - assert_eq!( - within_positive_limit, - Ok(PlainDateTime { - iso: IsoDateTime { - date: IsoDate { - year: 275_760, - month: 9, - day: 13, - }, - time: IsoTime::default(), - }, - calendar: Calendar::default(), - }) - ); - } - - #[test] - fn basic_with_test() { - let pdt = - PlainDateTime::try_new(1976, 11, 18, 15, 23, 30, 123, 456, 789, Calendar::default()) - .unwrap(); - - // Test year - let fields = DateTimeFields { - calendar_fields: CalendarFields::new().with_year(2019), - time: PartialTime::default(), - }; - let result = pdt.with(fields, None).unwrap(); - assert_datetime( - result, - (2019, 11, tinystr!(4, "M11"), 18, 15, 23, 30, 123, 456, 789), - ); - - // Test month - let fields = DateTimeFields { - calendar_fields: CalendarFields::new().with_month(5), - time: PartialTime::default(), - }; - let result = pdt.with(fields, None).unwrap(); - assert_datetime( - result, - (1976, 5, tinystr!(4, "M05"), 18, 15, 23, 30, 123, 456, 789), - ); - - // Test monthCode - let fields = DateTimeFields { - calendar_fields: CalendarFields::new().with_month_code(MonthCode(tinystr!(4, "M05"))), - time: PartialTime::default(), - }; - let result = pdt.with(fields, None).unwrap(); - assert_datetime( - result, - (1976, 5, tinystr!(4, "M05"), 18, 15, 23, 30, 123, 456, 789), - ); - - // Test day - let fields = DateTimeFields { - calendar_fields: CalendarFields::new().with_day(5), - time: PartialTime::default(), - }; - let result = pdt.with(fields, None).unwrap(); - assert_datetime( - result, - (1976, 11, tinystr!(4, "M11"), 5, 15, 23, 30, 123, 456, 789), - ); - - // Test hour - let fields = DateTimeFields { - calendar_fields: CalendarFields::default(), - time: PartialTime { - hour: Some(5), - ..Default::default() - }, - }; - let result = pdt.with(fields, None).unwrap(); - assert_datetime( - result, - (1976, 11, tinystr!(4, "M11"), 18, 5, 23, 30, 123, 456, 789), - ); - - // Test minute - let fields = DateTimeFields { - calendar_fields: CalendarFields::default(), - time: PartialTime { - minute: Some(5), - ..Default::default() - }, - }; - let result = pdt.with(fields, None).unwrap(); - assert_datetime( - result, - (1976, 11, tinystr!(4, "M11"), 18, 15, 5, 30, 123, 456, 789), - ); - - // Test second - let fields = DateTimeFields { - calendar_fields: CalendarFields::default(), - time: PartialTime { - second: Some(5), - ..Default::default() - }, - }; - let result = pdt.with(fields, None).unwrap(); - assert_datetime( - result, - (1976, 11, tinystr!(4, "M11"), 18, 15, 23, 5, 123, 456, 789), - ); - - // Test second - let fields = DateTimeFields { - calendar_fields: CalendarFields::default(), - time: PartialTime { - millisecond: Some(5), - ..Default::default() - }, - }; - let result = pdt.with(fields, None).unwrap(); - assert_datetime( - result, - (1976, 11, tinystr!(4, "M11"), 18, 15, 23, 30, 5, 456, 789), - ); - - // Test second - let fields = DateTimeFields { - calendar_fields: CalendarFields::default(), - time: PartialTime { - microsecond: Some(5), - ..Default::default() - }, - }; - let result = pdt.with(fields, None).unwrap(); - assert_datetime( - result, - (1976, 11, tinystr!(4, "M11"), 18, 15, 23, 30, 123, 5, 789), - ); - - // Test second - let fields = DateTimeFields { - calendar_fields: CalendarFields::default(), - time: PartialTime { - nanosecond: Some(5), - ..Default::default() - }, - }; - let result = pdt.with(fields, None).unwrap(); - assert_datetime( - result, - (1976, 11, tinystr!(4, "M11"), 18, 15, 23, 30, 123, 456, 5), - ); - } - - #[test] - fn datetime_with_empty_partial() { - let pdt = - PlainDateTime::try_new(2020, 1, 31, 12, 34, 56, 987, 654, 321, Calendar::default()) - .unwrap(); - - let err = pdt.with(DateTimeFields::default(), None); - assert!(err.is_err()); - } - - // options-undefined.js - #[test] - fn datetime_add_test() { - let pdt = - PlainDateTime::try_new(2020, 1, 31, 12, 34, 56, 987, 654, 321, Calendar::default()) - .unwrap(); - - let result = pdt - .add( - &Duration::from(DateDuration::new(0, 1, 0, 0).unwrap()), - None, - ) - .unwrap(); - - assert_eq!(result.month(), 2); - assert_eq!(result.day(), 29); - } - - // options-undefined.js - #[test] - fn datetime_subtract_test() { - let pdt = - PlainDateTime::try_new(2000, 3, 31, 12, 34, 56, 987, 654, 321, Calendar::default()) - .unwrap(); - - let result = pdt - .subtract( - &Duration::from(DateDuration::new(0, 1, 0, 0).unwrap()), - None, - ) - .unwrap(); - - assert_eq!(result.month(), 2); - assert_eq!(result.day(), 29); - } - - // subtract/hour-overflow.js - #[test] - fn datetime_subtract_hour_overflows() { - let dt = - PlainDateTime::try_new(2019, 10, 29, 10, 46, 38, 271, 986, 102, Calendar::default()) - .unwrap(); - - let result = dt.subtract(&Duration::from_hours(12), None).unwrap(); - assert_datetime( - result, - (2019, 10, tinystr!(4, "M10"), 28, 22, 46, 38, 271, 986, 102), - ); - - let result = dt.add(&Duration::from_hours(-12), None).unwrap(); - assert_datetime( - result, - (2019, 10, tinystr!(4, "M10"), 28, 22, 46, 38, 271, 986, 102), - ); - } - - fn create_diff_setting( - smallest: Unit, - increment: u32, - rounding_mode: RoundingMode, - ) -> DifferenceSettings { - DifferenceSettings { - largest_unit: None, - smallest_unit: Some(smallest), - increment: Some(RoundingIncrement::try_new(increment).unwrap()), - rounding_mode: Some(rounding_mode), - } - } - - #[test] - fn dt_until_basic() { - let earlier = - PlainDateTime::try_new(2019, 1, 8, 8, 22, 36, 123, 456, 789, Calendar::default()) - .unwrap(); - let later = - PlainDateTime::try_new(2021, 9, 7, 12, 39, 40, 987, 654, 321, Calendar::default()) - .unwrap(); - - let settings = create_diff_setting(Unit::Hour, 3, RoundingMode::HalfExpand); - let result = earlier.until(&later, settings).unwrap(); - - assert_eq!(result.days(), 973); - assert_eq!(result.hours(), 3); - - let settings = create_diff_setting(Unit::Minute, 30, RoundingMode::HalfExpand); - let result = earlier.until(&later, settings).unwrap(); - - assert_eq!(result.days(), 973); - assert_eq!(result.hours(), 4); - assert_eq!(result.minutes(), 30); - } - - #[test] - fn dt_since_basic() { - let earlier = - PlainDateTime::try_new(2019, 1, 8, 8, 22, 36, 123, 456, 789, Calendar::default()) - .unwrap(); - let later = - PlainDateTime::try_new(2021, 9, 7, 12, 39, 40, 987, 654, 321, Calendar::default()) - .unwrap(); - - let settings = create_diff_setting(Unit::Hour, 3, RoundingMode::HalfExpand); - let result = later.since(&earlier, settings).unwrap(); - - assert_eq!(result.days(), 973); - assert_eq!(result.hours(), 3); - - let settings = create_diff_setting(Unit::Minute, 30, RoundingMode::HalfExpand); - let result = later.since(&earlier, settings).unwrap(); - - assert_eq!(result.days(), 973); - assert_eq!(result.hours(), 4); - assert_eq!(result.minutes(), 30); - } - - #[test] - fn dt_since_conflicting_signs() { - // From intl402/Temporal/PlainDateTime/prototype/since/wrapping-at-end-of-month-gregorian - // Tests that date arithmetic with conflicting signs works - let a = PlainDateTime::try_new(2023, 3, 1, 2, 0, 0, 0, 0, 0, Calendar::GREGORIAN).unwrap(); - let b = PlainDateTime::try_new(2023, 1, 1, 3, 0, 0, 0, 0, 0, Calendar::GREGORIAN).unwrap(); - - let settings = DifferenceSettings { - largest_unit: Some(Unit::Year), - ..Default::default() - }; - let result = a.since(&b, settings).unwrap(); - - assert_eq!(result.months(), 1); - assert_eq!(result.days(), 30); - assert_eq!(result.hours(), 23); - } - - #[test] - fn dt_round_basic() { - let assert_datetime = - |dt: PlainDateTime, expected: (i32, u8, u8, u8, u8, u8, u16, u16, u16)| { - assert_eq!(dt.iso_year(), expected.0); - assert_eq!(dt.iso_month(), expected.1); - assert_eq!(dt.iso_day(), expected.2); - assert_eq!(dt.hour(), expected.3); - assert_eq!(dt.minute(), expected.4); - assert_eq!(dt.second(), expected.5); - assert_eq!(dt.millisecond(), expected.6); - assert_eq!(dt.microsecond(), expected.7); - assert_eq!(dt.nanosecond(), expected.8); - }; - - let gen_rounding_options = |smallest: Unit, increment: u32| -> RoundingOptions { - RoundingOptions { - largest_unit: None, - smallest_unit: Some(smallest), - increment: Some(RoundingIncrement::try_new(increment).unwrap()), - rounding_mode: None, - } - }; - let dt = - PlainDateTime::try_new(1976, 11, 18, 14, 23, 30, 123, 456, 789, Calendar::default()) - .unwrap(); - - let result = dt.round(gen_rounding_options(Unit::Hour, 4)).unwrap(); - assert_datetime(result, (1976, 11, 18, 16, 0, 0, 0, 0, 0)); - - let result = dt.round(gen_rounding_options(Unit::Minute, 15)).unwrap(); - assert_datetime(result, (1976, 11, 18, 14, 30, 0, 0, 0, 0)); - - let result = dt.round(gen_rounding_options(Unit::Second, 30)).unwrap(); - assert_datetime(result, (1976, 11, 18, 14, 23, 30, 0, 0, 0)); - - let result = dt - .round(gen_rounding_options(Unit::Millisecond, 10)) - .unwrap(); - assert_datetime(result, (1976, 11, 18, 14, 23, 30, 120, 0, 0)); - - let result = dt - .round(gen_rounding_options(Unit::Microsecond, 10)) - .unwrap(); - assert_datetime(result, (1976, 11, 18, 14, 23, 30, 123, 460, 0)); - - let result = dt - .round(gen_rounding_options(Unit::Nanosecond, 10)) - .unwrap(); - assert_datetime(result, (1976, 11, 18, 14, 23, 30, 123, 456, 790)); - } - - #[test] - fn datetime_round_options() { - let dt = - PlainDateTime::try_new(1976, 11, 18, 14, 23, 30, 123, 456, 789, Calendar::default()) - .unwrap(); - - let bad_options = RoundingOptions { - largest_unit: None, - smallest_unit: None, - rounding_mode: Some(RoundingMode::Ceil), - increment: Some(RoundingIncrement::ONE), - }; - - let err = dt.round(bad_options); - assert!(err.is_err()); - - let err = dt.round(RoundingOptions::default()); - assert!(err.is_err()); - } - - // Mapped from fractionaldigits-number.js - #[test] - fn to_string_precision_digits() { - let few_seconds = - PlainDateTime::try_new(1976, 2, 4, 5, 3, 1, 0, 0, 0, Calendar::default()).unwrap(); - let zero_seconds = - PlainDateTime::try_new(1976, 11, 18, 15, 23, 0, 0, 0, 0, Calendar::default()).unwrap(); - let whole_seconds = - PlainDateTime::try_new(1976, 11, 18, 15, 23, 30, 0, 0, 0, Calendar::default()).unwrap(); - let subseconds = - PlainDateTime::try_new(1976, 11, 18, 15, 23, 30, 123, 400, 0, Calendar::default()) - .unwrap(); - - let options = ToStringRoundingOptions { - precision: Precision::Digit(0), - smallest_unit: None, - rounding_mode: None, - }; - assert_eq!( - &few_seconds - .to_ixdtf_string(options, DisplayCalendar::Auto) - .unwrap(), - "1976-02-04T05:03:01", - "pads parts with 0" - ); - - let options = ToStringRoundingOptions { - precision: Precision::Digit(0), - smallest_unit: None, - rounding_mode: None, - }; - assert_eq!( - &subseconds - .to_ixdtf_string(options, DisplayCalendar::Auto) - .unwrap(), - "1976-11-18T15:23:30", - "truncates 4 decimal places to 0" - ); - - let options = ToStringRoundingOptions { - precision: Precision::Digit(2), - smallest_unit: None, - rounding_mode: None, - }; - assert_eq!( - &zero_seconds - .to_ixdtf_string(options, DisplayCalendar::Auto) - .unwrap(), - "1976-11-18T15:23:00.00", - "pads zero seconds to 2 decimal places" - ); - let options = ToStringRoundingOptions { - precision: Precision::Digit(2), - smallest_unit: None, - rounding_mode: None, - }; - - assert_eq!( - &whole_seconds - .to_ixdtf_string(options, DisplayCalendar::Auto) - .unwrap(), - "1976-11-18T15:23:30.00", - "pads whole seconds to 2 decimal places" - ); - let options = ToStringRoundingOptions { - precision: Precision::Digit(2), - smallest_unit: None, - rounding_mode: None, - }; - assert_eq!( - &subseconds - .to_ixdtf_string(options, DisplayCalendar::Auto) - .unwrap(), - "1976-11-18T15:23:30.12", - "truncates 4 decimal places to 2" - ); - - let options = ToStringRoundingOptions { - precision: Precision::Digit(3), - smallest_unit: None, - rounding_mode: None, - }; - assert_eq!( - &subseconds - .to_ixdtf_string(options, DisplayCalendar::Auto) - .unwrap(), - "1976-11-18T15:23:30.123", - "truncates 4 decimal places to 3" - ); - - let options = ToStringRoundingOptions { - precision: Precision::Digit(6), - smallest_unit: None, - rounding_mode: None, - }; - assert_eq!( - &subseconds - .to_ixdtf_string(options, DisplayCalendar::Auto) - .unwrap(), - "1976-11-18T15:23:30.123400", - "pads 4 decimal places to 6" - ); - let options = ToStringRoundingOptions { - precision: Precision::Digit(7), - smallest_unit: None, - rounding_mode: None, - }; - assert_eq!( - &zero_seconds - .to_ixdtf_string(options, DisplayCalendar::Auto) - .unwrap(), - "1976-11-18T15:23:00.0000000", - "pads zero seconds to 7 decimal places" - ); - let options = ToStringRoundingOptions { - precision: Precision::Digit(7), - smallest_unit: None, - rounding_mode: None, - }; - assert_eq!( - &whole_seconds - .to_ixdtf_string(options, DisplayCalendar::Auto) - .unwrap(), - "1976-11-18T15:23:30.0000000", - "pads whole seconds to 7 decimal places" - ); - let options = ToStringRoundingOptions { - precision: Precision::Digit(7), - smallest_unit: None, - rounding_mode: None, - }; - assert_eq!( - &subseconds - .to_ixdtf_string(options, DisplayCalendar::Auto) - .unwrap(), - "1976-11-18T15:23:30.1234000", - "pads 4 decimal places to 7" - ); - let options = ToStringRoundingOptions { - precision: Precision::Digit(9), - smallest_unit: None, - rounding_mode: None, - }; - assert_eq!( - &subseconds - .to_ixdtf_string(options, DisplayCalendar::Auto) - .unwrap(), - "1976-11-18T15:23:30.123400000", - "pads 4 decimal places to 9" - ); - } - - #[test] - fn datetime_add() { - use crate::{Duration, PlainDateTime}; - use core::str::FromStr; - - let dt = PlainDateTime::from_str("2024-01-15T12:00:00").unwrap(); - - let duration = Duration::from_str("P1M2DT3H4M").unwrap(); - - // Add duration - let later = dt.add(&duration, None).unwrap(); - assert_eq!(later.month(), 2); - assert_eq!(later.day(), 17); - assert_eq!(later.hour(), 15); - assert_eq!(later.minute(), 4); - } -} diff --git a/src/builtins/core/plain_month_day.rs b/src/builtins/core/plain_month_day.rs deleted file mode 100644 index 4084e3761..000000000 --- a/src/builtins/core/plain_month_day.rs +++ /dev/null @@ -1,756 +0,0 @@ -//! This module implements `MonthDay` and any directly related algorithms. - -use alloc::string::String; -use core::str::FromStr; - -use crate::{ - builtins::calendar::CalendarFields, - error::ErrorMessage, - iso::{IsoDate, IsoDateTime, IsoTime}, - options::{Disambiguation, DisplayCalendar, Overflow}, - parsed_intermediates::ParsedDate, - parsers::{FormattableCalendar, FormattableDate, FormattableMonthDay}, - provider::TimeZoneProvider, - unix_time::EpochNanoseconds, - Calendar, MonthCode, TemporalError, TemporalResult, TimeZone, -}; - -use super::{PartialDate, PlainDate}; -use icu_calendar::AnyCalendarKind; -use writeable::Writeable; - -/// The native Rust implementation of `Temporal.PlainMonthDay`. -/// -/// Represents a calendar month and day without a specific year, such as -/// "December 25th" or "March 15th". Useful for representing recurring annual -/// events where the year is not specified or relevant. -/// -/// Commonly used for holidays, birthdays, anniversaries, and other events -/// that occur on the same date each year. Special handling is required for -/// February 29th when working with non-leap years. -/// -/// ## Examples -/// -/// ### Creating a PlainMonthDay -/// -/// ```rust -/// use temporal_rs::{PlainMonthDay, Calendar, MonthCode, options::Overflow}; -/// -/// // Create March 15th -/// let md = PlainMonthDay::new_with_overflow( -/// 3, 15, // month, day -/// Calendar::default(), // ISO 8601 calendar -/// Overflow::Reject, // reject invalid dates -/// None // no reference year -/// ).unwrap(); -/// -/// assert_eq!(md.month_code(), MonthCode::try_from_utf8("M03".as_bytes()).unwrap()); -/// assert_eq!(md.day(), 15); -/// assert_eq!(md.calendar().identifier(), "iso8601"); -/// ``` -/// -/// ### Parsing ISO 8601 month-day strings -/// -/// ```rust -/// use temporal_rs::{PlainMonthDay, MonthCode}; -/// use core::str::FromStr; -/// -/// // Parse month-day strings -/// let md = PlainMonthDay::from_str("03-15").unwrap(); -/// assert_eq!(md.month_code(), MonthCode::try_from_utf8("M03".as_bytes()).unwrap()); -/// assert_eq!(md.day(), 15); -/// -/// // Also supports various formats -/// let md2 = PlainMonthDay::from_str("--03-15").unwrap(); // RFC 3339 format -/// assert_eq!(md2.month_code(), MonthCode::try_from_utf8("M03".as_bytes()).unwrap()); -/// assert_eq!(md2.day(), 15); -/// assert_eq!(md, md2); // equivalent -/// ``` -/// -/// ### Working with partial fields -/// -/// ```rust -/// use temporal_rs::{PlainMonthDay, MonthCode, fields::CalendarFields}; -/// use core::str::FromStr; -/// -/// let md = PlainMonthDay::from_str("03-15").unwrap(); // March 15th -/// -/// // Change the month -/// let fields = CalendarFields::new().with_month(12); -/// let modified = md.with(fields, None).unwrap(); -/// assert_eq!(modified.month_code(), MonthCode::try_from_utf8("M12".as_bytes()).unwrap()); -/// assert_eq!(modified.day(), 15); // unchanged -/// -/// // Change the day -/// let fields = CalendarFields::new().with_day(25); -/// let modified = md.with(fields, None).unwrap(); -/// assert_eq!(modified.month_code(), MonthCode::try_from_utf8("M03".as_bytes()).unwrap()); // unchanged -/// assert_eq!(modified.day(), 25); -/// ``` -/// -/// ### Converting to PlainDate -/// -/// ```rust -/// use temporal_rs::{PlainMonthDay, fields::CalendarFields}; -/// use core::str::FromStr; -/// -/// let md = PlainMonthDay::from_str("12-25").unwrap(); // December 25th -/// -/// // Convert to a specific date by providing a year -/// let year_fields = CalendarFields::new().with_year(2024); -/// let date = md.to_plain_date(Some(year_fields)).unwrap(); -/// assert_eq!(date.year(), 2024); -/// assert_eq!(date.month(), 12); -/// assert_eq!(date.day(), 25); -/// // This represents December 25th, 2024 -/// ``` -/// -/// ### Handling leap year dates -/// -/// ```rust -/// use temporal_rs::{PlainMonthDay, MonthCode, fields::CalendarFields, Calendar, options::Overflow}; -/// -/// // February 29th (leap day) -/// let leap_day = PlainMonthDay::new_with_overflow( -/// 2, 29, -/// Calendar::default(), -/// Overflow::Reject, -/// Some(2024) // reference year 2024 (a leap year) -/// ).unwrap(); -/// -/// assert_eq!(leap_day.month_code(), MonthCode::try_from_utf8("M02".as_bytes()).unwrap()); -/// assert_eq!(leap_day.day(), 29); -/// -/// // Convert to non-leap year - this would need special handling -/// let year_fields = CalendarFields::new().with_year(2023); // non-leap year -/// let result = leap_day.to_plain_date(Some(year_fields)); -/// // This might fail or be adjusted depending on the calendar's rules -/// ``` -/// -/// ### Practical use cases -/// -/// ```rust -/// use temporal_rs::{PlainMonthDay, fields::CalendarFields}; -/// use core::str::FromStr; -/// -/// // Birthday (recurring annually) -/// let birthday = PlainMonthDay::from_str("07-15").unwrap(); // July 15th -/// -/// // Calculate this year's birthday -/// let this_year = 2024; -/// let year_fields = CalendarFields::new().with_year(this_year); -/// let birthday_2024 = birthday.to_plain_date(Some(year_fields)).unwrap(); -/// assert_eq!(birthday_2024.year(), 2024); -/// assert_eq!(birthday_2024.month(), 7); -/// assert_eq!(birthday_2024.day(), 15); -/// -/// // Holiday (Christmas) -/// let christmas = PlainMonthDay::from_str("12-25").unwrap(); -/// let year_fields = CalendarFields::new().with_year(this_year); -/// let christmas_2024 = christmas.to_plain_date(Some(year_fields)).unwrap(); -/// assert_eq!(christmas_2024.month(), 12); -/// assert_eq!(christmas_2024.day(), 25); -/// ``` -/// -/// ## Reference -/// -/// For more information, see the [MDN documentation][mdn-plainmonthday]. -/// -/// [mdn-plainmonthday]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainMonthDay -#[non_exhaustive] -#[derive(Debug, Default, Clone, PartialEq, Eq)] -pub struct PlainMonthDay { - pub iso: IsoDate, - calendar: Calendar, -} - -impl core::fmt::Display for PlainMonthDay { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - f.write_str(&self.to_ixdtf_string(DisplayCalendar::Auto)) - } -} - -impl PlainMonthDay { - /// Creates a new unchecked `PlainMonthDay` - #[inline] - #[must_use] - pub(crate) fn new_unchecked(iso: IsoDate, calendar: Calendar) -> Self { - Self { iso, calendar } - } - - /// Returns the ISO month value of `PlainMonthDay`. - #[inline] - #[must_use] - pub(crate) fn iso_month(&self) -> u8 { - self.iso.month - } - - /// Returns the ISO year value of `PlainMonthDay`. - #[inline] - #[must_use] - pub(crate) fn iso_year(&self) -> i32 { - self.iso.year - } -} - -impl PlainMonthDay { - /// Creates a new valid `PlainMonthDay`. - #[inline] - pub fn new_with_overflow( - month: u8, - day: u8, - calendar: Calendar, - overflow: Overflow, - ref_year: Option, - ) -> TemporalResult { - let ry = ref_year.unwrap_or(1972); - // 1972 is the first leap year in the Unix epoch (needed to cover all dates) - let iso = IsoDate::new_with_overflow(ry, month, day, overflow)?; - Ok(Self::new_unchecked(iso, calendar)) - } - - // Converts a UTF-8 encoded string into a `PlainMonthDay`. - pub fn from_utf8(s: &[u8]) -> TemporalResult { - let parsed = ParsedDate::month_day_from_utf8(s)?; - Self::from_parsed(parsed) - } - - // Converts a ParsedDate into a `PlainMonthDay`. - // - // Be sure to parse this using [`ParsedDate::month_day_from_utf8()`]~ - pub fn from_parsed(parsed: ParsedDate) -> TemporalResult { - let calendar = Calendar::new(parsed.calendar); - // 10. If calendar is "iso8601", then - if parsed.calendar == AnyCalendarKind::Iso { - // a. Let referenceISOYear be 1972 (the first ISO 8601 leap year after the epoch). - // b. Let isoDate be CreateISODateRecord(referenceISOYear, result.[[Month]], result.[[Day]]). - // c. Return !CreateTemporalMonthDay(isoDate, calendar). - let iso = IsoDate::new_unchecked(1972, parsed.record.month, parsed.record.day); - debug_assert!(iso.check_validity().is_ok(), "Found invalid ParsedDate"); - return Ok(Self::new_unchecked(iso, calendar)); - } - // 11. Let isoDate be CreateISODateRecord(result.[[Year]], result.[[Month]], result.[[Day]]). - // 12. If ISODateWithinLimits(isoDate) is false, throw a RangeError exception. - // Note: parse_month_day will refuse to parse MM-DD format month-days for non-ISO, but - // it will happily parse YYYY-MM-DD[u-ca=CAL]. These will be valid ISO dates; but they - // could potentially be out of Temporal range. - let iso = - IsoDate::new_unchecked(parsed.record.year, parsed.record.month, parsed.record.day); - iso.check_within_limits()?; - debug_assert!(iso.check_validity().is_ok(), "Found invalid ParsedDate"); - - // 13. Set result to ISODateToFields(calendar, isoDate, month-day). - - let intermediate = Self::new_unchecked(iso, Calendar::new(parsed.calendar)); - let fields = CalendarFields::from_month_day(&intermediate); - // 14. NOTE: The following operation is called with constrain regardless of the value of overflow, in - // order for the calendar to store a canonical value in the [[Year]] field of the [[ISODate]] internal slot of the result. - // 15. Set isoDate to ? CalendarMonthDayFromFields(calendar, result, constrain). - intermediate - .calendar() - .month_day_from_fields(fields, Overflow::Constrain) - } - - /// Create a `PlainMonthDay` from a `PartialDate` - pub fn from_partial(partial: PartialDate, overflow: Option) -> TemporalResult { - partial - .calendar - .month_day_from_fields(partial.calendar_fields, overflow.unwrap_or_default()) - } - - /// Create a `PlainMonthDay` with the provided fields from a [`PartialDate`]. - pub fn with(&self, fields: CalendarFields, overflow: Option) -> TemporalResult { - // Steps 1-6 are engine specific. - // 5. Let fields be ISODateToFields(calendar, monthDay.[[ISODate]], month-day). - // 6. Let partialMonthDay be ? PrepareCalendarFields(calendar, temporalMonthDayLike, « year, month, month-code, day », « », partial). - // - // NOTE: We assert that partial is not empty per step 6 - if fields.is_empty() { - return Err(TemporalError::r#type().with_enum(ErrorMessage::EmptyFieldsIsInvalid)); - } - - // NOTE: We only need to set month / month_code and day, per spec. - // 7. Set fields to CalendarMergeFields(calendar, fields, partialMonthDay). - let merged_day = fields.day.unwrap_or(self.day()); - let mut merged = fields.with_day(merged_day); - if merged.month.is_none() && merged.month_code.is_none() { - // MonthDay resolution prefers month codes - // (ordinal months work, but require year information, which - // we may not have) - // We should NOT merge over year information even though we have it. - merged = merged.with_month_code(self.month_code()); - } - // Step 8-9 already handled by engine. - // 8. Let resolvedOptions be ? GetOptionsObject(options). - // 9. Let overflow be ? GetTemporalOverflowOption(resolvedOptions). - // 10. Let isoDate be ? CalendarMonthDayFromFields(calendar, fields, overflow). - // 11. Return ! CreateTemporalMonthDay(isoDate, calendar). - self.calendar - .month_day_from_fields(merged, overflow.unwrap_or(Overflow::Constrain)) - } - - /// Returns the string identifier for the current `Calendar`. - #[inline] - #[must_use] - pub fn calendar_id(&self) -> &'static str { - self.calendar.identifier() - } - - /// Returns a reference to `PlainMonthDay`'s inner `Calendar`. - #[inline] - #[must_use] - pub fn calendar(&self) -> &Calendar { - &self.calendar - } - - /// Returns the calendar `monthCode` value of `PlainMonthDay`. - #[inline] - pub fn month_code(&self) -> MonthCode { - self.calendar.month_code(&self.iso) - } - - /// Returns the calendar day value of `PlainMonthDay`. - #[inline] - pub fn day(&self) -> u8 { - self.calendar.day(&self.iso) - } - - /// Returns the internal reference year used by this MonthDay. - #[inline] - pub fn reference_year(&self) -> i32 { - self.calendar.year(&self.iso) - } - - /// Create a [`PlainDate`] from the current `PlainMonthDay`. - pub fn to_plain_date(&self, year: Option) -> TemporalResult { - let year_partial = match &year { - Some(partial) => partial, - None => return Err(TemporalError::r#type().with_message("Year must be provided")), - }; - - // Fallback logic: prefer year, else era/era_year - let mut fields = CalendarFields::new() - .with_month_code(self.month_code()) - .with_day(self.day()); - - if let Some(year) = year_partial.year { - fields.year = Some(year); - } else if let (Some(era), Some(era_year)) = (year_partial.era, year_partial.era_year) { - fields.era = Some(era); - fields.era_year = Some(era_year); - } else { - return Err(TemporalError::r#type() - .with_message("PartialDate must contain a year or era/era_year fields")); - } - - // 8. Let isoDate be ? CalendarDateFromFields(calendar, mergedFields, constrain). - self.calendar.date_from_fields(fields, Overflow::Constrain) - } - - /// Gets the epochMilliseconds represented by this YearMonth in the given timezone - /// (using the reference year, and noon time) - /// - // Useful for implementing HandleDateTimeTemporalYearMonth - pub fn epoch_ns_for_with_provider( - &self, - time_zone: TimeZone, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - // 2. Let isoDateTime be CombineISODateAndTimeRecord(temporalYearMonth.[[ISODate]], NoonTimeRecord()). - let iso = IsoDateTime::new(self.iso, IsoTime::noon())?; - // 3. Let epochNs be ? GetEpochNanosecondsFor(dateTimeFormat.[[TimeZone]], isoDateTime, compatible). - Ok(time_zone - .get_epoch_nanoseconds_for(iso, Disambiguation::Compatible, provider)? - .ns) - } - - /// Gets the EpochNanoseconds represented by this MonthDay - /// (using the reference year, noon time, and UTC timezone) - /// - // Useful for implementing HandleDateTimeTemporalYearMonth - pub fn epoch_ns_for_utc(&self) -> EpochNanoseconds { - // 2. Let isoDateTime be CombineISODateAndTimeRecord(temporalMonthDay.[[ISODate]], NoonTimeRecord()). - let iso = IsoDateTime::new(self.iso, IsoTime::noon()); - debug_assert!(iso.is_ok()); - // 3. Let epochNs be ? GetUTCEpochNanoseconds(isoDateTime). - iso.unwrap_or_default().as_nanoseconds() - } - - /// Creates a RFC9557 IXDTF string from the current `PlainMonthDay`. - pub fn to_ixdtf_string(&self, display_calendar: DisplayCalendar) -> String { - self.to_ixdtf_writeable(display_calendar) - .write_to_string() - .into() - } - - /// Creates a RFC9557 IXDTF [`Writeable`]. - pub fn to_ixdtf_writeable(&self, display_calendar: DisplayCalendar) -> impl Writeable + '_ { - let ixdtf = FormattableMonthDay { - date: FormattableDate(self.iso_year(), self.iso_month(), self.iso.day), - calendar: FormattableCalendar { - show: display_calendar, - calendar: self.calendar().identifier(), - }, - }; - ixdtf - } -} - -impl FromStr for PlainMonthDay { - type Err = TemporalError; - - fn from_str(s: &str) -> Result { - Self::from_utf8(s.as_bytes()) - } -} - -#[cfg(test)] -mod tests { - use super::*; - use crate::Calendar; - use tinystr::tinystr; - - #[test] - fn test_plain_month_day_with() { - let month_day = PlainMonthDay::from_utf8("01-15".as_bytes()).unwrap(); - - let new = month_day - .with(CalendarFields::new().with_day(22), None) - .unwrap(); - assert_eq!( - new.month_code(), - MonthCode::try_from_utf8("M01".as_bytes()).unwrap() - ); - assert_eq!(new.day(), 22,); - - let new = month_day - .with(CalendarFields::new().with_month(12), None) - .unwrap(); - assert_eq!( - new.month_code(), - MonthCode::try_from_utf8("M12".as_bytes()).unwrap() - ); - assert_eq!(new.day(), 15,); - } - - #[test] - fn test_to_plain_date_with_year() { - let month_day = - PlainMonthDay::new_with_overflow(5, 15, Calendar::default(), Overflow::Reject, None) - .unwrap(); - - let fields = CalendarFields::new().with_year(2025); - let plain_date = month_day.to_plain_date(Some(fields)).unwrap(); - assert_eq!(plain_date.iso_year(), 2025); - assert_eq!(plain_date.iso_month(), 5); - assert_eq!(plain_date.iso_day(), 15); - } - - #[test] - fn test_to_plain_date_with_era_and_era_year() { - // Use a calendar that supports era/era_year, e.g., "gregory" - let calendar = Calendar::from_str("gregory").unwrap(); - let month_day = - PlainMonthDay::new_with_overflow(3, 10, calendar.clone(), Overflow::Reject, None) - .unwrap(); - - // Era "ce" and era_year 2020 should resolve to year 2020 in Gregorian - let fields = CalendarFields::new() - .with_era(Some(tinystr!(19, "ce"))) - .with_era_year(Some(2020)); - let plain_date = month_day.to_plain_date(Some(fields)); - // Gregorian calendar in ICU4X may not resolve era/era_year unless year is also provided. - // Accept both Ok and Err, but if Ok, check the values. - match plain_date { - Ok(plain_date) => { - assert_eq!(plain_date.iso_year(), 2020); - assert_eq!(plain_date.iso_month(), 3); - assert_eq!(plain_date.iso_day(), 10); - } - Err(_) => { - // Acceptable if era/era_year fallback is not supported by the calendar impl - } - } - } - - #[test] - fn test_to_plain_date_missing_year_and_era() { - let month_day = - PlainMonthDay::new_with_overflow(7, 4, Calendar::default(), Overflow::Reject, None) - .unwrap(); - - // No year, no era/era_year - let fields = CalendarFields::new(); - let result = month_day.to_plain_date(Some(fields)); - assert!(result.is_err()); - } - - #[test] - fn test_to_plain_date_with_fallback_logic_matches_date() { - // This test ensures that the fallback logic in month_day matches the fallback logic in date.rs - let calendar = Calendar::from_str("gregory").unwrap(); - let month_day = - PlainMonthDay::new_with_overflow(12, 25, calendar.clone(), Overflow::Reject, None) - .unwrap(); - - // Provide only era/era_year, not year - let fields = CalendarFields::new() - .with_era(Some(tinystr!(19, "ce"))) - .with_era_year(Some(1999)); - let plain_date = month_day.to_plain_date(Some(fields)); - match plain_date { - Ok(plain_date) => { - assert_eq!(plain_date.iso_year(), 1999); - assert_eq!(plain_date.iso_month(), 12); - assert_eq!(plain_date.iso_day(), 25); - } - Err(_) => { - // Acceptable if era/era_year fallback is not supported by the calendar impl - } - } - } - #[test] - fn test_valid_strings() { - const TESTS: &[&str] = &[ - "02-29", - "02-28", - "2025-08-05", - "2025-08-05[u-ca=gregory]", - "2024-02-29[u-ca=gregory]", - ]; - for test in TESTS { - assert!(PlainMonthDay::from_utf8(test.as_bytes()).is_ok()); - } - } - #[test] - fn test_invalid_strings() { - const TESTS: &[&str] = &[ - // Out of range - "-99999-01-01", - "-99999-01-01[u-ca=gregory]", - // Not a leap year - "2025-02-29", - "2025-02-29[u-ca=gregory]", - // Format not allowed for non-Gregorian - "02-28[u-ca=gregory]", - ]; - for test in TESTS { - assert!(PlainMonthDay::from_utf8(test.as_bytes()).is_err()); - } - } - - #[test] - /// This test is for calendars where we don't wish to hardcode dates; but we do wish to know - /// that monthcodes can be constructed without issue (currently only UAQ) - fn automated_uaq_reference_year() { - let reference_iso = IsoDate::new_unchecked(1972, 12, 31); - - let calendar = Calendar::new(AnyCalendarKind::HijriUmmAlQura); - for month in 1..=12 { - for day in [29, 30] { - let month_code = crate::builtins::calendar::month_to_month_code(month).unwrap(); - - let calendar_fields = CalendarFields { - month_code: Some(month_code), - day: Some(day), - ..Default::default() - }; - - let md = calendar - .month_day_from_fields(calendar_fields, Overflow::Reject) - .unwrap(); - - assert!( - md.iso <= reference_iso, - "Reference ISO for {month}-{day} must be before 1972-12-31, found, {:?}", - md.iso, - ); - } - } - } - - #[test] - fn manual_test_reference_year() { - // monthCode, day, ISO string, expectedReferenceYear - // Some of these parsed strings are deliberately not using the reference year - // so that we can test all code paths. By default, when adding new strings, it is easier - // to just add the reference year - const TESTS: &[(&str, u8, &str, i32)] = &[ - ("M10", 30, "1868-10-30[u-ca=gregory]", 1972), - ("M08", 8, "1868-10-30[u-ca=indian]", 1894), - ("M09", 21, "2000-12-12[u-ca=indian]", 1894), - // Dates in the earlier half of the year get pushed back a year - ("M10", 22, "2000-01-12[u-ca=indian]", 1893), - ("M01", 11, "2000-03-30[u-ca=persian]", 1351), - ("M09", 22, "2000-12-12[u-ca=persian]", 1351), - ("M12", 29, "2025-03-19[u-ca=persian]", 1350), - // Leap day - ("M12", 30, "2025-03-20[u-ca=persian]", 1350), - ("M01", 1, "2025-03-21[u-ca=persian]", 1351), - ("M01", 1, "2025-03-21[u-ca=persian]", 1351), - ("M01", 1, "1972-01-01[u-ca=roc]", 61), - ("M02", 29, "2024-02-29[u-ca=roc]", 61), - ("M12", 1, "1972-12-01[u-ca=roc]", 61), - ("M01", 1, "1972-09-11[u-ca=coptic]", 1689), - ("M12", 1, "1972-08-07[u-ca=coptic]", 1688), - ("M13", 5, "1972-09-10[u-ca=coptic]", 1688), - ("M13", 6, "1971-09-11[u-ca=coptic]", 1687), - ("M01", 1, "1972-09-11[u-ca=ethiopic]", 1965), - ("M12", 1, "1972-08-07[u-ca=ethiopic]", 1964), - ("M13", 5, "1972-09-10[u-ca=ethiopic]", 1964), - ("M13", 6, "1971-09-11[u-ca=ethiopic]", 1963), - ("M01", 1, "1972-09-11[u-ca=ethioaa]", 7465), - ("M12", 1, "1972-08-07[u-ca=ethioaa]", 7464), - ("M13", 5, "1972-09-10[u-ca=ethioaa]", 7464), - ("M13", 6, "1971-09-11[u-ca=ethioaa]", 7463), - ("M01", 1, "1972-09-09[u-ca=hebrew]", 5733), - ("M02", 29, "1972-11-06[u-ca=hebrew]", 5733), - ("M03", 29, "1972-12-05[u-ca=hebrew]", 5733), - ("M03", 30, "1971-12-18[u-ca=hebrew]", 5732), - ("M05L", 29, "1970-03-07[u-ca=hebrew]", 5730), - ("M07", 1, "1972-03-16[u-ca=hebrew]", 5732), - ("M01", 1, "1972-02-16[u-ca=islamic-civil]", 1392), - ("M12", 29, "1972-02-15[u-ca=islamic-civil]", 1391), - ("M12", 30, "1971-02-26[u-ca=islamic-civil]", 1390), - ("M01", 1, "1972-02-15[u-ca=islamic-tbla]", 1392), - ("M12", 29, "1972-02-14[u-ca=islamic-tbla]", 1391), - ("M12", 30, "1971-02-25[u-ca=islamic-tbla]", 1390), - ]; - let reference_iso = IsoDate::new_unchecked(1972, 12, 31); - for (month_code, day, string, year) in TESTS { - let md = PlainMonthDay::from_str(string).expect(string); - - let calendar_fields = CalendarFields { - month_code: Some(month_code.parse().unwrap()), - day: Some(*day), - ..Default::default() - }; - - let md_from_partial = md - .calendar() - .month_day_from_fields(calendar_fields, Overflow::Reject) - .expect(string); - - assert_eq!( - md, - md_from_partial, - "Parsed {string}, compared with {}: Expected {}-{}, Found {}-{}", - md_from_partial.to_ixdtf_string(Default::default()), - md_from_partial.month_code().0, - md_from_partial.day(), - md.month_code().0, - md.day() - ); - - assert_eq!( - md_from_partial.reference_year(), - *year, - "Reference year for {string} ({month_code}-{day}) must be {year}", - ); - - assert!( - md.iso <= reference_iso && md_from_partial.iso <= reference_iso, - "Reference ISO for {string} ({}-{}) must be before 1972-12-31, found, {:?} / {:?}", - md.month_code().0, - md.day(), - md.iso, - md_from_partial.iso - ); - } - } - - #[test] - fn month_day_range_check_with_year_iso() { - // https://github.com/boa-dev/temporal/issues/688 - let iso = IsoDate::new_unchecked(1972, 1, 1); - let md = PlainMonthDay::new_unchecked(iso, Calendar::ISO); - let mut partial = CalendarFields { - year: Some(-271821), - ..Default::default() - }; - let _ = md.with(partial.clone(), None).expect("should not throw"); - - partial.year = Some(i32::MIN); - - let _ = md.with(partial, None).expect("should not throw"); - let fields = CalendarFields { - year: Some(-27182100), - month: Some(2), - day: Some(29), - ..Default::default() - }; - let mut partial = PartialDate { - calendar_fields: fields, - calendar: Calendar::ISO, - }; - let resolved = PlainMonthDay::from_partial(partial.clone(), Some(Overflow::Constrain)) - .expect("should not throw"); - - assert_eq!( - resolved.day(), - 28, - "Should use provided year for constraining" - ); - - partial.calendar_fields.year = Some(-27182400); - let resolved = PlainMonthDay::from_partial(partial.clone(), Some(Overflow::Constrain)) - .expect("should not throw"); - assert_eq!( - resolved.day(), - 29, - "Should use provided year for constraining" - ); - } - - #[test] - fn month_day_range_check_with_year_non_iso() { - use crate::builtins::calendar::month_to_month_code; - - // https://github.com/boa-dev/temporal/issues/688 - // Here we need to actually make sure that years get range checked for the calendar, - // since the spec wants us to allow YMD inputs that are out of ISO range, *as long as* - // the year can produce in-ISO-range values for *some* MD values. - - let fields = CalendarFields { - year: Some(-27182100), - month_code: Some(month_to_month_code(1).unwrap()), - day: Some(1), - ..Default::default() - }; - let mut partial = PartialDate { - calendar_fields: fields, - calendar: Calendar::CHINESE, - }; - let _ = PlainMonthDay::from_partial(partial.clone(), Some(Overflow::Constrain)) - .expect_err("Should not allow far past dates"); - PlainDate::from_partial(partial.clone(), Some(Overflow::Constrain)) - .expect_err("PlainDate should not be as lenient"); - partial.calendar_fields.year = Some(-271821); - - let _ = PlainMonthDay::from_partial(partial.clone(), Some(Overflow::Constrain)) - .expect("should not throw"); - PlainDate::from_partial(partial.clone(), Some(Overflow::Constrain)) - .expect_err("PlainDate should not be as lenient"); - - let fields = CalendarFields { - year: Some(27576000), - month_code: Some(month_to_month_code(12).unwrap()), - day: Some(30), - ..Default::default() - }; - let mut partial = PartialDate { - calendar_fields: fields, - calendar: Calendar::CHINESE, - }; - let _ = PlainMonthDay::from_partial(partial.clone(), Some(Overflow::Constrain)) - .expect_err("Should not allow far future dates"); - PlainDate::from_partial(partial.clone(), Some(Overflow::Constrain)) - .expect_err("PlainDate should not be as lenient"); - partial.calendar_fields.year = Some(275760); - - let _ = PlainMonthDay::from_partial(partial.clone(), Some(Overflow::Constrain)) - .expect("should not throw"); - PlainDate::from_partial(partial.clone(), Some(Overflow::Constrain)) - .expect_err("PlainDate should not be as lenient"); - } -} diff --git a/src/builtins/core/plain_time.rs b/src/builtins/core/plain_time.rs deleted file mode 100644 index 38d0cd4a3..000000000 --- a/src/builtins/core/plain_time.rs +++ /dev/null @@ -1,885 +0,0 @@ -//! This module implements `Time` and any directly related algorithms. - -use crate::{ - builtins::{ - core::{DateDuration, Duration}, - duration::normalized::InternalDurationRecord, - }, - error::ErrorMessage, - iso::IsoTime, - iso::{IsoDate, IsoDateTime}, - options::{ - DifferenceOperation, DifferenceSettings, Overflow, ResolvedRoundingOptions, - RoundingOptions, ToStringRoundingOptions, Unit, UnitGroup, - }, - parsers::{parse_time, IxdtfStringBuilder}, - unix_time::EpochNanoseconds, - TemporalError, TemporalResult, -}; -use alloc::string::String; -use core::str::FromStr; -use writeable::Writeable; - -use super::{duration::normalized::TimeDuration, PlainDateTime}; - -// TODO: add a PartialSignedTime - -/// A `PartialTime` represents partially filled `Time` fields. -#[derive(Debug, Default, Clone, Copy, PartialEq)] -pub struct PartialTime { - // A potentially set `hour` field. - pub hour: Option, - // A potentially set `minute` field. - pub minute: Option, - // A potentially set `second` field. - pub second: Option, - // A potentially set `millisecond` field. - pub millisecond: Option, - // A potentially set `microsecond` field. - pub microsecond: Option, - // A potentially set `nanosecond` field. - pub nanosecond: Option, -} - -impl PartialTime { - pub fn is_empty(&self) -> bool { - *self == Self::default() - } -} - -/// Convenience methods for building a `PartialTime` -impl PartialTime { - pub const fn new() -> Self { - Self { - hour: None, - minute: None, - second: None, - millisecond: None, - microsecond: None, - nanosecond: None, - } - } - - pub const fn with_hour(mut self, hour: Option) -> Self { - self.hour = hour; - self - } - - pub const fn with_minute(mut self, minute: Option) -> Self { - self.minute = minute; - self - } - - pub const fn with_second(mut self, second: Option) -> Self { - self.second = second; - self - } - - pub const fn with_millisecond(mut self, millisecond: Option) -> Self { - self.millisecond = millisecond; - self - } - - pub const fn with_microsecond(mut self, microsecond: Option) -> Self { - self.microsecond = microsecond; - self - } - - pub const fn with_nanosecond(mut self, nanosecond: Option) -> Self { - self.nanosecond = nanosecond; - self - } -} - -/// The native Rust implementation of `Temporal.PlainTime`. -/// -/// Represents a time of day such as "14:30:45.123" without any date or timezone -/// information. Contains hour, minute, second, and subsecond components with -/// nanosecond precision. -/// -/// Ideal for representing recurring daily events, schedules, or any time value -/// where the specific date is not relevant. -/// -/// ## Examples -/// -/// ### Creating time values -/// -/// ```rust -/// use temporal_rs::PlainTime; -/// -/// // High-precision time -/// let precise_time = PlainTime::try_new( -/// 14, 30, 45, // 2:30:45 PM -/// 123, 456, 789 // subsecond components -/// ).unwrap(); -/// assert_eq!(precise_time.hour(), 14); -/// assert_eq!(precise_time.millisecond(), 123); -/// -/// // Simple time without subseconds -/// let simple = PlainTime::try_new(9, 0, 0, 0, 0, 0).unwrap(); -/// assert_eq!(simple.hour(), 9); -/// ``` -/// -/// ### Parsing ISO 8601 time strings -/// -/// ```rust -/// use temporal_rs::PlainTime; -/// use core::str::FromStr; -/// -/// let time = PlainTime::from_str("14:30:45.123456789").unwrap(); -/// assert_eq!(time.hour(), 14); -/// assert_eq!(time.minute(), 30); -/// assert_eq!(time.second(), 45); -/// assert_eq!(time.millisecond(), 123); -/// assert_eq!(time.microsecond(), 456); -/// assert_eq!(time.nanosecond(), 789); -/// -/// // Also supports time-only portions of ISO 8601 strings -/// let time = PlainTime::from_str("T09:15:30").unwrap(); -/// assert_eq!(time.hour(), 9); -/// assert_eq!(time.minute(), 15); -/// assert_eq!(time.second(), 30); -/// ``` -/// -/// ### Time arithmetic -/// -/// ```rust -/// use temporal_rs::{PlainTime, Duration}; -/// use core::str::FromStr; -/// -/// let time = PlainTime::from_str("12:30:00").unwrap(); -/// -/// // Add 2 hours and 30 minutes -/// let later = time.add(&Duration::from_str("PT2H30M").unwrap()).unwrap(); -/// assert_eq!(later.hour(), 15); -/// assert_eq!(later.minute(), 0); -/// assert_eq!(later.second(), 0); -/// -/// // Calculate difference between times -/// let earlier = PlainTime::from_str("10:00:00").unwrap(); -/// let duration = earlier.until(&time, Default::default()).unwrap(); -/// assert_eq!(duration.hours(), 2); -/// assert_eq!(duration.minutes(), 30); -/// ``` -/// -/// ### Working with partial time fields -/// -/// ```rust -/// use temporal_rs::{PlainTime, partial::PartialTime}; -/// use core::str::FromStr; -/// -/// let time = PlainTime::from_str("12:30:45").unwrap(); -/// -/// // Change only the minute -/// let partial = PartialTime::new().with_minute(Some(15)); -/// let modified = time.with(partial, None).unwrap(); -/// assert_eq!(modified.hour(), 12); // unchanged -/// assert_eq!(modified.minute(), 15); // changed -/// assert_eq!(modified.second(), 45); // unchanged -/// ``` -/// -/// ### Rounding times -/// -/// ```rust -/// use temporal_rs::{PlainTime, options::{Unit, RoundingOptions}}; -/// use core::str::FromStr; -/// -/// let time = PlainTime::from_str("14:23:47.789").unwrap(); -/// -/// let mut options = RoundingOptions::default(); -/// options.smallest_unit = Some(Unit::Minute); -/// // Round to nearest minute -/// let rounded = time.round(options).unwrap(); -/// assert_eq!(rounded.hour(), 14); -/// assert_eq!(rounded.minute(), 24); -/// assert_eq!(rounded.second(), 0); -/// assert_eq!(rounded.millisecond(), 0); -/// ``` -/// -/// ## Reference -/// -/// For more information, see the [MDN documentation][mdn-plaintime]. -/// -/// [mdn-plaintime]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainTime -#[non_exhaustive] -#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] -pub struct PlainTime { - pub(crate) iso: IsoTime, -} - -// ==== Private API ==== - -impl PlainTime { - #[inline] - #[must_use] - /// Creates a new unvalidated `Time`. - pub(crate) fn new_unchecked(iso: IsoTime) -> Self { - Self { iso } - } - - /// Specification equivalent to `4.5.15 AddTime ( time, timeDuration )` - /// - /// Spec: - pub(crate) fn add_normalized_time_duration(&self, norm: TimeDuration) -> (i64, Self) { - // 1. Set second to second + TimeDurationSeconds(norm). - let second = i64::from(self.second()) + norm.seconds(); - // 2. Set nanosecond to nanosecond + TimeDurationSubseconds(norm). - let nanosecond = i32::from(self.nanosecond()) + norm.subseconds(); - // 3. Return BalanceTime(hour, minute, second, millisecond, microsecond, nanosecond). - let (day, balance_result) = IsoTime::balance( - self.hour().into(), - self.minute().into(), - second, - self.millisecond().into(), - self.microsecond().into(), - nanosecond.into(), - ); - - (day, Self::new_unchecked(balance_result)) - } - - /// Adds a `Duration` to the current `Time`. - /// - /// Spec Equivalent: `AddDurationToOrSubtractDurationFromPlainTime`. - pub(crate) fn add_to_time(&self, duration: &Duration) -> TemporalResult { - let (_, result) = IsoTime::balance( - i64::from(self.hour()).saturating_add(duration.hours()), - i64::from(self.minute()).saturating_add(duration.minutes()), - i64::from(self.second()).saturating_add(duration.seconds()), - i64::from(self.millisecond()).saturating_add(duration.milliseconds()), - i128::from(self.microsecond()).saturating_add(duration.microseconds()), - i128::from(self.nanosecond()).saturating_add(duration.nanoseconds()), - ); - - // NOTE (nekevss): IsoTime::balance should never return an invalid `IsoTime` - - Ok(Self::new_unchecked(result)) - } - - // TODO: Migrate to - /// Performs a desired difference op between two `Time`'s, returning the resulting `Duration`. - pub(crate) fn diff_time( - &self, - op: DifferenceOperation, - other: &PlainTime, - settings: DifferenceSettings, - ) -> TemporalResult { - // 1. If operation is SINCE, let sign be -1. Otherwise, let sign be 1. - // 2. Set other to ? ToTemporalTime(other). - // 3. Let resolvedOptions be ? SnapshotOwnProperties(? GetOptionsObject(options), null). - // 4. Let settings be ? GetDifferenceSettings(operation, resolvedOptions, TIME, « », "nanosecond", "hour"). - let resolved = ResolvedRoundingOptions::from_diff_settings( - settings, - op, - UnitGroup::Time, - Unit::Hour, - Unit::Nanosecond, - )?; - // 4. Let timeDuration be DifferenceTime(temporalTime.[[Time]], other.[[Time]]). - let mut normalized_time = self.iso.diff(&other.iso); - // 5. Set timeDuration to ! RoundTimeDuration(timeDuration, settings.[[RoundingIncrement]], settings.[[SmallestUnit]], settings.[[RoundingMode]]). - normalized_time = normalized_time.round(resolved)?; - // 6. Let duration be CombineDateAndTimeDuration(ZeroDateDuration(), timeDuration). - let duration = InternalDurationRecord::combine(DateDuration::default(), normalized_time); - // 7. Let result be ! TemporalDurationFromInternal(duration, settings.[[LargestUnit]]). - let result = Duration::from_internal(duration, resolved.largest_unit)?; - // 8. If operation is since, set result to CreateNegatedTemporalDuration(result). - // 9. Return result. - // 8. Return ! CreateTemporalDuration(0, 0, 0, 0, sign × result.[[Hours]], sign × result.[[Minutes]], sign × result.[[Seconds]], sign × result.[[Milliseconds]], sign × result.[[Microseconds]], sign × result.[[Nanoseconds]]). - match op { - DifferenceOperation::Until => Ok(result), - DifferenceOperation::Since => Ok(result.negated()), - } - } -} - -// ==== Public API ==== - -impl PlainTime { - /// Creates a new `PlainTime`, constraining any field into a valid range. - /// - /// ```rust - /// use temporal_rs::PlainTime; - /// - /// let time = PlainTime::new(23, 59, 59, 999, 999, 999).unwrap(); - /// - /// let constrained_time = PlainTime::new(24, 59, 59, 999, 999, 999).unwrap(); - /// assert_eq!(time, constrained_time); - /// ``` - pub fn new( - hour: u8, - minute: u8, - second: u8, - millisecond: u16, - microsecond: u16, - nanosecond: u16, - ) -> TemporalResult { - Self::new_with_overflow( - hour, - minute, - second, - millisecond, - microsecond, - nanosecond, - Overflow::Constrain, - ) - } - - /// Creates a new `PlainTime`, rejecting any field that is not in a valid range. - /// - /// ```rust - /// use temporal_rs::PlainTime; - /// - /// let time = PlainTime::try_new(23, 59, 59, 999, 999, 999).unwrap(); - /// - /// let invalid_time = PlainTime::try_new(24, 59, 59, 999, 999, 999); - /// assert!(invalid_time.is_err()); - /// ``` - pub fn try_new( - hour: u8, - minute: u8, - second: u8, - millisecond: u16, - microsecond: u16, - nanosecond: u16, - ) -> TemporalResult { - Self::new_with_overflow( - hour, - minute, - second, - millisecond, - microsecond, - nanosecond, - Overflow::Reject, - ) - } - - /// Creates a new `PlainTime` with the provided [`Overflow`] option. - #[inline] - pub fn new_with_overflow( - hour: u8, - minute: u8, - second: u8, - millisecond: u16, - microsecond: u16, - nanosecond: u16, - overflow: Overflow, - ) -> TemporalResult { - let time = IsoTime::new( - hour, - minute, - second, - millisecond, - microsecond, - nanosecond, - overflow, - )?; - Ok(Self::new_unchecked(time)) - } - - /// Creates a new `PlainTime` from a `PartialTime`. - /// - /// ```rust - /// use temporal_rs::{partial::PartialTime, PlainTime}; - /// - /// let partial_time = PartialTime { - /// hour: Some(22), - /// ..Default::default() - /// }; - /// - /// let time = PlainTime::from_partial(partial_time, None).unwrap(); - /// - /// assert_eq!(time.hour(), 22); - /// assert_eq!(time.minute(), 0); - /// assert_eq!(time.second(), 0); - /// assert_eq!(time.millisecond(), 0); - /// assert_eq!(time.microsecond(), 0); - /// assert_eq!(time.nanosecond(), 0); - /// - /// ``` - pub fn from_partial(partial: PartialTime, overflow: Option) -> TemporalResult { - // NOTE: 4.5.12 ToTemporalTimeRecord requires one field to be set. - if partial.is_empty() { - return Err(TemporalError::r#type().with_message("PartialTime cannot be empty.")); - } - - let overflow = overflow.unwrap_or_default(); - let iso = IsoTime::default().with(partial, overflow)?; - Ok(Self::new_unchecked(iso)) - } - - // Converts a UTF-8 encoded string into a `PlainTime`. - pub fn from_utf8(s: &[u8]) -> TemporalResult { - let result = parse_time(s)?; - let iso = IsoTime::from_time_record(result)?; - Ok(Self::new_unchecked(iso)) - } - - /// Creates a new `PlainTime` using the current `PlainTime` fields as a fallback. - /// - /// ```rust - /// use temporal_rs::{partial::PartialTime, PlainTime}; - /// - /// let partial_time = PartialTime { - /// hour: Some(22), - /// ..Default::default() - /// }; - /// - /// let initial = PlainTime::try_new(15, 30, 12, 123, 456, 789).unwrap(); - /// - /// let time = initial.with(partial_time, None).unwrap(); - /// - /// assert_eq!(time.hour(), 22); - /// assert_eq!(time.minute(), 30); - /// assert_eq!(time.second(), 12); - /// assert_eq!(time.millisecond(), 123); - /// assert_eq!(time.microsecond(), 456); - /// assert_eq!(time.nanosecond(), 789); - /// - /// ``` - pub fn with(&self, partial: PartialTime, overflow: Option) -> TemporalResult { - // NOTE: 4.5.12 ToTemporalTimeRecord requires one field to be set. - if partial.is_empty() { - return Err(TemporalError::r#type().with_enum(ErrorMessage::EmptyFieldsIsInvalid)); - } - - let iso = self - .iso - .with(partial, overflow.unwrap_or(Overflow::Constrain))?; - Ok(Self::new_unchecked(iso)) - } - - /// Returns the internal `hour` field. - #[inline] - #[must_use] - pub const fn hour(&self) -> u8 { - self.iso.hour - } - - /// Returns the internal `minute` field. - #[inline] - #[must_use] - pub const fn minute(&self) -> u8 { - self.iso.minute - } - - /// Returns the internal `second` field. - #[inline] - #[must_use] - pub const fn second(&self) -> u8 { - self.iso.second - } - - /// Returns the internal `millisecond` field. - #[inline] - #[must_use] - pub const fn millisecond(&self) -> u16 { - self.iso.millisecond - } - - /// Returns the internal `microsecond` field. - #[inline] - #[must_use] - pub const fn microsecond(&self) -> u16 { - self.iso.microsecond - } - - /// Returns the internal `nanosecond` field. - #[inline] - #[must_use] - pub const fn nanosecond(&self) -> u16 { - self.iso.nanosecond - } - - /// Add a `Duration` to the current `Time`. - pub fn add(&self, duration: &Duration) -> TemporalResult { - self.add_to_time(duration) - } - - /// Subtract a `Duration` to the current `Time`. - pub fn subtract(&self, duration: &Duration) -> TemporalResult { - self.add_to_time(&duration.negated()) - } - - /// Returns the `Duration` until the provided `Time` from the current `Time`. - /// - /// NOTE: `until` assumes the provided other time will occur in the future relative to the current. - #[inline] - pub fn until(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { - self.diff_time(DifferenceOperation::Until, other, settings) - } - - /// Returns the `Duration` since the provided `Time` from the current `Time`. - /// - /// NOTE: `since` assumes the provided other time is in the past relative to the current. - #[inline] - pub fn since(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { - self.diff_time(DifferenceOperation::Since, other, settings) - } - - // TODO (nekevss): optimize and test rounding_increment type (f64 vs. u64). - /// Rounds the current `Time` according to provided options. - pub fn round(&self, options: RoundingOptions) -> TemporalResult { - let resolved = ResolvedRoundingOptions::from_time_options(options)?; - let (_, result) = self.iso.round(resolved)?; - - Ok(Self::new_unchecked(result)) - } - - pub fn to_ixdtf_string(&self, options: ToStringRoundingOptions) -> TemporalResult { - self.to_ixdtf_writeable(options) - .map(|x| x.write_to_string().into()) - } - - #[inline] - pub fn to_ixdtf_writeable( - &self, - options: ToStringRoundingOptions, - ) -> TemporalResult { - let resolved = options.resolve()?; - let (_, result) = self - .iso - .round(ResolvedRoundingOptions::from_to_string_options(&resolved))?; - let builder = IxdtfStringBuilder::default().with_time(result, resolved.precision); - Ok(builder) - } - - /// Gets the EpochNanoseconds represented by this PlainTime - /// (using the Unix epoch, and UTC timezone) - /// - // Useful for implementing HandleDateTimeTemporalTime - pub fn epoch_ns_for_utc(&self) -> EpochNanoseconds { - // 1. Let isoDate be CreateISODateRecord(1970, 1, 1). - // 2. Let isoDateTime be CombineISODateAndTimeRecord(isoDate, temporalTime.[[Time]]). - let iso = IsoDateTime::new(IsoDate::UNIX_EPOCH, self.iso); - debug_assert!(iso.is_ok()); - // 3. Let epochNs be ? GetUTCEpochNanoseconds(isoDateTime). - iso.unwrap_or_default().as_nanoseconds() - } -} - -impl From for PlainTime { - fn from(pdt: PlainDateTime) -> Self { - pdt.to_plain_time() - } -} - -impl FromStr for PlainTime { - type Err = TemporalError; - - fn from_str(s: &str) -> Result { - Self::from_utf8(s.as_bytes()) - } -} - -// ==== Test land ==== - -#[cfg(test)] -mod tests { - use core::str::FromStr; - - use crate::{ - builtins::core::Duration, - iso::IsoTime, - options::{DifferenceSettings, Overflow, RoundingIncrement, RoundingOptions, Unit}, - }; - use num_traits::FromPrimitive; - - use super::PlainTime; - - fn assert_time(result: PlainTime, values: (u8, u8, u8, u16, u16, u16)) { - assert_eq!( - result, - PlainTime { - iso: IsoTime { - hour: values.0, - minute: values.1, - second: values.2, - millisecond: values.3, - microsecond: values.4, - nanosecond: values.5, - } - } - ); - } - - fn assert_duration( - result: Duration, - values: (i64, i64, i64, i64, i64, i64, i64, i64, i128, i128), - ) { - assert_eq!( - ( - result.years(), - result.months(), - result.weeks(), - result.days(), - result.hours(), - result.minutes(), - result.seconds(), - result.milliseconds(), - result.microseconds(), - result.nanoseconds() - ), - values - ) - } - - fn options(unit: Unit, increment: f64) -> RoundingOptions { - RoundingOptions { - smallest_unit: Some(unit), - increment: RoundingIncrement::try_from(increment).ok(), - ..Default::default() - } - } - - #[test] - fn from_str_cast_sanity_test() { - let max = u32::MAX; - let (millisecond, rem) = (max / 1_000_000, max % 1_000_000); - let (microsecond, nanosecond) = (rem / 1_000, rem % 1_000); - - assert!(i32::from_u32(millisecond).is_some()); - assert!(i32::from_u32(microsecond).is_some()); - assert!(i32::from_u32(nanosecond).is_some()); - } - - #[test] - fn basic_parse_time() { - let result = "T12:05:24-05:00[u-ca=iso8601]".parse::(); - assert_time(result.unwrap(), (12, 5, 24, 0, 0, 0)); - - let result = "T12:05:24.123456789-05:00[u-ca=iso8601]".parse::(); - assert_time(result.unwrap(), (12, 5, 24, 123, 456, 789)); - - let result = "2024-05-04 12:05:24.123456789-05:00[u-ca=iso8601]".parse::(); - assert_time(result.unwrap(), (12, 5, 24, 123, 456, 789)); - - let result = "2024-05-04 12:05:24.123456789-05:00[u-ca=iso8601]".parse::(); - assert_time(result.unwrap(), (12, 5, 24, 123, 456, 789)); - } - - #[test] - fn time_round_millisecond() { - let base = PlainTime::new_unchecked(IsoTime::new_unchecked(3, 34, 56, 987, 654, 321)); - - let result_1 = base.round(options(Unit::Millisecond, 1.0)).unwrap(); - assert_time(result_1, (3, 34, 56, 988, 0, 0)); - - let result_2 = base.round(options(Unit::Millisecond, 2.0)).unwrap(); - assert_time(result_2, (3, 34, 56, 988, 0, 0)); - - let result_3 = base.round(options(Unit::Millisecond, 4.0)).unwrap(); - assert_time(result_3, (3, 34, 56, 988, 0, 0)); - - let result_4 = base.round(options(Unit::Millisecond, 5.0)).unwrap(); - assert_time(result_4, (3, 34, 56, 990, 0, 0)); - } - - #[test] - fn time_round_microsecond() { - let base = PlainTime::new_unchecked(IsoTime::new_unchecked(3, 34, 56, 987, 654, 321)); - - let result_1 = base.round(options(Unit::Microsecond, 1.0)).unwrap(); - assert_time(result_1, (3, 34, 56, 987, 654, 0)); - - let result_2 = base.round(options(Unit::Microsecond, 2.0)).unwrap(); - assert_time(result_2, (3, 34, 56, 987, 654, 0)); - - let result_3 = base.round(options(Unit::Microsecond, 4.0)).unwrap(); - assert_time(result_3, (3, 34, 56, 987, 656, 0)); - - let result_4 = base.round(options(Unit::Microsecond, 5.0)).unwrap(); - assert_time(result_4, (3, 34, 56, 987, 655, 0)); - } - - #[test] - fn time_round_nanoseconds() { - let base = PlainTime::new_unchecked(IsoTime::new_unchecked(3, 34, 56, 987, 654, 321)); - - let result_1 = base.round(options(Unit::Nanosecond, 1.0)).unwrap(); - assert_time(result_1, (3, 34, 56, 987, 654, 321)); - - let result_2 = base.round(options(Unit::Nanosecond, 2.0)).unwrap(); - assert_time(result_2, (3, 34, 56, 987, 654, 322)); - - let result_3 = base.round(options(Unit::Nanosecond, 4.0)).unwrap(); - assert_time(result_3, (3, 34, 56, 987, 654, 320)); - - let result_4 = base.round(options(Unit::Nanosecond, 5.0)).unwrap(); - assert_time(result_4, (3, 34, 56, 987, 654, 320)); - } - - #[test] - fn add_duration_basic() { - let base = PlainTime::new_unchecked(IsoTime::new_unchecked(15, 23, 30, 123, 456, 789)); - let result = base.add(&"PT16H".parse::().unwrap()).unwrap(); - - assert_time(result, (7, 23, 30, 123, 456, 789)); - } - - #[test] - fn since_basic() { - let one = - PlainTime::new_with_overflow(15, 23, 30, 123, 456, 789, Overflow::Constrain).unwrap(); - let two = - PlainTime::new_with_overflow(14, 23, 30, 123, 456, 789, Overflow::Constrain).unwrap(); - let three = - PlainTime::new_with_overflow(13, 30, 30, 123, 456, 789, Overflow::Constrain).unwrap(); - - let result = one.since(&two, DifferenceSettings::default()).unwrap(); - assert_eq!(result.hours(), 1); - - let result = two.since(&one, DifferenceSettings::default()).unwrap(); - assert_eq!(result.hours(), -1); - - let result = one.since(&three, DifferenceSettings::default()).unwrap(); - assert_eq!(result.hours(), 1); - assert_eq!(result.minutes(), 53); - - let result = three.since(&one, DifferenceSettings::default()).unwrap(); - assert_eq!(result.hours(), -1); - assert_eq!(result.minutes(), -53); - } - - #[test] - fn until_basic() { - let one = - PlainTime::new_with_overflow(15, 23, 30, 123, 456, 789, Overflow::Constrain).unwrap(); - let two = - PlainTime::new_with_overflow(16, 23, 30, 123, 456, 789, Overflow::Constrain).unwrap(); - let three = - PlainTime::new_with_overflow(17, 0, 30, 123, 456, 789, Overflow::Constrain).unwrap(); - - let result = one.until(&two, DifferenceSettings::default()).unwrap(); - assert_eq!(result.hours(), 1); - - let result = two.until(&one, DifferenceSettings::default()).unwrap(); - assert_eq!(result.hours(), -1); - - let result = one.until(&three, DifferenceSettings::default()).unwrap(); - assert_eq!(result.hours(), 1); - assert_eq!(result.minutes(), 37); - - let result = three.until(&one, DifferenceSettings::default()).unwrap(); - assert_eq!(result.hours(), -1); - assert_eq!(result.minutes(), -37); - } - - #[test] - fn since_rounding() { - let earlier = PlainTime::new(3, 12, 34, 123, 456, 789).unwrap(); - let later = PlainTime::new(13, 47, 57, 988, 655, 322).unwrap(); - - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Second), - increment: Some(RoundingIncrement::try_new(1).unwrap()), - ..Default::default() - }; - assert_duration( - later.since(&earlier, settings).unwrap(), - (0, 0, 0, 0, 10, 35, 23, 0, 0, 0), - ); - - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Second), - increment: Some(RoundingIncrement::try_new(4).unwrap()), - ..Default::default() - }; - assert_duration( - later.since(&earlier, settings).unwrap(), - (0, 0, 0, 0, 10, 35, 20, 0, 0, 0), - ); - } - - #[test] - // test262/test/built-ins/Temporal/PlainTime/prototype/round/roundingincrement-nanoseconds.js - fn rounding_increment_nanos() { - let time = - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 321, Overflow::Constrain).unwrap(); - - assert_eq!( - time.round(options(Unit::Nanosecond, 1.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 321, Overflow::Constrain).unwrap() - ); - assert_eq!( - time.round(options(Unit::Nanosecond, 2.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 322, Overflow::Constrain).unwrap() - ); - assert_eq!( - time.round(options(Unit::Nanosecond, 4.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 320, Overflow::Constrain).unwrap() - ); - assert_eq!( - time.round(options(Unit::Nanosecond, 5.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 320, Overflow::Constrain).unwrap() - ); - assert_eq!( - time.round(options(Unit::Nanosecond, 8.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 320, Overflow::Constrain).unwrap() - ); - assert_eq!( - time.round(options(Unit::Nanosecond, 10.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 320, Overflow::Constrain).unwrap() - ); - assert_eq!( - time.round(options(Unit::Nanosecond, 20.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 320, Overflow::Constrain).unwrap() - ); - assert_eq!( - time.round(options(Unit::Nanosecond, 25.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 325, Overflow::Constrain).unwrap() - ); - assert_eq!( - time.round(options(Unit::Nanosecond, 40.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 320, Overflow::Constrain).unwrap() - ); - assert_eq!( - time.round(options(Unit::Nanosecond, 50.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 300, Overflow::Constrain).unwrap() - ); - assert_eq!( - time.round(options(Unit::Nanosecond, 100.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 300, Overflow::Constrain).unwrap() - ); - assert_eq!( - time.round(options(Unit::Nanosecond, 125.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 375, Overflow::Constrain).unwrap() - ); - assert_eq!( - time.round(options(Unit::Nanosecond, 200.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 400, Overflow::Constrain).unwrap() - ); - assert_eq!( - time.round(options(Unit::Nanosecond, 250.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 250, Overflow::Constrain).unwrap() - ); - assert_eq!( - time.round(options(Unit::Nanosecond, 500.0)).unwrap(), - PlainTime::new_with_overflow(3, 34, 56, 987, 654, 500, Overflow::Constrain).unwrap() - ); - } - - #[test] - fn invalid_time_from_strs() { - // UTC designator case - let invalid_cases = [ - "2019-10-01T09:00:00Z", - "2019-10-01T09:00:00Z[UTC]", - "09:00:00Z[UTC]", - "09:00:00Z", - // built-ins/Temporal/PlainTime/from/argument-string-too-many-decimals - "1970-01-01T00:00:00.1234567891", - "1970-01-01T00:00:00.1234567890", - "1970-01-01T00+00:00:00.1234567891", - "1970-01-01T00+00:00:00.1234567890", - "00:00:00.1234567891", - "00:00:00.1234567890", - "00+00:00:00.1234567891", - "00+00:00:00.1234567890", - ]; - for invalid_str in invalid_cases { - let err = PlainTime::from_str(invalid_str); - assert!(err.is_err()); - } - } -} diff --git a/src/builtins/core/plain_year_month.rs b/src/builtins/core/plain_year_month.rs deleted file mode 100644 index b7ef752e6..000000000 --- a/src/builtins/core/plain_year_month.rs +++ /dev/null @@ -1,1183 +0,0 @@ -//! This module implements `YearMonth` and any directly related algorithms. - -use alloc::string::String; -use core::{cmp::Ordering, str::FromStr}; - -use tinystr::TinyAsciiStr; - -use crate::{ - builtins::calendar::{CalendarFields, YearMonthCalendarFields}, - error::ErrorMessage, - iso::{year_month_within_limits, IsoDate, IsoDateTime, IsoTime}, - options::{ - DifferenceOperation, DifferenceSettings, Disambiguation, DisplayCalendar, Overflow, - ResolvedRoundingOptions, RoundingIncrement, Unit, UnitGroup, - }, - parsed_intermediates::ParsedDate, - parsers::{FormattableCalendar, FormattableDate, FormattableYearMonth}, - provider::{NeverProvider, TimeZoneProvider}, - unix_time::EpochNanoseconds, - Calendar, MonthCode, TemporalError, TemporalResult, TimeZone, -}; - -use super::{duration::normalized::InternalDurationRecord, Duration, PlainDate, PlainDateTime}; -use writeable::Writeable; - -/// A partial PlainYearMonth record -#[derive(Debug, Default, Clone, PartialEq)] -pub struct PartialYearMonth { - pub calendar_fields: YearMonthCalendarFields, - /// The calendar field - pub calendar: Calendar, -} - -/// The native Rust implementation of `Temporal.PlainYearMonth`. -/// -/// Represents a specific month within a specific year, such as "January 2024" -/// or "December 2023", without a specific day component. -/// -/// Useful for representing time periods at month granularity, such as billing -/// periods, reporting intervals, or any scenario where you need to work with -/// entire months rather than specific dates. -/// -/// ## Examples -/// -/// ### Creating a PlainYearMonth -/// -/// ```rust -/// use temporal_rs::{PlainYearMonth, Calendar}; -/// -/// // Create with ISO 8601 calendar -/// let ym = PlainYearMonth::try_new_iso(2024, 3, None).unwrap(); -/// assert_eq!(ym.year(), 2024); -/// assert_eq!(ym.month(), 3); -/// assert_eq!(ym.calendar().identifier(), "iso8601"); -/// -/// // Create with explicit calendar and reference day -/// let ym = PlainYearMonth::try_new(2024, 3, Some(15), Calendar::default()).unwrap(); -/// assert_eq!(ym.year(), 2024); -/// assert_eq!(ym.month(), 3); -/// // Reference day helps with calendar calculations but doesn't affect the YearMonth itself -/// ``` -/// -/// ### Parsing ISO 8601 year-month strings -/// -/// ```rust -/// use temporal_rs::PlainYearMonth; -/// use core::str::FromStr; -/// -/// // Parse year-month strings -/// let ym = PlainYearMonth::from_str("2024-03").unwrap(); -/// assert_eq!(ym.year(), 2024); -/// assert_eq!(ym.month(), 3); -/// -/// // Also accepts full date strings (day is ignored for YearMonth semantics) -/// let ym2 = PlainYearMonth::from_str("2024-03-15").unwrap(); -/// assert_eq!(ym2.year(), 2024); -/// assert_eq!(ym2.month(), 3); -/// assert_eq!(ym, ym2); // equivalent -/// ``` -/// -/// ### YearMonth arithmetic -/// -/// ```rust -/// use temporal_rs::{PlainYearMonth, options::DifferenceSettings}; -/// use core::str::FromStr; -/// -/// let ym1 = PlainYearMonth::from_str("2024-01").unwrap(); -/// let ym2 = PlainYearMonth::from_str("2024-04").unwrap(); -/// -/// // Calculate difference between year-months -/// let duration = ym1.until(&ym2, DifferenceSettings::default()).unwrap(); -/// assert_eq!(duration.months(), 3); // January to April = 3 months -/// ``` -/// -/// ### Working with partial fields -/// -/// ```rust -/// use temporal_rs::{PlainYearMonth, fields::YearMonthCalendarFields}; -/// use core::str::FromStr; -/// -/// let ym = PlainYearMonth::from_str("2024-01").unwrap(); -/// -/// // Change only the year -/// let fields = YearMonthCalendarFields::new().with_year(2025); -/// let modified = ym.with(fields, None).unwrap(); -/// assert_eq!(modified.year(), 2025); -/// assert_eq!(modified.month(), 1); // unchanged -/// -/// // Change only the month -/// let fields = YearMonthCalendarFields::new().with_month(6); -/// let modified = ym.with(fields, None).unwrap(); -/// assert_eq!(modified.year(), 2024); // unchanged -/// assert_eq!(modified.month(), 6); -/// ``` -/// -/// ### Converting to PlainDate -/// -/// ```rust -/// use temporal_rs::{PlainYearMonth, fields::CalendarFields}; -/// use core::str::FromStr; -/// -/// let ym = PlainYearMonth::from_str("2024-03").unwrap(); -/// -/// // Convert to a specific date by providing a day -/// let day_fields = CalendarFields::new().with_day(15); -/// let date = ym.to_plain_date(Some(day_fields)).unwrap(); -/// assert_eq!(date.year(), 2024); -/// assert_eq!(date.month(), 3); -/// assert_eq!(date.day(), 15); -/// ``` -/// -/// ### Calendar properties -/// -/// ```rust -/// use temporal_rs::PlainYearMonth; -/// use core::str::FromStr; -/// -/// let ym = PlainYearMonth::from_str("2024-02").unwrap(); // February 2024 -/// -/// // Get calendar-specific properties -/// assert_eq!(ym.days_in_month(), 29); // 2024 is a leap year -/// assert_eq!(ym.days_in_year(), 366); // leap year has 366 days -/// assert_eq!(ym.months_in_year(), 12); // ISO calendar has 12 months -/// assert!(ym.in_leap_year()); // 2024 is indeed a leap year -/// ``` -/// -/// ## Reference -/// -/// For more information, see the [MDN documentation][mdn-plainyearmonth]. -/// -/// [mdn-plainyearmonth]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/PlainYearMonth -#[non_exhaustive] -#[derive(Debug, Default, Clone, PartialEq, Eq)] -pub struct PlainYearMonth { - pub(crate) iso: IsoDate, - calendar: Calendar, -} - -impl core::fmt::Display for PlainYearMonth { - fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result { - f.write_str(&self.to_ixdtf_string(DisplayCalendar::Auto)) - } -} - -impl PlainYearMonth { - /// Creates an unvalidated `YearMonth`. - #[inline] - #[must_use] - pub(crate) fn new_unchecked(iso: IsoDate, calendar: Calendar) -> Self { - Self { iso, calendar } - } - - /// [`9.5.8 AddDurationToYearMonth(operation, yearMonth, temporalDurationLike, options)`][spec] - /// - /// Internal addition method for adding `Duration` to a `PlainYearMonth` - /// - /// [spec]: - /// - // spec(2025-06-23): https://github.com/tc39/proposal-temporal/tree/ed49b0b482981119c9b5e28b0686d877d4a9bae0 - pub(crate) fn add_duration( - &self, - duration: &Duration, - overflow: Overflow, - ) -> TemporalResult { - // NOTE: The following are engine specific: - // SKIP: 1. Let duration be ? ToTemporalDuration(temporalDurationLike). - - // NOTE: The following operation has been moved to the caller. - // MOVE: 2. If operation is subtract, set duration to CreateNegatedTemporalDuration(duration). - - // 3. Let internalDuration be ToInternalDurationRecord(duration). - let internal_duration = duration.to_internal_duration_record(); - - // 4. Let durationToAdd be internalDuration.[[Date]]. - let duration_to_add = internal_duration.date(); - - // NOTE: The following are engine specific: - // SKIP: 5. Let resolvedOptions be ? GetOptionsObject(options). - // SKIP: 6. Let overflow be ? GetTemporalOverflowOption(resolvedOptions). - - // 7. If durationToAdd.[[Weeks]] ≠ 0, or durationToAdd.[[Days]] ≠ 0, or internalDuration.[[Time]] ≠ 0, - // throw a RangeError exception. - - if duration_to_add.weeks != 0 - || duration_to_add.days != 0 - || internal_duration.normalized_time_duration().0 != 0 - { - return Err(TemporalError::range() - .with_message("Can only add years or months to PlainYearMonth.")); - } - - // 8. Let calendar be yearMonth.[[Calendar]]. - let calendar = self.calendar(); - - // 9. Let fields be ISODateToFields(calendar, yearMonth.[[ISODate]], year-month). - let fields = CalendarFields::from(YearMonthCalendarFields::try_from_year_month(self)?); - - // 10. Set fields.[[Day]] to 1. - let fields = fields.with_day(1); - - // 11. Let date be ? CalendarDateFromFields(calendar, fields, constrain). - let date = calendar.date_from_fields(fields, Overflow::Constrain)?; - - // 12. Let addedDate be ? CalendarDateAdd(calendar, date, durationToAdd, overflow). - let added_date = calendar.date_add(&date.iso, &duration_to_add, overflow)?; - - // 13. Let addedDateFields be ISODateToFields(calendar, addedDate, year-month). - let added_date_fields = YearMonthCalendarFields::new() - .with_month_code(added_date.month_code()) - .with_year(added_date.year()); - - // 14. Let isoDate be ? CalendarYearMonthFromFields(calendar, addedDateFields, overflow). - let iso_date = calendar.year_month_from_fields(added_date_fields, overflow)?; - - // 15. Return ! CreateTemporalYearMonth(isoDate, calendar). - Ok(iso_date) - } - - /// The internal difference operation of `PlainYearMonth`. - pub(crate) fn diff( - &self, - op: DifferenceOperation, - other: &Self, - settings: DifferenceSettings, - ) -> TemporalResult { - // 1. Set other to ? ToTemporalYearMonth(other). - // 2. Let calendar be yearMonth.[[Calendar]]. - // 3. If CalendarEquals(calendar, other.[[Calendar]]) is false, throw a RangeError exception. - if self.calendar().identifier() != other.calendar().identifier() { - return Err(TemporalError::range() - .with_message("Calendars for difference operation are not the same.")); - } - - // Check if weeks or days are disallowed in this operation - if matches!(settings.largest_unit, Some(Unit::Week) | Some(Unit::Day)) - || matches!(settings.smallest_unit, Some(Unit::Week) | Some(Unit::Day)) - { - return Err(TemporalError::range() - .with_message("Weeks and days are not allowed in this operation.")); - } - - // 4. Let resolvedOptions be ? GetOptionsObject(options). - // 5. Let settings be ? GetDifferenceSettings(operation, resolvedOptions, date, « week, day », month, year). - let resolved = ResolvedRoundingOptions::from_diff_settings( - settings, - op, - UnitGroup::Date, - Unit::Year, - Unit::Month, - )?; - - // 6. If CompareISODate(yearMonth.[[ISODate]], other.[[ISODate]]) = 0, then - if self.iso == other.iso { - // a. Return ! CreateTemporalDuration(0, 0, 0, 0, 0, 0, 0, 0, 0, 0). - return Ok(Duration::default()); - } - - // 7. Let thisFields be ISODateToFields(calendar, yearMonth.[[ISODate]], year-month). - // 8. Set thisFields.[[Day]] to 1. - // 9. Let thisDate be ? CalendarDateFromFields(calendar, thisFields, constrain). - let this_fields = CalendarFields::from(YearMonthCalendarFields::try_from_year_month(self)?); - let this_fields = this_fields.with_day(1); - let this_date = self - .calendar() - .date_from_fields(this_fields, Overflow::Constrain)?; - // 10. Let otherFields be ISODateToFields(calendar, other.[[ISODate]], year-month). - // 11. Set otherFields.[[Day]] to 1. - // 12. Let otherDate be ? CalendarDateFromFields(calendar, otherFields, constrain). - let other_fields = - CalendarFields::from(YearMonthCalendarFields::try_from_year_month(other)?); - let other_fields = other_fields.with_day(1); - let other_date = self - .calendar() - .date_from_fields(other_fields, Overflow::Constrain)?; - - // 13. Let dateDifference be CalendarDateUntil(calendar, thisDate, otherDate, settings.[[LargestUnit]]). - let result = - self.calendar() - .date_until(&this_date.iso, &other_date.iso, resolved.largest_unit)?; - // 14. Let yearsMonthsDifference be ! AdjustDateDurationRecord(dateDifference, 0, 0). - let result = result.date().adjust(0, Some(0), None)?; - - // 15. Let duration be CombineDateAndTimeDuration(yearsMonthsDifference, 0). - let mut duration = InternalDurationRecord::from_date_duration(result)?; - - // 16. If settings.[[SmallestUnit]] is not month or settings.[[RoundingIncrement]] ≠ 1, then - if resolved.smallest_unit != Unit::Month || resolved.increment != RoundingIncrement::ONE { - // a. Let isoDateTime be CombineISODateAndTimeRecord(thisDate, MidnightTimeRecord()). - let iso_date_time = IsoDateTime::new_unchecked(this_date.iso, IsoTime::default()); - // b. Let isoDateTimeOther be CombineISODateAndTimeRecord(otherDate, MidnightTimeRecord()). - let target_iso_date_time = - IsoDateTime::new_unchecked(other_date.iso, IsoTime::default()); - // c. Let destEpochNs be GetUTCEpochNanoseconds(isoDateTimeOther). - let dest_epoch_ns = target_iso_date_time.as_nanoseconds(); - // d. Set duration to ? RoundRelativeDuration(duration, destEpochNs, isoDateTime, unset, calendar, resolved.[[LargestUnit]], resolved.[[RoundingIncrement]], resolved.[[SmallestUnit]], resolved.[[RoundingMode]]). - duration = duration.round_relative_duration( - iso_date_time.as_nanoseconds(), - dest_epoch_ns.as_i128(), - &PlainDateTime::new_unchecked(iso_date_time, self.calendar.clone()), - Option::<(&TimeZone, &NeverProvider)>::None, - resolved, - )?; - } - - // 17. Let result be ! TemporalDurationFromInternal(duration, day). - let result = Duration::from_internal(duration, Unit::Day)?; - - // 18. If operation is since, set result to CreateNegatedTemporalDuration(result). - // 19. Return result. - match op { - DifferenceOperation::Since => Ok(result.negated()), - DifferenceOperation::Until => Ok(result), - } - } - - /// Returns the iso month value for this `YearMonth`. - #[inline] - #[must_use] - pub(crate) fn iso_month(&self) -> u8 { - self.iso.month - } - - /// Returns the iso year value for this `YearMonth`. - #[inline] - #[must_use] - pub(crate) fn iso_year(&self) -> i32 { - self.iso.year - } -} - -// ==== Public method implementations ==== - -impl PlainYearMonth { - /// Creates a new `PlainYearMonth`, constraining any arguments that are invalid into a valid range. - #[inline] - pub fn new( - year: i32, - month: u8, - reference_day: Option, - calendar: Calendar, - ) -> TemporalResult { - Self::new_with_overflow(year, month, reference_day, calendar, Overflow::Constrain) - } - - /// Creates a new `PlainYearMonth`, rejecting any date that may be invalid. - #[inline] - pub fn try_new( - year: i32, - month: u8, - reference_day: Option, - calendar: Calendar, - ) -> TemporalResult { - Self::new_with_overflow(year, month, reference_day, calendar, Overflow::Reject) - } - - /// Creates a new `PlainYearMonth` with an ISO 8601 calendar, rejecting any date that may be invalid. - #[inline] - pub fn try_new_iso(year: i32, month: u8, reference_day: Option) -> TemporalResult { - Self::try_new(year, month, reference_day, Calendar::ISO) - } - - /// Creates a new `PlainYearMonth` with an ISO 8601 calendar, constraining any arguments - /// that are invalid into a valid range. - #[inline] - pub fn new_iso(year: i32, month: u8, reference_day: Option) -> TemporalResult { - Self::new(year, month, reference_day, Calendar::ISO) - } - - /// Creates a new valid `YearMonth` with provided [`Overflow`] option. - #[inline] - pub fn new_with_overflow( - year: i32, - month: u8, - reference_day: Option, - calendar: Calendar, - overflow: Overflow, - ) -> TemporalResult { - let day = reference_day.unwrap_or(1); - let iso = IsoDate::regulate(year, month, day, overflow)?; - if !year_month_within_limits(iso.year, iso.month) { - return Err(TemporalError::range().with_message("Exceeded valid range.")); - } - Ok(Self::new_unchecked(iso, calendar)) - } - - /// Create a `PlainYearMonth` from a `PartialYearMonth` - pub fn from_partial( - partial: PartialYearMonth, - overflow: Option, - ) -> TemporalResult { - partial - .calendar - .year_month_from_fields(partial.calendar_fields, overflow.unwrap_or_default()) - } - - // Converts a UTF-8 encoded string into a `PlainYearMonth`. - pub fn from_utf8(s: &[u8]) -> TemporalResult { - let parsed = ParsedDate::year_month_from_utf8(s)?; - Self::from_parsed(parsed) - } - - /// Converts a ParsedDate into a `PlainYearMonth`. - /// - /// Be sure to parse this using [`ParsedDate::year_month_from_utf8()`]~ - pub fn from_parsed(parsed: ParsedDate) -> TemporalResult { - let date = parsed.record; - // The below steps are from `ToTemporalYearMonth` - // 10. Let isoDate be CreateISODateRecord(result.[[Year]], result.[[Month]], result.[[Day]]). - let iso = IsoDate::new_unchecked(date.year, date.month, date.day); - - // 11. If ISOYearMonthWithinLimits(isoDate) is false, throw a RangeError exception. - if !year_month_within_limits(iso.year, iso.month) { - return Err(TemporalError::range().with_message("Exceeded valid range.")); - } - debug_assert!(iso.check_validity().is_ok(), "Found invalid ParsedDate"); - - let intermediate = Self::new_unchecked(iso, Calendar::new(parsed.calendar)); - // 12. Set result to ISODateToFields(calendar, isoDate, year-month). - let fields = YearMonthCalendarFields::try_from_year_month(&intermediate)?; - // 13. NOTE: The following operation is called with constrain regardless of the - // value of overflow, in order for the calendar to store a canonical value in the - // [[Day]] field of the [[ISODate]] internal slot of the result. - // 14. Set isoDate to ? CalendarYearMonthFromFields(calendar, result, constrain). - // 15. Return ! CreateTemporalYearMonth(isoDate, calendar). - intermediate - .calendar() - .year_month_from_fields(fields, Overflow::Constrain) - } - - /// Returns the calendar era of the current `PlainYearMonth` - pub fn era(&self) -> Option> { - self.calendar().era(&self.iso) - } - - /// Returns the calendar era year of the current `PlainYearMonth` - pub fn era_year(&self) -> Option { - self.calendar().era_year(&self.iso) - } - - /// Returns the calendar year of the current `PlainYearMonth` - pub fn year(&self) -> i32 { - self.calendar().year(&self.iso) - } - - /// Returns the calendar month of the current `PlainYearMonth` - pub fn month(&self) -> u8 { - self.calendar().month(&self.iso) - } - - /// Returns the calendar reference day of the current `PlainYearMonth` - pub fn reference_day(&self) -> u8 { - self.calendar().day(&self.iso) - } - - /// Returns the calendar month code of the current `PlainYearMonth` - pub fn month_code(&self) -> MonthCode { - self.calendar().month_code(&self.iso) - } - - /// Returns the days in the calendar year of the current `PlainYearMonth`. - pub fn days_in_year(&self) -> u16 { - self.calendar().days_in_year(&self.iso) - } - - /// Returns the days in the calendar month of the current `PlainYearMonth`. - pub fn days_in_month(&self) -> u16 { - self.calendar().days_in_month(&self.iso) - } - - /// Returns the months in the calendar year of the current `PlainYearMonth`. - pub fn months_in_year(&self) -> u16 { - self.calendar().months_in_year(&self.iso) - } - - #[inline] - #[must_use] - /// Returns a boolean representing whether the current `PlainYearMonth` is in a leap year. - pub fn in_leap_year(&self) -> bool { - self.calendar().in_leap_year(&self.iso) - } -} - -impl PlainYearMonth { - /// Returns the Calendar value. - #[inline] - #[must_use] - pub fn calendar(&self) -> &Calendar { - &self.calendar - } - - /// Returns the string identifier for the current calendar used. - #[inline] - #[must_use] - pub fn calendar_id(&self) -> &'static str { - self.calendar.identifier() - } - - /// Creates a `PlainYearMonth` using the fields provided from a [`PartialYearMonth`] - pub fn with( - &self, - fields: YearMonthCalendarFields, - overflow: Option, - ) -> TemporalResult { - // 1. Let yearMonth be the this value. - // 2. Perform ? RequireInternalSlot(yearMonth, [[InitializedTemporalYearMonth]]). - // 3. If ? IsPartialTemporalObject(temporalYearMonthLike) is false, throw a TypeError exception. - // 4. Let calendar be yearMonth.[[Calendar]]. - // 5. Let fields be ISODateToFields(calendar, yearMonth.[[ISODate]], year-month). - // 6. Let partialYearMonth be ? PrepareCalendarFields(calendar, temporalYearMonthLike, « year, month, month-code », « », partial). - if fields.is_empty() { - return Err(TemporalError::r#type().with_enum(ErrorMessage::EmptyFieldsIsInvalid)); - } - // 7. Set fields to CalendarMergeFields(calendar, fields, partialYearMonth). - // 8. Let resolvedOptions be ? GetOptionsObject(options). - // 9. Let overflow be ? GetTemporalOverflowOption(resolvedOptions). - // 10. Let isoDate be ? CalendarYearMonthFromFields(calendar, fields, overflow). - // 11. Return ! CreateTemporalYearMonth(isoDate, calendar). - let overflow = overflow.unwrap_or(Overflow::Constrain); - self.calendar.year_month_from_fields( - fields.with_fallback_year_month(self, self.calendar.kind())?, - overflow, - ) - } - - /// Compares one `PlainYearMonth` to another `PlainYearMonth` using their - /// `IsoDate` representation. - /// - /// # Note on Ordering. - /// - /// `temporal_rs` does not implement `PartialOrd`/`Ord` as `PlainYearMonth` does - /// not fulfill all the conditions required to implement the traits. However, - /// it is possible to compare `PlainDate`'s as their `IsoDate` representation. - #[inline] - #[must_use] - pub fn compare_iso(&self, other: &Self) -> Ordering { - self.iso.cmp(&other.iso) - } - - /// Adds a [`Duration`] from the current `PlainYearMonth`. - #[inline] - pub fn add(&self, duration: &Duration, overflow: Overflow) -> TemporalResult { - self.add_duration(duration, overflow) - } - - /// Subtracts a [`Duration`] from the current `PlainYearMonth`. - #[inline] - pub fn subtract(&self, duration: &Duration, overflow: Overflow) -> TemporalResult { - self.add_duration(&duration.negated(), overflow) - } - - /// Returns a `Duration` representing the period of time from this `PlainYearMonth` until the other `PlainYearMonth`. - #[inline] - pub fn until(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { - self.diff(DifferenceOperation::Until, other, settings) - } - - /// Returns a `Duration` representing the period of time from this `PlainYearMonth` since the other `PlainYearMonth`. - #[inline] - pub fn since(&self, other: &Self, settings: DifferenceSettings) -> TemporalResult { - self.diff(DifferenceOperation::Since, other, settings) - } - - pub fn to_plain_date(&self, day: Option) -> TemporalResult { - let day_value = match &day { - Some(fields) => fields.day.ok_or_else(|| { - TemporalError::r#type().with_message("CalendarFields must contain a day field") - })?, - None => return Err(TemporalError::r#type().with_message("Day must be provided")), - }; - - let fields = CalendarFields::new() - .with_year(self.year()) - .with_month_code(self.month_code()) - .with_day(day_value); - - // 8. Let isoDate be ? CalendarDateFromFields(calendar, mergedFields, constrain). - self.calendar.date_from_fields(fields, Overflow::Constrain) - } - - /// Gets the epochMilliseconds represented by this YearMonth in the given timezone - /// (using the reference day, and noon time) - pub fn epoch_ns_for_with_provider( - &self, - time_zone: TimeZone, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - // 2. Let isoDateTime be CombineISODateAndTimeRecord(temporalYearMonth.[[ISODate]], NoonTimeRecord()). - let iso = IsoDateTime::new(self.iso, IsoTime::noon())?; - // 3. Let epochNs be ? GetEpochNanosecondsFor(dateTimeFormat.[[TimeZone]], isoDateTime, compatible). - Ok(time_zone - .get_epoch_nanoseconds_for(iso, Disambiguation::Compatible, provider)? - .ns) - } - - /// Gets the EpochNanoseconds represented by this YearMonth - /// (using the reference day, noon time, and UTC timezone) - /// - // Useful for implementing HandleDateTimeTemporalYearMonth - pub fn epoch_ns_for_utc(&self) -> EpochNanoseconds { - // 2. Let isoDateTime be CombineISODateAndTimeRecord(temporalYearMonth.[[ISODate]], NoonTimeRecord()). - // new_unchecked: PYM is supposed to support year-months outside of the ISO range as well as long - // as the year is in range - let iso = IsoDateTime::new_unchecked(self.iso, IsoTime::noon()); - // 3. Let epochNs be ? GetUTCEpochNanoseconds(isoDateTime). - iso.as_nanoseconds() - } - - /// Returns a RFC9557 IXDTF string for the current `PlainYearMonth` - #[inline] - pub fn to_ixdtf_string(&self, display_calendar: DisplayCalendar) -> String { - self.to_ixdtf_writeable(display_calendar) - .write_to_string() - .into() - } - - /// Returns a RFC9557 IXDTF string for the current `PlainYearMonth` as a Writeable - #[inline] - pub fn to_ixdtf_writeable(&self, display_calendar: DisplayCalendar) -> impl Writeable + '_ { - let ixdtf = FormattableYearMonth { - date: FormattableDate(self.iso_year(), self.iso_month(), self.iso.day), - calendar: FormattableCalendar { - show: display_calendar, - calendar: self.calendar().identifier(), - }, - }; - ixdtf - } -} - -impl FromStr for PlainYearMonth { - type Err = TemporalError; - - fn from_str(s: &str) -> Result { - Self::from_utf8(s.as_bytes()) - } -} - -#[cfg(test)] -mod tests { - use core::str::FromStr; - - use super::PlainYearMonth; - - use tinystr::tinystr; - - use super::*; - - #[test] - fn plain_year_month_since_until_diff_tests() { - // Equal year-months - { - let earlier = PlainYearMonth::from_str("2024-03").unwrap(); - let later = PlainYearMonth::from_str("2024-03").unwrap(); - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Month), - ..Default::default() - }; - - let until = earlier.until(&later, settings).unwrap(); - let since = earlier.since(&later, settings).unwrap(); - - assert_eq!(until.days(), 0); - assert_eq!(until.months(), 0); - assert_eq!(until.years(), 0); - - assert_eq!(since.days(), 0); - assert_eq!(since.months(), 0); - assert_eq!(since.years(), 0); - } - - // One month apart - { - let earlier = PlainYearMonth::from_str("2023-01").unwrap(); - let later = PlainYearMonth::from_str("2023-02").unwrap(); - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Month), - ..Default::default() - }; - - let until = earlier.until(&later, settings).unwrap(); - let since = earlier.since(&later, settings).unwrap(); - - assert_eq!(until.months(), 1); - assert_eq!(until.years(), 0); - - assert_eq!(since.months(), -1); - assert_eq!(since.years(), 0); - } - - // Crossing year boundary - { - let earlier = PlainYearMonth::from_str("2022-11").unwrap(); - let later = PlainYearMonth::from_str("2023-02").unwrap(); - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Month), - ..Default::default() - }; - - let until = earlier.until(&later, settings).unwrap(); - let since = earlier.since(&later, settings).unwrap(); - - assert_eq!(until.months(), 3); - assert_eq!(until.years(), 0); - - assert_eq!(since.months(), -3); - assert_eq!(since.years(), 0); - } - - // One year and one month - { - let earlier = PlainYearMonth::from_str("2002-05").unwrap(); - let later = PlainYearMonth::from_str("2003-06").unwrap(); - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Month), - ..Default::default() - }; - - let until = earlier.until(&later, settings).unwrap(); - let since = earlier.since(&later, settings).unwrap(); - - assert_eq!(until.years(), 1); - assert_eq!(until.months(), 1); - assert_eq!(until.days(), 0); - - assert_eq!(since.years(), -1); - assert_eq!(since.months(), -1); - assert_eq!(since.days(), 0); - } - - // One year apart with unit = Year - { - let earlier = PlainYearMonth::from_str("2022-06").unwrap(); - let later = PlainYearMonth::from_str("2023-06").unwrap(); - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Year), - ..Default::default() - }; - - let until = earlier.until(&later, settings).unwrap(); - let since = earlier.since(&later, settings).unwrap(); - - assert_eq!(until.years(), 1); - assert_eq!(until.months(), 0); - - assert_eq!(since.years(), -1); - assert_eq!(since.months(), 0); - } - - // Large year gap - { - let earlier = PlainYearMonth::from_str("1000-01").unwrap(); - let later = PlainYearMonth::from_str("2000-01").unwrap(); - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Year), - ..Default::default() - }; - - let until = earlier.until(&later, settings).unwrap(); - let since = earlier.since(&later, settings).unwrap(); - - assert_eq!(until.years(), 1000); - assert_eq!(since.years(), -1000); - } - - // Lower ISO limit plus one month - // (The lower iso limit iteslf does not work since the day is set to 1) - { - let earlier = PlainYearMonth::from_str("-271821-05").unwrap(); - let later = PlainYearMonth::from_str("-271820-05").unwrap(); - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Year), - ..Default::default() - }; - - let until = earlier.until(&later, settings).unwrap(); - let since = earlier.since(&later, settings).unwrap(); - - assert_eq!(until.years(), 1); - assert_eq!(since.years(), -1); - } - - // Ensure that the day = 1 setting before diff works in non-ISO calendars - { - let earlier = PlainYearMonth::from_str("2000-07-02[u-ca=chinese]").unwrap(); - let later = PlainYearMonth::from_str("2000-12-26[u-ca=chinese]").unwrap(); - assert_eq!(earlier.month(), 6); - assert_eq!(later.month(), 12); - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Month), - ..Default::default() - }; - - let until = earlier.until(&later, settings).unwrap(); - let since = earlier.since(&later, settings).unwrap(); - - assert_eq!(until.months(), 6); - assert_eq!(since.months(), -6); - } - } - #[test] - fn test_diff_with_different_calendars() { - let ym1 = PlainYearMonth::new_with_overflow( - 2021, - 1, - None, - Calendar::from_str("islamic").unwrap(), - Overflow::Reject, - ) - .unwrap(); - - let ym2 = PlainYearMonth::new_with_overflow( - 2021, - 1, - None, - Calendar::from_str("hebrew").unwrap(), - Overflow::Reject, - ) - .unwrap(); - - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Month), - ..Default::default() - }; - - let diff = ym1.until(&ym2, settings); - assert!( - diff.is_err(), - "Expected an error when comparing dates from different calendars" - ); - } - #[test] - fn test_diff_setting() { - let ym1 = PlainYearMonth::from_str("2021-01").unwrap(); - let ym2 = PlainYearMonth::from_str("2023-02").unwrap(); - - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Month), - increment: Some(RoundingIncrement::ONE), - ..Default::default() - }; - - let diff = ym1.until(&ym2, settings).unwrap(); - assert_eq!(diff.months(), 1); - assert_eq!(diff.years(), 2); - } - #[test] - fn test_diff_with_smallest_unit_year() { - let ym1 = PlainYearMonth::from_str("2021-01").unwrap(); - let ym2 = PlainYearMonth::from_str("2023-02").unwrap(); - - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Year), - ..Default::default() - }; - - let diff = ym1.until(&ym2, settings).unwrap(); - assert_eq!(diff.years(), 2); // Rounded to the nearest year - assert_eq!(diff.months(), 0); // Months are ignored - } - - #[test] - fn test_diff_with_smallest_unit_day() { - let ym1 = PlainYearMonth::from_str("2021-01").unwrap(); - let ym2 = PlainYearMonth::from_str("2023-02").unwrap(); - - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Day), - ..Default::default() - }; - - let diff = ym1.until(&ym2, settings); - assert!( - diff.is_err(), - "Expected an error when smallest_unit is set to Day" - ); - } - - #[test] - fn test_diff_with_smallest_unit_week() { - let ym1 = PlainYearMonth::from_str("2021-01").unwrap(); - let ym2 = PlainYearMonth::from_str("2023-02").unwrap(); - - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Week), - ..Default::default() - }; - - let diff = ym1.until(&ym2, settings); - assert!( - diff.is_err(), - "Expected an error when smallest_unit is set to Week" - ); - } - - #[test] - fn test_diff_with_no_rounding_increment() { - let ym1 = PlainYearMonth::from_str("2021-01").unwrap(); - let ym2 = PlainYearMonth::from_str("2023-02").unwrap(); - - let settings = DifferenceSettings { - smallest_unit: Some(Unit::Month), - increment: None, // No rounding increment - ..Default::default() - }; - - let diff = ym1.until(&ym2, settings).unwrap(); - assert_eq!(diff.months(), 1); // Exact difference in months - assert_eq!(diff.years(), 2); // Exact difference in years - } - - #[test] - fn test_plain_year_month_with() { - let base = - PlainYearMonth::new_with_overflow(2025, 3, None, Calendar::default(), Overflow::Reject) - .unwrap(); - - // Year - let fields = YearMonthCalendarFields::new().with_year(2001); - - let with_year = base.with(fields, None).unwrap(); - assert_eq!(with_year.iso_year(), 2001); // year is changed - assert_eq!(with_year.iso_month(), 3); // month is not changed - assert_eq!(with_year.month_code(), MonthCode::from_str("M03").unwrap()); // assert month code has been initialized correctly - - // Month - let fields = YearMonthCalendarFields::new().with_month(2); - let with_month = base.with(fields, None).unwrap(); - assert_eq!(with_month.iso_year(), 2025); // year is not changed - assert_eq!(with_month.iso_month(), 2); // month is changed - assert_eq!(with_month.month_code(), MonthCode::from_str("M02").unwrap()); // assert month code has changed as well as month - - // Month Code - let fields = YearMonthCalendarFields::new().with_month_code(MonthCode(tinystr!(4, "M05"))); // change month to May (5) - let with_month_code = base.with(fields, None).unwrap(); - assert_eq!(with_month_code.iso_year(), 2025); // year is not changed - assert_eq!( - with_month_code.month_code(), - MonthCode::from_str("M05").unwrap() - ); // assert month code has changed - assert_eq!(with_month_code.iso_month(), 5); // month is changed as well - - // All - let fields = YearMonthCalendarFields::new().with_year(2001).with_month(2); - let with_all = base.with(fields, None).unwrap(); - assert_eq!(with_all.iso_year(), 2001); // year is changed - assert_eq!(with_all.iso_month(), 2); // month is changed - assert_eq!(with_all.iso.day, 1); // day is ignored - - // Empty fields -> throws error - let fields = YearMonthCalendarFields::new(); - let empty = base.with(fields, None); - assert!(empty.is_err()); - } - - #[test] - fn basic_from_str() { - let valid_strings = [ - "-271821-04", - "-271821-04-01", - "-271821-04-01T00:00", - "+275760-09", - "+275760-09-30", - "+275760-09-30T23:59:59.999999999", - ]; - - for valid_case in valid_strings { - let ym = PlainYearMonth::from_str(valid_case); - assert!(ym.is_ok()); - } - } - - #[test] - fn invalid_from_str() { - let invalid_strings = [ - "-271821-03-31", - "-271821-03-31T23:59:59.999999999", - "+275760-10", - "+275760-10-01", - "+275760-10-01T00:00", - "1976-11[u-ca=hebrew]", - // built-ins/Temporal/PlainYearMonth/from/argument-string-too-many-decimals - "1970-01-01T00:00:00.1234567891", - "1970-01-01T00:00:00.1234567890", - "1970-01-01T00+00:00:00.1234567891", - "1970-01-01T00+00:00:00.1234567890", - ]; - - for invalid_case in invalid_strings { - let err = PlainYearMonth::from_str(invalid_case); - assert!(err.is_err()); - } - - let invalid_strings = ["2019-10-01T09:00:00Z", "2019-10-01T09:00:00Z[UTC]"]; - - for invalid_case in invalid_strings { - let err = PlainYearMonth::from_str(invalid_case); - assert!(err.is_err()); - } - } - - #[test] - fn test_to_plain_date() { - let year_month = PlainYearMonth::new_with_overflow( - 2023, // year - 5, // month - None, // reference_day - Calendar::default(), - Overflow::Reject, - ) - .unwrap(); - - let fields = CalendarFields::new().with_day(3); - let plain_date = year_month.to_plain_date(Some(fields)).unwrap(); - assert_eq!(plain_date.iso_year(), 2023); - assert_eq!(plain_date.iso_month(), 5); - assert_eq!(plain_date.iso_day(), 3); - } - - #[test] - fn test_partial_year_month_try_from_plain() { - let ym = PlainYearMonth::from_str("2024-05").unwrap(); - let partial = YearMonthCalendarFields::try_from_year_month(&ym).unwrap(); - assert_eq!(partial.year, Some(2024)); - assert_eq!(partial.month, Some(5)); - assert_eq!( - partial.month_code, - Some(MonthCode::from_str("M05").unwrap()) - ); - assert_eq!(partial.era, None); - assert_eq!(partial.era_year, None); - } - - #[test] - fn test_year_month_fields_to_calendar_fields_round_trip() { - let partial = YearMonthCalendarFields::new() - .with_year(1999) - .with_month(12); - let pd: CalendarFields = partial.clone().into(); - let reconstructed: YearMonthCalendarFields = pd.into(); - assert_eq!(partial, reconstructed); - } - - #[test] - fn test_partial_year_month_builder_methods() { - let calendar = Calendar::from_str("gregory").unwrap(); - let calendar_fields = YearMonthCalendarFields::new() - .with_year(2020) - .with_month(7) - .with_month_code(MonthCode::from_str("M07").unwrap()) - .with_era(Some(tinystr!(19, "ce"))) - .with_era_year(Some(2020)); - - let partial = PartialYearMonth { - calendar_fields, - calendar: calendar.clone(), - }; - - assert_eq!(partial.calendar_fields.year, Some(2020)); - assert_eq!(partial.calendar_fields.month, Some(7)); - assert_eq!( - partial.calendar_fields.month_code, - Some(MonthCode::from_str("M07").unwrap()) - ); - assert_eq!(partial.calendar_fields.era, Some(tinystr!(19, "ce"))); - assert_eq!(partial.calendar_fields.era_year, Some(2020)); - assert_eq!(partial.calendar, calendar); - } - - #[test] - fn test_year_month_diff_range() { - // built-ins/Temporal/PlainYearMonth/prototype/since/throws-if-year-outside-valid-iso-range - - let min = PlainYearMonth::new(-271821, 4, None, Default::default()).unwrap(); - let max = PlainYearMonth::new(275760, 9, None, Default::default()).unwrap(); - let epoch = PlainYearMonth::new(1970, 1, None, Default::default()).unwrap(); - let _ = min.since(&min, Default::default()).unwrap(); - assert!(min.since(&max, Default::default()).is_err()); - assert!(min.since(&epoch, Default::default()).is_err()); - } - - #[test] - fn test_reference_day() { - // Note: Japanese reference days are also day 1 even at era boundaries - // https://github.com/tc39/proposal-temporal/issues/3150 - assert_eq!( - PlainYearMonth::from_str("1868-10-30[u-ca=japanese]") - .unwrap() - .reference_day(), - 1 - ); - // Still happens for dates that are in the previous era but same month - assert_eq!( - PlainYearMonth::from_str("1868-10-20[u-ca=japanese]") - .unwrap() - .reference_day(), - 1 - ); - // Won't happen for dates in other months - assert_eq!( - PlainYearMonth::from_str("1868-09-30[u-ca=japanese]") - .unwrap() - .reference_day(), - 1 - ); - - // Always 1 in other calendars - assert_eq!( - PlainYearMonth::from_str("2000-09-30[u-ca=chinese]") - .unwrap() - .reference_day(), - 1 - ); - assert_eq!( - PlainYearMonth::from_str("2000-09-30[u-ca=hebrew]") - .unwrap() - .reference_day(), - 1 - ); - } - - #[test] - /// https://g-issues.chromium.org/issues/443275104 - fn test_max_rounding_increment_auto() { - let ym = PlainYearMonth::try_new_iso(1639, 11, None).unwrap(); - assert!(ym - .until( - &ym, - DifferenceSettings { - smallest_unit: Some(Unit::Auto), - ..Default::default() - } - ) - .is_err()); - } - - #[test] - fn test_subtract_one_month() { - // https://github.com/boa-dev/temporal/issues/643 - let chinese_m12_1 = PlainYearMonth::from_str("2002-01-13[u-ca=chinese]").unwrap(); - let minus_one_month = Duration::from_str("P1M").unwrap(); - let prev = chinese_m12_1 - .subtract(&minus_one_month, Overflow::Constrain) - .unwrap(); - assert_eq!( - prev.to_ixdtf_string(Default::default()), - "2001-12-15[u-ca=chinese]" - ); - } - - #[test] - /// Should be able to subtract years from a leap month - /// - /// Regression test for bugs fixed by - fn test_subtract_years_from_leap_month() { - let dangi_m03l_2012 = PlainYearMonth::from_str("2012-04-21[u-ca=dangi]").unwrap(); - let minus_19y = Duration::from_str("-P19Y").unwrap(); - let prev = dangi_m03l_2012.add(&minus_19y, Overflow::Reject).unwrap(); - assert_eq!( - prev.to_ixdtf_string(Default::default()), - "1993-04-22[u-ca=dangi]" - ); - } -} diff --git a/src/builtins/core/zoned_date_time.rs b/src/builtins/core/zoned_date_time.rs deleted file mode 100644 index a5b1199d9..000000000 --- a/src/builtins/core/zoned_date_time.rs +++ /dev/null @@ -1,1602 +0,0 @@ -//! This module contains the core implementation of the `ZonedDateTime` -//! builtin type. - -use crate::{provider::EpochNanosecondsAndOffset, NonZeroSign}; -use alloc::string::String; -use core::{cmp::Ordering, num::NonZeroU128}; -use tinystr::TinyAsciiStr; - -use crate::{ - builtins::{ - calendar::CalendarFields, - core::{ - calendar::Calendar, - duration::normalized::{InternalDurationRecord, TimeDuration}, - time_zone::{TimeZone, UtcOffset}, - Duration, Instant, PlainDate, PlainDateTime, PlainTime, - }, - }, - error::ErrorMessage, - iso::{IsoDate, IsoDateTime, IsoTime}, - options::{ - DifferenceOperation, DifferenceSettings, Disambiguation, DisplayCalendar, DisplayOffset, - DisplayTimeZone, OffsetDisambiguation, Overflow, ResolvedRoundingOptions, - RoundingIncrement, RoundingMode, RoundingOptions, ToStringRoundingOptions, Unit, UnitGroup, - }, - parsed_intermediates::ParsedZonedDateTime, - parsers::{FormattableOffset, FormattableTime, IxdtfStringBuilder, Precision}, - partial::PartialTime, - primitive::FiniteF64, - provider::{TimeZoneProvider, TransitionDirection, UtcOffsetSeconds}, - rounding::IncrementRounder, - temporal_assert, - unix_time::EpochNanoseconds, - MonthCode, Sign, TemporalError, TemporalResult, TemporalUnwrap, -}; - -#[cfg(test)] -mod tests; - -/// A struct representing a partial `ZonedDateTime`. -#[derive(Debug, Default, Clone, PartialEq)] -pub struct PartialZonedDateTime { - /// The `ZonedDateTimeFields` portion of a `PartialZonedDateTime` - pub fields: ZonedDateTimeFields, - /// The time zone value of a partial time zone. - pub timezone: Option, - /// The calendar for the `PartialZonedDateTime`. - pub calendar: Calendar, -} - -impl PartialZonedDateTime { - pub fn is_empty(&self) -> bool { - self.fields.is_empty() && self.timezone.is_none() - } - - pub const fn new() -> Self { - Self { - fields: ZonedDateTimeFields::new(), - timezone: None, - calendar: Calendar::ISO, - } - } - - pub const fn with_calendar_fields(mut self, fields: CalendarFields) -> Self { - self.fields.calendar_fields = fields; - self - } - - pub const fn with_time(mut self, time: PartialTime) -> Self { - self.fields.time = time; - self - } - - pub const fn with_offset(mut self, offset: UtcOffset) -> Self { - self.fields.offset = Some(offset); - self - } - - pub fn with_timezone(mut self, timezone: Option) -> Self { - self.timezone = timezone; - self - } -} - -#[derive(Debug, Default, Clone, PartialEq)] -pub struct ZonedDateTimeFields { - pub calendar_fields: CalendarFields, - - pub time: PartialTime, - - /// An optional offset string - pub offset: Option, -} - -impl ZonedDateTimeFields { - pub const fn new() -> Self { - Self { - calendar_fields: CalendarFields::new(), - time: PartialTime::new(), - offset: None, - } - } - - pub fn is_empty(&self) -> bool { - self.calendar_fields.is_empty() && self.time.is_empty() && self.offset.is_none() - } -} - -/// The native Rust implementation of a Temporal `ZonedDateTime`. -/// -/// A `ZonedDateTime` represents a date and time in a specific time zone and calendar. -/// Unlike `PlainDateTime`, it represents an exact moment in time by combining a -/// `PlainDateTime` with time zone information. It is internally represented as -/// an instant (epoch nanoseconds) along with calendar and time zone data. -/// -/// Since `ZonedDateTime` includes timezone information, it can handle daylight saving time -/// transitions and timezone offset changes automatically. The type requires a timezone -/// data provider (implementing `TimeZoneProvider`) for most operations, which supplies -/// the necessary timezone rules and historical data. -/// -/// Unlike `PlainDateTime` which can be ambiguous during DST transitions, `ZonedDateTime` -/// always represents an unambiguous moment in time. -/// -/// ## Time zone provider API -/// -/// The core implementation of `ZonedDateTime` uses time zone provider APIs denoted by -/// a `*_with_provider` suffix. This means a provider that implements the `TimeZoneProvider` -/// trait must be provided for timezone-aware operations. -/// -/// Time zone providers available: -/// - **File system provider**: `FsTzdbProvider` (enabled with `tzdb` feature) -/// - **Compiled data provider**: Default implementation (enabled with `compiled_data` feature) -/// -/// ## Examples -/// -/// ### Creating a ZonedDateTime -/// -/// ```rust -/// # #[cfg(feature = "compiled_data")] { -/// use temporal_rs::{Calendar, Instant, TimeZone, ZonedDateTime}; -/// -/// // Create from epoch nanoseconds -/// let zdt = ZonedDateTime::try_new( -/// 0, // epoch nanoseconds (Unix epoch) -/// TimeZone::utc(), // UTC timezone -/// Calendar::default(), // ISO 8601 calendar -/// ).unwrap(); -/// -/// assert_eq!(zdt.epoch_milliseconds(), 0); -/// assert_eq!(zdt.epoch_nanoseconds().as_i128(), 0); -/// assert_eq!(zdt.time_zone().identifier().unwrap(), "UTC"); -/// assert_eq!(zdt.calendar().identifier(), "iso8601"); -/// # } -/// ``` -/// -/// ### Working with timezones (requires provider, or compiled data) -/// -/// ```rust -/// # #[cfg(feature = "compiled_data")] { -/// use temporal_rs::{ZonedDateTime, TimeZone, Calendar}; -/// -/// let time_zone = TimeZone::try_from_str("America/New_York").unwrap(); -/// let zoned_date_time = ZonedDateTime::try_new( -/// 1609459200000000000, // 2021-01-01T00:00:00Z -/// time_zone, -/// Calendar::default(), -/// ).unwrap(); -/// -/// // Note: This would be December 31, 2020 19:00 in New York (EST) -/// assert_eq!(zoned_date_time.year(), 2020); -/// assert_eq!(zoned_date_time.month(), 12); -/// assert_eq!(zoned_date_time.day(), 31); -/// assert_eq!(zoned_date_time.hour(), 19); -/// # } -/// ``` -/// -/// ### ZonedDateTime arithmetic (requires provider) -/// -/// ```rust -/// # #[cfg(feature = "compiled_data")] { -/// use temporal_rs::{ZonedDateTime, Duration, TimeZone, Calendar}; -/// use std::str::FromStr; -/// -/// let time_zone = TimeZone::try_from_str("Europe/London").unwrap(); -/// let zdt = ZonedDateTime::try_new( -/// 1609459200000000000, // 2021-01-01T00:00:00Z -/// time_zone, -/// Calendar::default(), -/// ).unwrap(); -/// -/// // Add 6 months -/// let later = zdt.add( -/// &Duration::from_str("P6M").unwrap(), -/// None, -/// ).unwrap(); -/// -/// assert_eq!(later.month(), 7); // July -/// # } -/// ``` -/// -/// ### Converting from PlainDateTime -/// -/// ```rust -/// # #[cfg(feature = "compiled_data")] { -/// use temporal_rs::{PlainDateTime, ZonedDateTime, TimeZone, options::Disambiguation}; -/// use std::str::FromStr; -/// -/// let plain_date_time = PlainDateTime::from_str("2024-03-15T14:30:00").unwrap(); -/// let time_zone = TimeZone::try_from_str("America/Los_Angeles").unwrap(); -/// -/// let zdt = plain_date_time.to_zoned_date_time( -/// time_zone, -/// Disambiguation::Compatible, -/// ).unwrap(); -/// -/// // Now we have an exact moment in time in the LA timezone -/// assert_eq!(zdt.time_zone().identifier().unwrap(), "America/Los_Angeles"); -/// # } -/// ``` -/// -/// ### String formatting (requires provider) -/// -/// ```rust -/// # #[cfg(feature = "compiled_data")] { -/// use temporal_rs::{ZonedDateTime, Calendar, TimeZone}; -/// use temporal_rs::options::{DisplayOffset, DisplayTimeZone, DisplayCalendar, ToStringRoundingOptions}; -/// -/// let zdt = ZonedDateTime::try_new( -/// 1609459200000000000, -/// TimeZone::try_from_str("Asia/Tokyo").unwrap(), -/// Calendar::default(), -/// ).unwrap(); -/// -/// let iso_string = zdt.to_ixdtf_string( -/// DisplayOffset::default(), -/// DisplayTimeZone::default(), -/// DisplayCalendar::default(), -/// ToStringRoundingOptions::default() -/// ).unwrap(); -/// -/// // Results in something like "2021-01-01T09:00:00+09:00[Asia/Tokyo]" -/// assert!(iso_string.contains("2021-01-01")); -/// assert!(iso_string.contains("+09:00")); -/// assert!(iso_string.contains("[Asia/Tokyo]")); -/// # } -/// ``` -/// -/// ## Reference -/// -/// For more information, see the [MDN documentation][mdn-zoneddatetime]. -/// -/// [mdn-zoneddatetime]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Temporal/ZonedDateTime -#[non_exhaustive] -#[derive(Debug, Clone)] -pub struct ZonedDateTime { - instant: Instant, - calendar: Calendar, - time_zone: TimeZone, - cached_offset: UtcOffset, -} - -// ==== Private API ==== - -impl ZonedDateTime { - /// Creates a `ZonedDateTime` without validating the input. - #[inline] - #[must_use] - pub(crate) fn new_unchecked( - instant: Instant, - time_zone: TimeZone, - calendar: Calendar, - cached_offset: UtcOffsetSeconds, - ) -> Self { - Self { - instant, - calendar, - time_zone, - cached_offset: cached_offset.into(), - } - } - - pub(crate) fn new_unchecked_with_provider( - instant: Instant, - time_zone: TimeZone, - calendar: Calendar, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - let offset = time_zone - .get_utc_offset_for(instant.epoch_nanoseconds().0, provider) - .temporal_unwrap()?; - Ok(Self { - instant, - calendar, - time_zone, - cached_offset: offset, - }) - } - - /// Equivalent to self.tz.get_iso_datetime_for(&self.instant, provider) - /// - /// (which is GetISODateTimeFor(self.[[TimeZone]], self.[[EpochNanoseconds]]).) - pub(crate) fn get_iso_datetime(&self) -> IsoDateTime { - self.cached_offset.get_iso_datetime_for(&self.instant) - } - - pub(crate) fn add_zoned_date_time( - &self, - duration: InternalDurationRecord, - overflow: Overflow, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - // 1. If DateDurationSign(duration.[[Date]]) = 0, then - if duration.date().sign() == Sign::Zero { - // a. Return ? AddInstant(epochNanoseconds, duration.[[Time]]). - return self - .instant - .add_to_instant(&duration.normalized_time_duration()); - } - // 2. Let isoDateTime be GetISODateTimeFor(timeZone, epochNanoseconds). - let iso_datetime = self.get_iso_datetime(); - // 3. Let addedDate be ? CalendarDateAdd(calendar, isoDateTime.[[ISODate]], duration.[[Date]], overflow). - let added_date = - self.calendar() - .date_add(&iso_datetime.date, &duration.date(), overflow)?; - // 4. Let intermediateDateTime be CombineISODateAndTimeRecord(addedDate, isoDateTime.[[Time]]). - let intermediate = IsoDateTime::new_unchecked(added_date.iso, iso_datetime.time); - // 5. If ISODateTimeWithinLimits(intermediateDateTime) is false, throw a RangeError exception. - if !intermediate.is_within_limits() { - return Err( - TemporalError::range().with_enum(ErrorMessage::IntermediateDateTimeOutOfRange) - ); - } - // 6. Let intermediateNs be ! GetEpochNanosecondsFor(timeZone, intermediateDateTime, compatible). - let intermediate_ns = self.time_zone().get_epoch_nanoseconds_for( - intermediate, - Disambiguation::Compatible, - provider, - )?; - - // 7. Return ? AddInstant(intermediateNs, duration.[[Time]]). - Instant::from(intermediate_ns.ns).add_to_instant(&duration.normalized_time_duration()) - } - - /// Adds a duration to the current `ZonedDateTime`, returning the resulting `ZonedDateTime`. - /// - /// Aligns with Abstract Operation 6.5.10 - #[inline] - pub(crate) fn add_internal( - &self, - duration: &Duration, - overflow: Overflow, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - // 1. Let duration be ? ToTemporalDuration(temporalDurationLike). - // 2. If operation is subtract, set duration to CreateNegatedTemporalDuration(duration). - // 3. Let resolvedOptions be ? GetOptionsObject(options). - // 4. Let overflow be ? GetTemporalOverflowOption(resolvedOptions). - // 5. Let calendar be zonedDateTime.[[Calendar]]. - // 6. Let timeZone be zonedDateTime.[[TimeZone]]. - // 7. Let internalDuration be ToInternalDurationRecord(duration). - let internal_duration = duration.to_internal_duration_record(); - // 8. Let epochNanoseconds be ? AddZonedDateTime(zonedDateTime.[[EpochNanoseconds]], timeZone, calendar, internalDuration, overflow). - let epoch_ns = self.add_zoned_date_time(internal_duration, overflow, provider)?; - // 9. Return ! CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar). - Self::new_unchecked_with_provider( - epoch_ns, - *self.time_zone(), - self.calendar().clone(), - provider, - ) - } - - /// Internal representation of Abstract Op 6.5.7 - pub(crate) fn diff_with_rounding( - &self, - other: &Instant, - resolved_options: ResolvedRoundingOptions, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - // 1. If UnitCategory(largestUnit) is time, then - if resolved_options.largest_unit.is_time_unit() { - // a. Return DifferenceInstant(ns1, ns2, roundingIncrement, smallestUnit, roundingMode). - return self.instant.diff_instant_internal(other, resolved_options); - } - // 2. let difference be ? differencezoneddatetime(ns1, ns2, timezone, calendar, largestunit). - let diff = self.diff_zoned_datetime(other, resolved_options.largest_unit, provider)?; - // 3. if smallestunit is nanosecond and roundingincrement = 1, return difference. - if resolved_options.smallest_unit == Unit::Nanosecond - && resolved_options.increment == RoundingIncrement::ONE - { - return Ok(diff); - } - // 4. let datetime be getisodatetimefor(timezone, ns1). - let iso = self.get_iso_datetime(); - // 5. Return ? RoundRelativeDuration(difference, ns2, dateTime, timeZone, calendar, largestUnit, roundingIncrement, smallestUnit, roundingMode). - diff.round_relative_duration( - *self.epoch_nanoseconds(), - other.epoch_nanoseconds().as_i128(), - &PlainDateTime::new_unchecked(iso, self.calendar().clone()), - Some((self.time_zone(), provider)), - resolved_options, - ) - } - - /// Internal representation of Abstract Op 6.5.8 - pub(crate) fn diff_with_total( - &self, - other: &Instant, - unit: Unit, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - // 1. If UnitCategory(unit) is time, then - if unit.is_time_unit() { - // a. Let difference be TimeDurationFromEpochNanosecondsDifference(ns2, ns1). - let diff = TimeDuration::from_nanosecond_difference( - other.epoch_nanoseconds().as_i128(), - self.epoch_nanoseconds().as_i128(), - )?; - // b. Return TotalTimeDuration(difference, unit). - return diff.total(unit); - } - - // 2. Let difference be ? DifferenceZonedDateTime(ns1, ns2, timeZone, calendar, unit). - let diff = self.diff_zoned_datetime(other, unit, provider)?; - // 3. Let dateTime be GetISODateTimeFor(timeZone, ns1). - let iso = self.get_iso_datetime(); - // 4. Return ? TotalRelativeDuration(difference, ns2, dateTime, timeZone, calendar, unit). - diff.total_relative_duration( - *self.epoch_nanoseconds(), - other.epoch_nanoseconds().as_i128(), - &PlainDateTime::new_unchecked(iso, self.calendar().clone()), - Some((self.time_zone(), provider)), - unit, - ) - } - - pub(crate) fn diff_zoned_datetime( - &self, - other: &Instant, - largest_unit: Unit, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - // 1. If ns1 = ns2, return CombineDateAndTimeDuration(ZeroDateDuration(), 0). - if self.epoch_nanoseconds() == other.epoch_nanoseconds() { - return Ok(InternalDurationRecord::default()); - } - // 2. Let startDateTime be GetISODateTimeFor(timeZone, ns1). - let start = self.get_iso_datetime(); - // 3. Let endDateTime be GetISODateTimeFor(timeZone, ns2). - let end = self.time_zone.get_iso_datetime_for(other, provider)?; - // 4. If CompareISODate(startDateTime.[[ISODate]], endDateTime.[[ISODate]]) = 0, then - if start.date == end.date { - // a. Let timeDuration be TimeDurationFromEpochNanosecondsDifference(ns2, ns1). - let time_duration = TimeDuration::from_nanosecond_difference( - other.epoch_nanoseconds().as_i128(), - self.epoch_nanoseconds().as_i128(), - )?; - // b. Return CombineDateAndTimeDuration(ZeroDateDuration(), timeDuration). - return InternalDurationRecord::new(Default::default(), time_duration); - } - // 5. If ns2 - ns1 < 0, let sign be -1; else let sign be 1. - let diff = other.epoch_nanoseconds().as_i128() - self.epoch_nanoseconds().as_i128(); - let sign = NonZeroSign::from(diff.signum() as i8); - // 6. If sign = 1, let maxDayCorrection be 2; else let maxDayCorrection be 1. - let max_correction = match sign { - NonZeroSign::Positive => 2, - NonZeroSign::Negative => 1, - }; - // 7. Let dayCorrection be 0. - // 8. Let timeDuration be DifferenceTime(startDateTime.[[Time]], endDateTime.[[Time]]). - let time_duration = start.time.diff(&end.time); - // 9. If TimeDurationSign(timeDuration) = -sign, set dayCorrection to dayCorrection + 1. - let mut day_correction = if time_duration.sign() == sign.negate() { - 1 - } else { - 0 - }; - - // 10. Let success be false. - let mut intermediate_dt = IsoDateTime::default(); - let mut time_duration = TimeDuration::default(); - let mut is_success = false; - // 11. Repeat, while dayCorrection ≤ maxDayCorrection and success is false, - while day_correction <= max_correction && !is_success { - // a. Let intermediateDate be BalanceISODate(endDateTime.[[ISODate]].[[Year]], - // endDateTime.[[ISODate]].[[Month]], endDateTime.[[ISODate]].[[Day]] - dayCorrection × sign). - let intermediate = IsoDate::balance( - end.date.year, - end.date.month.into(), - i32::from(end.date.day) - i32::from(day_correction * sign as i8), - ); - // b. Let intermediateDateTime be CombineISODateAndTimeRecord(intermediateDate, startDateTime.[[Time]]). - intermediate_dt = IsoDateTime::new_unchecked(intermediate, start.time); - // c. Let intermediateNs be ? GetEpochNanosecondsFor(timeZone, intermediateDateTime, compatible). - let intermediate_ns = self.time_zone.get_epoch_nanoseconds_for( - intermediate_dt, - Disambiguation::Compatible, - provider, - )?; - // d. Set timeDuration to TimeDurationFromEpochNanosecondsDifference(ns2, intermediateNs). - time_duration = TimeDuration::from_nanosecond_difference( - other.epoch_nanoseconds().as_i128(), - intermediate_ns.ns.0, - )?; - // e. Let timeSign be TimeDurationSign(timeDuration). - let time_sign = time_duration.sign() as i8; - // f. If sign ≠ -timeSign, then - if sign as i8 != -time_sign { - // i. Set success to true. - is_success = true; - } - // g. Set dayCorrection to dayCorrection + 1. - day_correction += 1; - } - // 12. Assert: success is true. - // 13. Let dateLargestUnit be LargerOfTwoUnits(largestUnit, day). - let date_largest = largest_unit.max(Unit::Day); - // 14. Let dateDifference be CalendarDateUntil(calendar, startDateTime.[[ISODate]], intermediateDateTime.[[ISODate]], dateLargestUnit). - // 15. Return CombineDateAndTimeDuration(dateDifference, timeDuration). - let date_diff = - self.calendar() - .date_until(&start.date, &intermediate_dt.date, date_largest)?; - - InternalDurationRecord::new(date_diff.date(), time_duration) - } - - /// `temporal_rs` equivalent to `DifferenceTemporalZonedDateTime`. - pub(crate) fn diff_internal_with_provider( - &self, - op: DifferenceOperation, - other: &Self, - options: DifferenceSettings, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - // NOTE: for order of operations, this should be asserted prior to this point - // by any engine implementors, but asserting out of caution. - if self.calendar != other.calendar { - return Err(TemporalError::range().with_enum(ErrorMessage::CalendarMismatch)); - } - - // 4. Set settings be ? GetDifferenceSettings(operation, resolvedOptions, datetime, « », nanosecond, hour). - let resolved_options = ResolvedRoundingOptions::from_diff_settings( - options, - op, - UnitGroup::DateTime, - Unit::Hour, - Unit::Nanosecond, - )?; - - // 5. If UnitCategory(settings.[[LargestUnit]]) is time, then - if resolved_options.largest_unit.is_time_unit() { - // a. Let internalDuration be DifferenceInstant(zonedDateTime.[[EpochNanoseconds]], other.[[EpochNanoseconds]], settings.[[RoundingIncrement]], settings.[[SmallestUnit]], settings.[[RoundingMode]]). - let internal = self - .instant - .diff_instant_internal(&other.instant, resolved_options)?; - // b. Let result be ! TemporalDurationFromInternal(internalDuration, settings.[[LargestUnit]]). - let result = Duration::from_internal(internal, resolved_options.largest_unit)?; - // c. If operation is since, set result to CreateNegatedTemporalDuration(result). - // d. Return result. - match op { - DifferenceOperation::Since => return Ok(result.negated()), - DifferenceOperation::Until => return Ok(result), - } - } - - // 6. NOTE: To calculate differences in two different time zones, - // settings.[[LargestUnit]] must be a time unit, because day lengths - // can vary between time zones due to DST and other UTC offset shifts. - // 7. If TimeZoneEquals(zonedDateTime.[[TimeZone]], other.[[TimeZone]]) is false, then - if !self - .time_zone - .time_zone_equals_with_provider(&other.time_zone, provider)? - { - // a. Throw a RangeError exception. - return Err(TemporalError::range().with_enum(ErrorMessage::TzMismatch)); - } - - // 8. If zonedDateTime.[[EpochNanoseconds]] = other.[[EpochNanoseconds]], then - if self.instant == other.instant { - // a. Return ! CreateTemporalDuration(0, 0, 0, 0, 0, 0, 0, 0, 0, 0). - return Ok(Duration::default()); - } - - // 9. Let internalDuration be ? DifferenceZonedDateTimeWithRounding(zonedDateTime.[[EpochNanoseconds]], other.[[EpochNanoseconds]], zonedDateTime.[[TimeZone]], zonedDateTime.[[Calendar]], settings.[[LargestUnit]], settings.[[RoundingIncrement]], settings.[[SmallestUnit]], settings.[[RoundingMode]]). - let internal = self.diff_with_rounding(&other.instant, resolved_options, provider)?; - // 10. Let result be ! TemporalDurationFromInternal(internalDuration, hour). - let result = Duration::from_internal(internal, Unit::Hour)?; - // 11. If operation is since, set result to CreateNegatedTemporalDuration(result). - // 12. Return result. - match op { - DifferenceOperation::Since => Ok(result.negated()), - DifferenceOperation::Until => Ok(result), - } - } -} - -// ==== Public API ==== - -impl ZonedDateTime { - /// Creates a new valid `ZonedDateTime`. - #[inline] - pub fn try_new_with_provider( - nanos: i128, - time_zone: TimeZone, - calendar: Calendar, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - let instant = Instant::try_new(nanos)?; - Self::new_unchecked_with_provider(instant, time_zone, calendar, provider) - } - - /// Creates a new valid `ZonedDateTime`. - #[inline] - pub(crate) fn try_new_with_cached_offset( - nanos: i128, - time_zone: TimeZone, - calendar: Calendar, - cached_offset: UtcOffsetSeconds, - ) -> TemporalResult { - let instant = Instant::try_new(nanos)?; - Ok(Self::new_unchecked( - instant, - time_zone, - calendar, - cached_offset, - )) - } - - /// Creates a new valid `ZonedDateTime` with an ISO 8601 calendar. - #[inline] - pub fn try_new_iso_with_provider( - nanos: i128, - time_zone: TimeZone, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - let instant = Instant::try_new(nanos)?; - Self::new_unchecked_with_provider(instant, time_zone, Calendar::ISO, provider) - } - - /// Creates a new valid `ZonedDateTime` from an [`Instant`]. - #[inline] - pub fn try_new_from_instant_with_provider( - instant: Instant, - time_zone: TimeZone, - calendar: Calendar, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - Self::new_unchecked_with_provider(instant, time_zone, calendar, provider) - } - - /// Creates a new valid `ZonedDateTime` from an [`Instant`] with an ISO 8601 calendar. - #[inline] - pub fn try_new_iso_from_instant_with_provider( - instant: Instant, - time_zone: TimeZone, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - Self::new_unchecked_with_provider(instant, time_zone, Calendar::ISO, provider) - } - - /// Returns `ZonedDateTime`'s Calendar. - #[inline] - #[must_use] - pub fn calendar(&self) -> &Calendar { - &self.calendar - } - - /// Returns `ZonedDateTime`'s `TimeZone` slot. - #[inline] - #[must_use] - pub fn time_zone(&self) -> &TimeZone { - &self.time_zone - } - - /// Create a `ZonedDateTime` from a `PartialZonedDateTime`. - #[inline] - pub fn from_partial_with_provider( - partial: PartialZonedDateTime, - overflow: Option, - disambiguation: Option, - offset_option: Option, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - let overflow = overflow.unwrap_or(Overflow::Constrain); - let disambiguation = disambiguation.unwrap_or(Disambiguation::Compatible); - let offset_option = offset_option.unwrap_or(OffsetDisambiguation::Reject); - - let date = partial - .calendar - .date_from_fields(partial.fields.calendar_fields, overflow)? - .iso; - - let time = Some(IsoTime::default().with(partial.fields.time, overflow)?); - - // Handle time zones - let offset_nanos = partial.fields.offset.map(|offset| offset.nanoseconds()); - - let timezone = partial - .timezone - .unwrap_or_else(|| TimeZone::utc_with_provider(provider)); - let epoch_nanos = interpret_isodatetime_offset( - date, - time, - false, - offset_nanos, - &timezone, - disambiguation, - offset_option, - false, - provider, - )?; - - Ok(Self::new_unchecked( - Instant::from(epoch_nanos.ns), - timezone, - partial.calendar, - epoch_nanos.offset, - )) - } - - /// Returns the `epochMilliseconds` value of this `ZonedDateTime`. - #[must_use] - pub fn epoch_milliseconds(&self) -> i64 { - self.instant.epoch_milliseconds() - } - - /// Returns the `epochNanoseconds` value of this `ZonedDateTime`. - #[must_use] - pub fn epoch_nanoseconds(&self) -> &EpochNanoseconds { - self.instant.epoch_nanoseconds() - } - - /// Returns the current `ZonedDateTime` as an [`Instant`]. - #[must_use] - pub fn to_instant(&self) -> Instant { - self.instant - } - - pub fn with_with_provider( - &self, - fields: ZonedDateTimeFields, - disambiguation: Option, - offset_option: Option, - overflow: Option, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - if fields.is_empty() { - return Err(TemporalError::r#type().with_enum(ErrorMessage::EmptyFieldsIsInvalid)); - } - let overflow = overflow.unwrap_or_default(); - let disambiguation = disambiguation.unwrap_or_default(); - let offset_option = offset_option.unwrap_or(OffsetDisambiguation::Reject); - // 8. Let isoDateTime be GetISODateTimeFor(timeZone, epochNs). - let iso_date_time = self.get_iso_datetime(); - let plain_date_time = PlainDateTime::new_unchecked(iso_date_time, self.calendar.clone()); - - // 23. Let dateTimeResult be ? InterpretTemporalDateTimeFields(calendar, fields, overflow). - let result_date = self.calendar.date_from_fields( - fields - .calendar_fields - .with_fallback_datetime(&plain_date_time, self.calendar.kind())?, - overflow, - )?; - - let time = iso_date_time.time.with(fields.time, overflow)?; - - // 7. Let offsetNanoseconds be GetOffsetNanosecondsFor(timeZone, epochNs). - let original_offset = self.offset_nanoseconds(); - // 24. Let newOffsetNanoseconds be ! ParseDateTimeUTCOffset(fields.[[OffsetString]]). - let new_offset_nanos = fields - .offset - .map(|offset| offset.nanoseconds()) - .or(Some(original_offset)); - - // 25. Let epochNanoseconds be ? InterpretISODateTimeOffset(dateTimeResult.[[ISODate]], dateTimeResult.[[Time]], option, newOffsetNanoseconds, timeZone, disambiguation, offset, match-exactly). - let epoch_nanos = interpret_isodatetime_offset( - result_date.iso, - Some(time), - // Set to Option ... we don't use an enum here, so any value will do. - true, - new_offset_nanos, - &self.time_zone, - disambiguation, - offset_option, - // match-exactly - false, - provider, - )?; - - // 26. Return ! CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar). - Ok(Self::new_unchecked( - Instant::from(epoch_nanos.ns), - self.time_zone, - self.calendar.clone(), - epoch_nanos.offset, - )) - } - - /// Creates a new `ZonedDateTime` from the current `ZonedDateTime` - /// combined with the provided `TimeZone`. - pub fn with_time_zone_with_provider( - &self, - time_zone: TimeZone, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - Self::try_new_with_provider( - self.epoch_nanoseconds().as_i128(), - time_zone, - self.calendar.clone(), - provider, - ) - } - - /// Creates a new `ZonedDateTime` from the current `ZonedDateTime` - /// combined with the provided `Calendar`. - #[inline] - #[must_use] - pub fn with_calendar(&self, calendar: Calendar) -> Self { - Self::new_unchecked( - self.instant, - self.time_zone, - calendar, - self.cached_offset.into(), - ) - } - - /// Compares one `ZonedDateTime` to another `ZonedDateTime` using their - /// `Instant` representation. - /// - /// # Note on Ordering. - /// - /// `temporal_rs` does not implement `PartialOrd`/`Ord` as `ZonedDateTime` does - /// not fulfill all the conditions required to implement the traits. However, - /// it is possible to compare `PlainDate`'s as their `IsoDate` representation. - #[inline] - #[must_use] - pub fn compare_instant(&self, other: &Self) -> Ordering { - self.instant.cmp(&other.instant) - } -} - -// ==== HoursInDay accessor method implementation ==== - -impl ZonedDateTime { - /// Get the previous or next time zone transition for the current `ZonedDateTime`. - pub fn get_time_zone_transition_with_provider( - &self, - direction: TransitionDirection, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult> { - // 8. If IsOffsetTimeZoneIdentifier(timeZone) is true, return null. - let TimeZone::IanaIdentifier(identifier) = self.time_zone else { - return Ok(None); - }; - // 9. If direction is next, then - // a. Let transition be GetNamedTimeZoneNextTransition(timeZone, zonedDateTime.[[EpochNanoseconds]]). - // 10. Else, - // a. Assert: direction is previous. - // b. Let transition be GetNamedTimeZonePreviousTransition(timeZone, zonedDateTime.[[EpochNanoseconds]]). - let transition = provider.get_time_zone_transition( - identifier, - self.epoch_nanoseconds().as_i128(), - direction, - )?; - - // 11. If transition is null, return null. - let Some(transition) = transition else { - return Ok(None); - }; - - if transition.check_validity().is_err() { - // GetNamedTimeZoneNextTransition, GetNamedTimeZonePreviousTransition include a check for out-of-bounds - // instants. Instead of requiring providers handle that, we handle it here. - return Ok(None); - } - // 12. Return ! CreateTemporalZonedDateTime(transition, timeZone, zonedDateTime.[[Calendar]]). - Ok(Some( - ZonedDateTime::try_new_with_provider( - transition.0, - self.time_zone, - self.calendar().clone(), - provider, - ) - .ok() - .temporal_unwrap()?, - )) - } - - pub fn hours_in_day_with_provider( - &self, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - // 1-3. Is engine specific steps - // 4. Let isoDateTime be GetISODateTimeFor(timeZone, zonedDateTime.[[EpochNanoseconds]]). - let iso = self.get_iso_datetime(); - // 5. Let today be isoDateTime.[[ISODate]]. - let today = iso.date; - // 6. Let tomorrow be BalanceISODate(today.[[Year]], today.[[Month]], today.[[Day]] + 1). - let tomorrow = IsoDate::balance(today.year, today.month.into(), i32::from(today.day + 1)); - // 7. Let todayNs be ? GetStartOfDay(timeZone, today). - let today = self.time_zone.get_start_of_day(&today, provider)?; - // 8. Let tomorrowNs be ? GetStartOfDay(timeZone, tomorrow). - let tomorrow = self.time_zone.get_start_of_day(&tomorrow, provider)?; - // 9. Let diff be TimeDurationFromEpochNanosecondsDifference(tomorrowNs, todayNs). - let diff = TimeDuration::from_nanosecond_difference(tomorrow.ns.0, today.ns.0)?; - // NOTE: The below should be safe as today_ns and tomorrow_ns should be at most 25 hours. - // TODO: Tests for the below cast. - // 10. Return 𝔽(TotalTimeDuration(diff, hour)). - Ok(diff.divide(3_600_000_000_000.)) - } -} - -// ==== Core accessor methods ==== - -impl ZonedDateTime { - /// Returns the `year` value for this `ZonedDateTime`. - #[inline] - pub fn year(&self) -> i32 { - let iso = self.get_iso_datetime(); - let dt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.year(&dt.iso.date) - } - - /// Returns the `month` value for this `ZonedDateTime`. - pub fn month(&self) -> u8 { - let iso = self.get_iso_datetime(); - let dt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.month(&dt.iso.date) - } - - /// Returns the `monthCode` value for this `ZonedDateTime`. - pub fn month_code(&self) -> MonthCode { - let iso = self.get_iso_datetime(); - let dt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.month_code(&dt.iso.date) - } - - /// Returns the `day` value for this `ZonedDateTime`. - pub fn day(&self) -> u8 { - let iso = self.get_iso_datetime(); - let dt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.day(&dt.iso.date) - } - - /// Returns the `hour` value for this `ZonedDateTime`. - pub fn hour(&self) -> u8 { - let iso = self.get_iso_datetime(); - iso.time.hour - } - - /// Returns the `minute` value for this `ZonedDateTime`. - pub fn minute(&self) -> u8 { - let iso = self.get_iso_datetime(); - iso.time.minute - } - - /// Returns the `second` value for this `ZonedDateTime`. - pub fn second(&self) -> u8 { - let iso = self.get_iso_datetime(); - iso.time.second - } - - /// Returns the `millisecond` value for this `ZonedDateTime`. - pub fn millisecond(&self) -> u16 { - let iso = self.get_iso_datetime(); - iso.time.millisecond - } - - /// Returns the `microsecond` value for this `ZonedDateTime`. - pub fn microsecond(&self) -> u16 { - let iso = self.get_iso_datetime(); - iso.time.microsecond - } - - /// Returns the `nanosecond` value for this `ZonedDateTime`. - pub fn nanosecond(&self) -> u16 { - let iso = self.get_iso_datetime(); - iso.time.nanosecond - } - - // TODO: Expose a format / writeable API - /// Returns an offset string for the current `ZonedDateTime`. - pub fn offset(&self) -> String { - let offset = self.cached_offset.nanoseconds(); - nanoseconds_to_formattable_offset(offset as i128).to_string() - } - - /// Returns the offset nanoseconds for the current `ZonedDateTime`. - pub fn offset_nanoseconds(&self) -> i64 { - self.cached_offset.nanoseconds() - } -} - -pub(crate) fn nanoseconds_to_formattable_offset(nanoseconds: i128) -> FormattableOffset { - let sign = if nanoseconds >= 0 { - Sign::Positive - } else { - Sign::Negative - }; - let nanos = nanoseconds.unsigned_abs(); - let hour = (nanos / 3_600_000_000_000) as u8; - let minute = ((nanos / 60_000_000_000) % 60) as u8; - let second = ((nanos / 1_000_000_000) % 60) as u8; - let nanosecond = (nanos % 1_000_000_000) as u32; - - let precision = if second == 0 && nanosecond == 0 { - Precision::Minute - } else { - Precision::Auto - }; - - FormattableOffset { - sign, - time: FormattableTime { - hour, - minute, - second, - nanosecond, - precision, - include_sep: true, - }, - } -} - -// ==== Core calendar method implementations ==== - -impl ZonedDateTime { - /// Returns the era for the current `ZonedDateTime`. - pub fn era(&self) -> Option> { - let iso = self.get_iso_datetime(); - let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.era(&pdt.iso.date) - } - - /// Returns the era-specific year for the current `ZonedDateTime`. - pub fn era_year(&self) -> Option { - let iso = self.get_iso_datetime(); - let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.era_year(&pdt.iso.date) - } - - /// Returns the calendar day of week value. - pub fn day_of_week(&self) -> u16 { - let iso = self.get_iso_datetime(); - let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.day_of_week(&pdt.iso.date) - } - - /// Returns the calendar day of year value. - pub fn day_of_year(&self) -> u16 { - let iso = self.get_iso_datetime(); - let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.day_of_year(&pdt.iso.date) - } - - /// Returns the calendar week of year value. - pub fn week_of_year(&self) -> Option { - let iso = self.get_iso_datetime(); - let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.week_of_year(&pdt.iso.date) - } - - /// Returns the calendar year of week value. - pub fn year_of_week(&self) -> Option { - let iso = self.get_iso_datetime(); - let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.year_of_week(&pdt.iso.date) - } - - /// Returns the calendar days in week value. - pub fn days_in_week(&self) -> u16 { - let iso = self.get_iso_datetime(); - let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.days_in_week(&pdt.iso.date) - } - - /// Returns the calendar days in month value. - pub fn days_in_month(&self) -> u16 { - let iso = self.get_iso_datetime(); - let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.days_in_month(&pdt.iso.date) - } - - /// Returns the calendar days in year value. - pub fn days_in_year(&self) -> u16 { - let iso = self.get_iso_datetime(); - let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.days_in_year(&pdt.iso.date) - } - - /// Returns the calendar months in year value. - pub fn months_in_year(&self) -> u16 { - let iso = self.get_iso_datetime(); - let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.months_in_year(&pdt.iso.date) - } - - /// Returns returns whether the date in a leap year for the given calendar. - pub fn in_leap_year(&self) -> bool { - let iso = self.get_iso_datetime(); - let pdt = PlainDateTime::new_unchecked(iso, self.calendar.clone()); - self.calendar.in_leap_year(&pdt.iso.date) - } -} - -// ==== Core method implementations ==== - -impl ZonedDateTime { - /// Creates a new `ZonedDateTime` from the current `ZonedDateTime` - /// combined with the provided `TimeZone`. - pub fn with_plain_time_and_provider( - &self, - time: Option, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - let iso = self.get_iso_datetime(); - let epoch_ns = if let Some(time) = time { - let result_iso = IsoDateTime::new_unchecked(iso.date, time.iso); - self.time_zone.get_epoch_nanoseconds_for( - result_iso, - Disambiguation::Compatible, - provider, - )? - } else { - self.time_zone.get_start_of_day(&iso.date, provider)? - }; - Self::try_new_with_cached_offset( - epoch_ns.ns.0, - self.time_zone, - self.calendar.clone(), - epoch_ns.offset, - ) - } - - /// Add a duration to the current `ZonedDateTime` - pub fn add_with_provider( - &self, - duration: &Duration, - overflow: Option, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - self.add_internal(duration, overflow.unwrap_or(Overflow::Constrain), provider) - } - - /// Subtract a duration to the current `ZonedDateTime` - pub fn subtract_with_provider( - &self, - duration: &Duration, - overflow: Option, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - self.add_internal( - &duration.negated(), - overflow.unwrap_or(Overflow::Constrain), - provider, - ) - } - - /// Checks if the current `ZonedDateTime` is equal to another `ZonedDateTime`. - pub fn equals_with_provider( - &self, - other: &Self, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - // 4. If zonedDateTime.[[EpochNanoseconds]] ≠ other.[[EpochNanoseconds]], return false. - if self.instant != other.instant { - return Ok(false); - } - - // 5. If TimeZoneEquals(zonedDateTime.[[TimeZone]], other.[[TimeZone]]) is false, return false. - if !self - .time_zone - .time_zone_equals_with_provider(&other.time_zone, provider)? - { - return Ok(false); - } - // 6. Return CalendarEquals(zonedDateTime.[[Calendar]], other.[[Calendar]]). - Ok(self.calendar == other.calendar) - } - - /// Returns a [`Duration`] representing the period of time from this `ZonedDateTime` since the other `ZonedDateTime`. - pub fn since_with_provider( - &self, - other: &Self, - options: DifferenceSettings, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - self.diff_internal_with_provider(DifferenceOperation::Since, other, options, provider) - } - - /// Returns a [`Duration`] representing the period of time from this `ZonedDateTime` since the other `ZonedDateTime`. - pub fn until_with_provider( - &self, - other: &Self, - options: DifferenceSettings, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - self.diff_internal_with_provider(DifferenceOperation::Until, other, options, provider) - } - - /// Return a `ZonedDateTime` representing the start of the day - /// for the current `ZonedDateTime`. - pub fn start_of_day_with_provider( - &self, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - let iso = self.get_iso_datetime(); - let epoch_nanos = self.time_zone.get_start_of_day(&iso.date, provider)?; - Self::try_new_with_cached_offset( - epoch_nanos.ns.0, - self.time_zone, - self.calendar.clone(), - epoch_nanos.offset, - ) - } - - /// Convert the current `ZonedDateTime` to a [`PlainDate`] - pub fn to_plain_date(&self) -> PlainDate { - let iso = self.get_iso_datetime(); - PlainDate::new_unchecked(iso.date, self.calendar.clone()) - } - - /// Convert the current `ZonedDateTime` to a [`PlainTime`] - pub fn to_plain_time(&self) -> PlainTime { - let iso = self.get_iso_datetime(); - PlainTime::new_unchecked(iso.time) - } - - /// Convert the current `ZonedDateTime` to a [`PlainDateTime`] - pub fn to_plain_date_time(&self) -> PlainDateTime { - let iso = self.get_iso_datetime(); - PlainDateTime::new_unchecked(iso, self.calendar.clone()) - } - - /// Creates a default formatted IXDTF (RFC 9557) date/time string for the provided `ZonedDateTime`. - pub fn to_string_with_provider( - &self, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - self.to_ixdtf_string_with_provider( - DisplayOffset::Auto, - DisplayTimeZone::Auto, - DisplayCalendar::Auto, - ToStringRoundingOptions::default(), - provider, - ) - } - - /// 6.3.39 Temporal.ZonedDateTime.prototype.round - pub fn round_with_provider( - &self, - options: RoundingOptions, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - // 1. Let zonedDateTime be the this value. - // 2. Perform ? RequireInternalSlot(zonedDateTime, [[InitializedTemporalZonedDateTime]]). - // 3. If roundTo is undefined, then - // a. Throw a TypeError exception. - // 4. If roundTo is a String, then - // a. Let paramString be roundTo. - // b. Set roundTo to OrdinaryObjectCreate(null). - // c. Perform ! CreateDataPropertyOrThrow(roundTo, "smallestUnit", paramString). - // 5. Else, - // a. Set roundTo to ? GetOptionsObject(roundTo). - // 6. NOTE: The following steps read options and perform independent validation in alphabetical order (GetRoundingIncrementOption reads "roundingIncrement" and GetRoundingModeOption reads "roundingMode"). - // 7. Let roundingIncrement be ? GetRoundingIncrementOption(roundTo). - // 8. Let roundingMode be ? GetRoundingModeOption(roundTo, half-expand). - // 9. Let smallestUnit be ? GetTemporalUnitValuedOption(roundTo, "smallestUnit", time, required, « day »). - // 10. If smallestUnit is day, then - // a. Let maximum be 1. - // b. Let inclusive be true. - // 11. Else, - // a. Let maximum be MaximumTemporalDurationRoundingIncrement(smallestUnit). - // b. Assert: maximum is not unset. - // c. Let inclusive be false. - let resolved = ResolvedRoundingOptions::from_datetime_options(options)?; - // 12. Perform ? ValidateTemporalRoundingIncrement(roundingIncrement, maximum, inclusive). - // 13. If maximum is not unset, perform ? ValidateTemporalRoundingIncrement(roundingIncrement, maximum, false). - // 13. If smallestUnit is nanosecond and roundingIncrement = 1, then - if resolved.smallest_unit == Unit::Nanosecond - && resolved.increment == RoundingIncrement::ONE - { - // a. Return ! CreateTemporalZonedDateTime(zonedDateTime.[[EpochNanoseconds]], zonedDateTime.[[TimeZone]], zonedDateTime.[[Calendar]]). - return Ok(self.clone()); - } - // 14. Let thisNs be zonedDateTime.[[EpochNanoseconds]]. - let this_ns = self.epoch_nanoseconds(); - // 15. Let timeZone be zonedDateTime.[[TimeZone]]. - // 16. Let calendar be zonedDateTime.[[Calendar]]. - // 17. Let isoDateTime be GetISODateTimeFor(timeZone, thisNs). - // 18. If smallestUnit is day, then - if resolved.smallest_unit == Unit::Day { - // a. Let dateStart be isoDateTime.[[ISODate]]. - let iso_start = self.get_iso_datetime(); - // b. Let dateEnd be BalanceISODate(dateStart.[[Year]], dateStart.[[Month]], dateStart.[[Day]] + 1). - let iso_end = IsoDate::balance( - iso_start.date.year, - iso_start.date.month.into(), - i32::from(iso_start.date.day + 1), - ); - // c. Let startNs be ? GetStartOfDay(timeZone, dateStart). - // d. Assert: thisNs ≥ startNs. - // e. Let endNs be ? GetStartOfDay(timeZone, dateEnd). - // f. [Struck out in spec] Assert: thisNs < endNs. - let start = self.time_zone.get_start_of_day(&iso_start.date, provider)?; - let end = self.time_zone.get_start_of_day(&iso_end, provider)?; - if this_ns.0 < start.ns.0 { - return Err(TemporalError::range().with_enum(ErrorMessage::ZDTOutOfDayBounds)); - } - // g. Set thisNs to min(thisNs, endNs - 1). - let this_ns_val = this_ns.0.min(end.ns.0 - 1); - // h. Let dayLengthNs be ℝ(endNs - startNs). - // i. Let dayProgressNs be TimeDurationFromEpochNanosecondsDifference(thisNs, startNs). - let day_len_ns = TimeDuration::from_nanosecond_difference(end.ns.0, start.ns.0)?; - let day_progress_ns = - TimeDuration::from_nanosecond_difference(this_ns_val, start.ns.0)?; - // j. Let roundedDayNs be ! RoundTimeDurationToIncrement(dayProgressNs, dayLengthNs, roundingMode). - let rounded = if let Some(increment) = NonZeroU128::new(day_len_ns.0.unsigned_abs()) { - IncrementRounder::::from_signed_num(day_progress_ns.0, increment)? - .round(resolved.rounding_mode) - } else { - 0 // Zero-length day: round to start of day - }; - - // The cached offset will be based on which way we round - let offset = if rounded == 0 { - start.offset - } else { - end.offset - }; - - // k. Let epochNanoseconds be AddTimeDurationToEpochNanoseconds(roundedDayNs, startNs). - let candidate = start.ns.0 + rounded; - Instant::try_new(candidate)?; - // 20. Return ! CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar). - ZonedDateTime::try_new_with_cached_offset( - candidate, - self.time_zone, - self.calendar.clone(), - offset, - ) - } else { - // 19. Else, - // a. Let roundResult be RoundISODateTime(isoDateTime, roundingIncrement, smallestUnit, roundingMode). - // b. Let offsetNanoseconds be GetOffsetNanosecondsFor(timeZone, thisNs). - // c. Let epochNanoseconds be ? InterpretISODateTimeOffset(roundResult.[[ISODate]], roundResult.[[Time]], option, offsetNanoseconds, timeZone, compatible, prefer, match-exactly). - // 20. Return ! CreateTemporalZonedDateTime(epochNanoseconds, timeZone, calendar). - let iso_dt = self.get_iso_datetime(); - let rounded_dt = iso_dt.round(resolved)?; - let offset_ns = self - .time_zone - .get_offset_nanos_for(this_ns.as_i128(), provider)?; - - let epoch_ns = interpret_isodatetime_offset( - rounded_dt.date, - Some(rounded_dt.time), - false, - Some(offset_ns as i64), - &self.time_zone, - Disambiguation::Compatible, - OffsetDisambiguation::Prefer, - // match-exactly - false, - provider, - )?; - - ZonedDateTime::try_new_with_cached_offset( - epoch_ns.ns.0, - self.time_zone, - self.calendar.clone(), - epoch_ns.offset, - ) - } - } - - /// Creates an IXDTF (RFC 9557) date/time string for the provided `ZonedDateTime` according - /// to the provided display options. - pub fn to_ixdtf_string_with_provider( - &self, - display_offset: DisplayOffset, - display_timezone: DisplayTimeZone, - display_calendar: DisplayCalendar, - options: ToStringRoundingOptions, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - let resolved_options = options.resolve()?; - let result = - self.instant - .round_instant(ResolvedRoundingOptions::from_to_string_options( - &resolved_options, - ))?; - let rounded_instant = Instant::try_new(result)?; - - let offset = self.time_zone.get_offset_nanos_for(result, provider)?; - let datetime = self - .time_zone - .get_iso_datetime_for(&rounded_instant, provider)?; - let (sign, hour, minute) = nanoseconds_to_formattable_offset_minutes(offset)?; - let timezone_id = self.time_zone().identifier_with_provider(provider)?; - - let ixdtf_string = IxdtfStringBuilder::default() - .with_date(datetime.date) - .with_time(datetime.time, resolved_options.precision) - .with_minute_offset(sign, hour, minute, display_offset) - .with_timezone(&timezone_id, display_timezone) - .with_calendar(self.calendar.identifier(), display_calendar) - .build(); - - Ok(ixdtf_string) - } - - // TODO: Should IANA Identifier be prechecked or allow potentially invalid IANA Identifer values here? - pub fn from_utf8_with_provider( - source: &[u8], - disambiguation: Disambiguation, - offset_option: OffsetDisambiguation, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - let parsed = ParsedZonedDateTime::from_utf8_with_provider(source, provider)?; - - Self::from_parsed_with_provider(parsed, disambiguation, offset_option, provider) - } - - pub fn from_parsed_with_provider( - parsed: ParsedZonedDateTime, - disambiguation: Disambiguation, - offset_option: OffsetDisambiguation, - provider: &(impl TimeZoneProvider + ?Sized), - ) -> TemporalResult { - let date = IsoDate::new_with_overflow( - parsed.date.record.year, - parsed.date.record.month, - parsed.date.record.day, - Overflow::Reject, - )?; - - let epoch_nanos = interpret_isodatetime_offset( - date, - parsed.time, - parsed.has_utc_designator, - parsed.offset.map(|o| o.nanoseconds()), - &parsed.timezone, - disambiguation, - offset_option, - parsed.match_minutes, - provider, - )?; - Ok(Self::new_unchecked( - Instant::from(epoch_nanos.ns), - parsed.timezone, - Calendar::new(parsed.date.calendar), - epoch_nanos.offset, - )) - } -} - -/// InterpretISODateTimeOffset -/// -/// offsetBehavior is: -/// - OPTION if offset_nanos is Some -/// - WALL if offset_nanos is None and !is_exact -/// - EXACT if offset_nanos is None and is_exact -/// -/// When offset_nanos is None, offsetNanoseconds is 0 -#[allow(clippy::too_many_arguments)] -pub(crate) fn interpret_isodatetime_offset( - date: IsoDate, - time: Option, - is_exact: bool, - offset_nanos: Option, - timezone: &TimeZone, - disambiguation: Disambiguation, - offset_option: OffsetDisambiguation, - match_minutes: bool, - provider: &(impl TimeZoneProvider + ?Sized), -) -> TemporalResult { - // 1. If time is start-of-day, then - let Some(time) = time else { - // a. Assert: offsetBehaviour is wall. - // b. Assert: offsetNanoseconds is 0. - temporal_assert!(offset_nanos.is_none()); - // c. Return ? GetStartOfDay(timeZone, isoDate). - return timezone.get_start_of_day(&date, provider); - }; - - // 2. Let isoDateTime be CombineISODateAndTimeRecord(isoDate, time). - let iso_datetime = IsoDateTime::new_unchecked(date, time); - match (is_exact, offset_nanos, offset_option) { - // 3. If offsetBehaviour is wall, or offsetBehaviour is option and offsetOption is ignore, then - (false, None, _) | (_, Some(_), OffsetDisambiguation::Ignore) => { - // a. Return ? GetEpochNanosecondsFor(timeZone, isoDateTime, disambiguation). - timezone.get_epoch_nanoseconds_for(iso_datetime, disambiguation, provider) - } - // 4. If offsetBehaviour is exact, or offsetBehaviour is option and offsetOption is use, then - (true, None, _) | (_, Some(_), OffsetDisambiguation::Use) => { - let offset = offset_nanos.unwrap_or(0); - // a. Let balanced be BalanceISODateTime(isoDate.[[Year]], isoDate.[[Month]], - // isoDate.[[Day]], time.[[Hour]], time.[[Minute]], time.[[Second]], time.[[Millisecond]], - // time.[[Microsecond]], time.[[Nanosecond]] - offsetNanoseconds). - let iso = IsoDateTime::balance( - date.year, - date.month.into(), - date.day.into(), - time.hour.into(), - time.minute.into(), - time.second.into(), - time.millisecond.into(), - time.microsecond.into(), - (i64::from(time.nanosecond) - offset).into(), - ); - - // b. Perform ? CheckISODaysRange(balanced.[[ISODate]]). - iso.date.is_valid_day_range()?; - - // c. Let epochNanoseconds be GetUTCEpochNanoseconds(balanced). - let ns = iso.as_nanoseconds(); - // d. If IsValidEpochNanoseconds(epochNanoseconds) is false, throw a RangeError exception. - ns.check_validity()?; - - // e. Return epochNanoseconds. - Ok(EpochNanosecondsAndOffset { - ns, - offset: timezone.get_utc_offset_for(ns.0, provider)?.into(), - }) - } - // 5. Assert: offsetBehaviour is option. - // 6. Assert: offsetOption is prefer or reject. - (_, Some(offset), OffsetDisambiguation::Prefer | OffsetDisambiguation::Reject) => { - // 7. Perform ? CheckISODaysRange(isoDate). - date.is_valid_day_range()?; - let iso = IsoDateTime::new_unchecked(date, time); - // 8. Let utcEpochNanoseconds be GetUTCEpochNanoseconds(isoDateTime). - let utc_epochs = iso.as_nanoseconds(); - // 9. Let possibleEpochNs be ? GetPossibleEpochNanoseconds(timeZone, isoDateTime). - let possible_nanos = timezone.get_possible_epoch_ns_for(iso, provider)?; - - // 10. For each element candidate of possibleEpochNs, do - for candidate in possible_nanos.as_slice() { - // a. Let candidateOffset be utcEpochNanoseconds - candidate. - let candidate_offset = utc_epochs.0 - candidate.ns.0; - // b. If candidateOffset = offsetNanoseconds, then - if candidate_offset == offset.into() { - // i. Return candidate. - return Ok(*candidate); - } - // c. If matchBehaviour is match-minutes, then - if match_minutes { - // i. Let roundedCandidateNanoseconds be RoundNumberToIncrement(candidateOffset, 60 × 10**9, half-expand). - let rounded_candidate = - IncrementRounder::from_signed_num(candidate_offset, NS_PER_MINUTE_NONZERO)? - .round(RoundingMode::HalfExpand); - // ii. If roundedCandidateNanoseconds = offsetNanoseconds, then - if rounded_candidate == offset.into() { - // 1. Return candidate. - return Ok(*candidate); - } - } - } - - // 11. If offsetOption is reject, throw a RangeError exception. - if offset_option == OffsetDisambiguation::Reject { - return Err( - TemporalError::range().with_enum(ErrorMessage::OffsetNeedsDisambiguation) - ); - } - // 12. Return ? DisambiguatePossibleEpochNanoseconds(possibleEpochNs, timeZone, isoDateTime, disambiguation). - timezone.disambiguate_possible_epoch_nanos( - possible_nanos, - iso, - disambiguation, - provider, - ) - } - } -} - -// Formatting utils -const NS_PER_MINUTE: i128 = 60_000_000_000; -// Once MSRV is 1.83 we can update this to just calling .unwrap() -const NS_PER_MINUTE_NONZERO: NonZeroU128 = if let Some(nz) = NonZeroU128::new(NS_PER_MINUTE as u128) -{ - nz -} else { - NonZeroU128::MIN -}; - -pub(crate) fn nanoseconds_to_formattable_offset_minutes( - nanoseconds: i128, -) -> TemporalResult<(Sign, u8, u8)> { - // Per 11.1.7 this should be rounding - let nanoseconds = IncrementRounder::from_signed_num(nanoseconds, NS_PER_MINUTE_NONZERO)? - .round(RoundingMode::HalfExpand); - let offset_minutes = (nanoseconds / NS_PER_MINUTE) as i32; - let sign = if offset_minutes < 0 { - Sign::Negative - } else { - Sign::Positive - }; - let hour = offset_minutes.abs() / 60; - let minute = offset_minutes.abs() % 60; - Ok((sign, hour as u8, minute as u8)) -} diff --git a/src/lib.rs b/src/lib.rs deleted file mode 100644 index 904b90c9b..000000000 --- a/src/lib.rs +++ /dev/null @@ -1,504 +0,0 @@ -//! The Rust implementation of ECMAScript's Temporal -//! -//! Temporal is date and time library that provides support for calendrical calculations -//! and time zones based on the ECMAScript Temporal specification. -//! -//! temporal_rs is designed with general purpose Rust usage and ECMAScript implementations -//! in mind, meaning that temporal_rs can be used to implement the Temporal built-ins -//! in an ECMAScript implementation or generally used as a date and time library in a -//! Rust project. -//! -//! temporal_rs is the primary library for the Temporal API implementation in Boa, Kiesel, -//! and V8. Each of these engines pass the large ECMAScript conformance test suite for -//! the specification. -//! -//! ## Why use temporal_rs? -//! -//! As previously mentioned, Temporal is an API for working with date and time in -//! a calendar and time zone aware manner. This means that calendar and time zone support -//! are first class in Temporal as well as in temporal_rs. -//! -//! For instance, converting between calendars is as simple as providing the calendar as -//! shown below. -//! -//! ```rust -//! use temporal_rs::{PlainDate, Calendar}; -//! use tinystr::tinystr; -//! use core::str::FromStr; -//! -//! // Create a date with an ISO calendar -//! let iso8601_date = PlainDate::try_new_iso(2025, 3, 3).unwrap(); -//! -//! // Create a new date with the japanese calendar -//! let japanese_date = iso8601_date.with_calendar(Calendar::JAPANESE); -//! assert_eq!(japanese_date.era(), Some(tinystr!(16, "reiwa"))); -//! assert_eq!(japanese_date.era_year(), Some(7)); -//! assert_eq!(japanese_date.month(), 3) -//! ``` -//! -//! Beyond the general calendar use case, temporal_rs has robust support for -//! time zones which can generally by applied to a `PlainDate` via [`ZonedDateTime`]. -//! -//! **Important Note:** The below API is enabled with the -//! `compiled_data` feature flag. -//! -//! ```rust -//! # #[cfg(feature = "compiled_data")] { -//! use temporal_rs::{ZonedDateTime, TimeZone}; -//! use temporal_rs::options::{Disambiguation, OffsetDisambiguation}; -//! -//! let zdt = ZonedDateTime::from_utf8( -//! b"2025-03-01T11:16:10Z[America/Chicago][u-ca=iso8601]", -//! Disambiguation::Compatible, -//! OffsetDisambiguation::Reject -//! ).unwrap(); -//! assert_eq!(zdt.year(), 2025); -//! assert_eq!(zdt.month(), 3); -//! assert_eq!(zdt.day(), 1); -//! // Using Z and a timezone projects a UTC datetime into the timezone. -//! assert_eq!(zdt.hour(), 5); -//! assert_eq!(zdt.minute(), 16); -//! assert_eq!(zdt.second(), 10); -//! -//! // You can also update a time zone easily. -//! let zurich_zone = TimeZone::try_from_str("Europe/Zurich").unwrap(); -//! let zdt_zurich = zdt.with_timezone(zurich_zone).unwrap(); -//! assert_eq!(zdt_zurich.year(), 2025); -//! assert_eq!(zdt_zurich.month(), 3); -//! assert_eq!(zdt_zurich.day(), 1); -//! assert_eq!(zdt_zurich.hour(), 12); -//! assert_eq!(zdt_zurich.minute(), 16); -//! assert_eq!(zdt_zurich.second(), 10); -//! -//! # } -//! ``` -//! -//! ## Overview -//! -//! temporal_rs provides 8 core types for working with date and time. The core types are: -//! -//! - [PlainDate] -//! - [PlainTime] -//! - [PlainDateTime] -//! - [ZonedDateTime] -//! - [Instant] -//! - [Duration] -//! - [PlainYearMonth] -//! - [PlainMonthDay] -//! -//! In addition to these types, there are the [`Calendar`] and [`TimeZone`] type that -//! support the calendars or time zones. The specific support for calendars and time -//! zones per type are as follows. -//! -//! | Temporal type | Category | Calendar support | Time zone support | -//! |----------------|--------------------------------------|--------------------|--------------------| -//! | PlainDate | Calendar date | yes | no | -//! | PlainTime | Wall-clock time | no | no | -//! | PlainDateTime | Calendar date and wall-clock time | yes | no | -//! | ZonedDateTime | Calendar date and exact time | yes | yes | -//! | Instant | Exact time | no | no | -//! | Duration | None | no | no | -//! | PlainYearMonth | Calendar date | yes | no | -//! | PlainMonthDay | Calendar date | yes | no | -//! -//! There is also the [`Now`][now::Now], which provides access to the current host system -//! time. This can then be used to map to any of the above Temporal types. -//! -//! **Important Note:** the below example is only available with the `sys` and -//! `compiled_data` feature flag enabled. -//! -//! ```rust -//! # #[cfg(all(feature = "sys", feature = "compiled_data"))] { -//! use core::cmp::Ordering; -//! use temporal_rs::{Temporal, Calendar, ZonedDateTime}; -//! let current_instant = Temporal::utc_now().instant().unwrap(); -//! let current_zoned_date_time = Temporal::utc_now().zoned_date_time_iso(None).unwrap(); -//! -//! /// Create a `ZonedDateTime` from the requested instant. -//! let zoned_date_time_from_instant = ZonedDateTime::try_new( -//! current_instant.as_i128(), -//! *current_zoned_date_time.time_zone(), -//! Calendar::ISO, -//! ).unwrap(); -//! -//! // The two `ZonedDateTime` will be equal down to the second. -//! assert_eq!(current_zoned_date_time.year(), zoned_date_time_from_instant.year()); -//! assert_eq!(current_zoned_date_time.month(), zoned_date_time_from_instant.month()); -//! assert_eq!(current_zoned_date_time.day(), zoned_date_time_from_instant.day()); -//! assert_eq!(current_zoned_date_time.hour(), zoned_date_time_from_instant.hour()); -//! assert_eq!(current_zoned_date_time.minute(), zoned_date_time_from_instant.minute()); -//! assert_eq!(current_zoned_date_time.second(), zoned_date_time_from_instant.second()); -//! -//! // The `Instant` reading that occurred first will be less than the ZonedDateTime -//! // reading -//! assert_eq!( -//! zoned_date_time_from_instant.compare_instant(¤t_zoned_date_time), -//! Ordering::Less -//! ); -//! # } -//! ``` -//! -//! ## General design -//! -//! While temporal_rs can be used in native Rust programs, the library is -- first and -//! foremost -- designed for use in ECMAScript implementations. This is not to detract -//! from temporal_rs's use in a native Rust program, but it is important information to -//! understand in order to understand the library's architecture and general API design. -//! -//! Without default feature flags, temporal_rs is not released with access to the host -//! environment and it does not embed any time zone data. This is important from an -//! interpreter perspective, because access to the host environment and time zone data -//! comes from the interpreter's agent, not from a dependency. -//! -//! Instead, temporal_rs provides the [`HostHooks`][host::HostHooks] and [`TimeZoneProvider`][provider::TimeZoneProvider] -//! traits that can be implemented and provided as function arguments that temporal_rs will -//! use to access the host system or time zone data. temporal_rs also provides some baseline -//! implementations of the traits that can be selected from depending on application needs. -//! -//! That being said, this does not mean that everyone must implement their own trait -//! implementations for that functionality to exist, but the APIs are there for power -//! users who may need a custom host system or time zone data implementation. -//! -//! A default host system and time zone provider have been implemented and are automatically -//! active as default features. -//! -//! ### A quick walkthrough -//! -//! For instance, the examples thus far have been using the general usage Rust API with -//! the `sys` and `compiled_data` feature. -//! -//! For instance, let's manually write our [`Now`][now::Now] implementation instead of using -//! [`Temporal::now()`] with an empty host system implementation. -//! -//! ```rust -//! # #[cfg(feature = "compiled_data")] { -//! use temporal_rs::{Instant, now::Now, host::EmptyHostSystem}; -//! -//! // The empty host system is a system implementation HostHooks that always -//! // returns the UNIX_EPOCH and the "+00:00" time zone. -//! let now = Now::new(EmptyHostSystem); -//! let time_zone = now.time_zone().unwrap(); -//! assert_eq!(time_zone.identifier().unwrap(), "+00:00"); -//! let now = Now::new(EmptyHostSystem); -//! assert_eq!(now.instant(), Instant::try_new(0)); -//! # } -//! ``` -//! -//! However, even in our above example, we cheated a bit. We were still relying on the -//! `compiled_data` feature flag that provided time zone data for us. Let's try again, -//! but this time without the feature flag. -//! -//! ```rust -//! # #[cfg(feature = "tzdb")] { -//! use temporal_rs::{Instant, now::Now, host::EmptyHostSystem}; -//! use timezone_provider::tzif::CompiledTzdbProvider; -//! -//! let provider = CompiledTzdbProvider::default(); -//! -//! // The empty host system is a system implementation HostHooks that always -//! // returns the UNIX_EPOCH and the "+00:00" time zone. -//! let now = Now::new(EmptyHostSystem); -//! let time_zone = now.time_zone_with_provider(&provider).unwrap(); -//! assert_eq!(time_zone.identifier_with_provider(&provider).unwrap(), "+00:00"); -//! -//! let now = Now::new(EmptyHostSystem); -//! assert_eq!(now.instant(), Instant::try_new(0)); -//! # } -//! ``` -//! -//! Now -- pun only partially intended -- we've successfully written a no-default-features -//! example with temporal_rs! -//! -//! ### What have we learned going over this all this? -//! -//! First, any API that has the suffix `_with_provider` is a power user API for supplying -//! a custom or specific time zone data provider. Furthermore, any API that has a -//! `_with_provider` suffix will also have a version without the suffix that automagically -//! provides time zone data for you. -//! -//! Finally, sourcing time zone data is a very scary (but fun!) business. If you're interested -//! in learning more, feel free to check out the `timezone_provider` crate! -//! -//! With any luck, this also highlights the general design of temporal_rs. It provides a -//! general usage API that aligns with the Temporal specification while also being -//! flexible enough to provide an power user to take control of their host system access -//! and time zone data sourcing as needed. -//! -//! ## Formatting -//! -//! temporal_rs adheres to Temporal grammar, which is a strict version of -//! [RFC9557's IXDTF][ixdtf]. RFC9557 is an update to RFC3339 that adds -//! extensions to the format. -//! -//! ## More information -//! -//! [`Temporal`][proposal] is the Stage 4 proposal for ECMAScript that -//! provides new JS objects and functions for working with dates and -//! times that fully supports time zones and non-gregorian calendars. -//! -//! This library's primary development source is the Temporal -//! Proposal [specification][spec]. -//! -//! [ixdtf]: https://www.rfc-editor.org/rfc/rfc9557.txt -//! [proposal]: https://github.com/tc39/proposal-temporal -//! [spec]: https://tc39.es/proposal-temporal/ -#![doc( - html_logo_url = "https://raw.githubusercontent.com/boa-dev/boa/main/assets/logo.svg", - html_favicon_url = "https://raw.githubusercontent.com/boa-dev/boa/main/assets/logo.svg" -)] -#![no_std] -#![cfg_attr(not(test), forbid(clippy::unwrap_used))] -// We wish to reduce the number of panics, .expect() must be justified -// to never occur. Opt to have GIGO or .temporal_unwrap() behavior where possible. -#![cfg_attr(not(test), warn(clippy::expect_used, clippy::indexing_slicing))] -#![allow( - // Currently throws a false positive regarding dependencies that are only used in benchmarks. - unused_crate_dependencies, - clippy::module_name_repetitions, - clippy::redundant_pub_crate, - clippy::too_many_lines, - clippy::cognitive_complexity, - clippy::missing_errors_doc, - clippy::let_unit_value, - clippy::option_if_let_else, -)] -#![forbid(unsafe_code)] - -extern crate alloc; -extern crate core; - -#[cfg(any(test, feature = "std"))] -extern crate std; - -pub mod error; -pub mod host; -pub mod iso; -pub mod options; -pub mod parsers; -pub mod primitive; -pub mod provider; - -#[cfg(feature = "sys")] -pub mod sys; - -mod builtins; - -#[cfg(feature = "tzdb")] -pub(crate) mod tzdb; - -#[doc(hidden)] -pub(crate) mod rounding; -#[doc(hidden)] -pub(crate) mod utils; - -use core::cmp::Ordering; - -// TODO: evaluate positives and negatives of using tinystr. Re-exporting -// tinystr as a convenience, as it is currently tied into the API. -/// Re-export of `TinyAsciiStr` from `tinystr`. -pub use tinystr::TinyAsciiStr; - -/// The `Temporal` result type -pub type TemporalResult = Result; - -#[doc(inline)] -pub use error::TemporalError; - -#[cfg(feature = "sys")] -#[doc(inline)] -pub use sys::Temporal; - -pub mod partial { - //! Partial date and time component records - //! - //! The partial records are `temporal_rs`'s method of addressing - //! `TemporalFields` in the specification. - pub use crate::builtins::core::{ - PartialDate, PartialDateTime, PartialDuration, PartialTime, PartialYearMonth, - PartialZonedDateTime, - }; -} - -pub mod parsed_intermediates; - -// TODO: Potentially bikeshed how `EpochNanoseconds` should be exported. -/// A module for structs related to the UNIX epoch -pub mod unix_time { - pub use timezone_provider::epoch_nanoseconds::EpochNanoseconds; -} - -/// The `Now` module includes type for building a Now -pub mod now { - pub use crate::builtins::Now; -} - -/// Duration related types -pub mod duration { - pub use crate::builtins::DateDuration; -} - -/// Calendar field records -pub mod fields { - pub use crate::builtins::{ - calendar::{CalendarFields, YearMonthCalendarFields}, - DateTimeFields, ZonedDateTimeFields, - }; -} - -// TODO: Should we be exporting MonthCode and UtcOffset here. -pub use crate::builtins::{ - calendar::{Calendar, MonthCode}, - core::time_zone::{TimeZone, UtcOffset}, - Duration, Instant, PlainDate, PlainDateTime, PlainMonthDay, PlainTime, PlainYearMonth, - ZonedDateTime, -}; - -/// A library specific trait for unwrapping assertions. -pub(crate) trait TemporalUnwrap { - type Output; - - /// `temporal_rs` based assertion for unwrapping. This will panic in - /// debug builds, but throws error during runtime. - fn temporal_unwrap(self) -> TemporalResult; -} - -impl TemporalUnwrap for Option { - type Output = T; - - fn temporal_unwrap(self) -> TemporalResult { - debug_assert!(self.is_some()); - self.ok_or(TemporalError::assert()) - } -} - -impl TemporalUnwrap for TemporalResult { - type Output = T; - - fn temporal_unwrap(self) -> Self { - debug_assert!(self.is_ok(), "Assertion failed: {:?}", self.err()); - self.map_err(|e| TemporalError::assert().with_message(e.into_message())) - } -} - -#[doc(hidden)] -#[macro_export] -macro_rules! temporal_assert { - ($condition:expr $(,)*) => { - if !$condition { - return Err(TemporalError::assert()); - } - }; - ($condition:expr, $($args:tt)+) => { - if !$condition { - #[cfg(feature = "log")] - log::error!($($args)+); - return Err(TemporalError::assert()); - } - }; -} - -// TODO: Determine final home or leave in the top level? ops::Sign, -// types::Sign, etc. -/// A general Sign type. -#[repr(i8)] -#[derive(Debug, Default, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] -pub enum Sign { - #[default] - Positive = 1, - Zero = 0, - Negative = -1, -} - -impl From for Sign { - fn from(value: i8) -> Self { - match value.cmp(&0) { - Ordering::Greater => Self::Positive, - Ordering::Equal => Self::Zero, - Ordering::Less => Self::Negative, - } - } -} - -impl Sign { - /// Coerces the current `Sign` to be either negative or positive. - pub(crate) const fn as_sign_multiplier(&self) -> i8 { - if matches!(self, Self::Zero) { - return 1; - } - *self as i8 - } - - pub(crate) fn negate(&self) -> Sign { - Sign::from(-(*self as i8)) - } - - pub(crate) fn to_nonzero_sign(self) -> NonZeroSign { - self.into() - } -} - -impl PartialEq for Sign { - fn eq(&self, other: &NonZeroSign) -> bool { - *self as i8 == *other as i8 - } -} - -#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord)] -pub(crate) enum NonZeroSign { - Positive = 1, - Negative = -1, -} - -impl NonZeroSign { - pub(crate) const fn as_sign_multiplier(&self) -> i8 { - *self as i8 - } - - /// Negate the current sign - pub(crate) fn negate(&self) -> NonZeroSign { - Sign::from(-(*self as i8)).into() - } -} - -impl From for NonZeroSign { - fn from(sign: Sign) -> Self { - match sign { - Sign::Positive | Sign::Zero => NonZeroSign::Positive, - Sign::Negative => NonZeroSign::Negative, - } - } -} - -impl From for NonZeroSign { - fn from(value: i8) -> Self { - Sign::from(value).to_nonzero_sign() - } -} - -impl PartialEq for NonZeroSign { - fn eq(&self, other: &Sign) -> bool { - *self as i8 == *other as i8 - } -} - -// ==== Relevant numeric constants ==== - -/// Nanoseconds per day constant: 8.64e+13 -#[doc(hidden)] -pub const NS_PER_DAY: u64 = MS_PER_DAY as u64 * 1_000_000; -#[doc(hidden)] -pub const NS_PER_DAY_NONZERO: core::num::NonZeroU128 = - if let Some(nz) = core::num::NonZeroU128::new(NS_PER_DAY as u128) { - nz - } else { - unreachable!() - }; -/// Milliseconds per day constant: 8.64e+7 -#[doc(hidden)] -pub const MS_PER_DAY: u32 = 24 * 60 * 60 * 1000; -/// Max Instant nanosecond constant -#[doc(hidden)] -pub(crate) const NS_MAX_INSTANT: i128 = NS_PER_DAY as i128 * 100_000_000i128; -/// Min Instant nanosecond constant -#[doc(hidden)] -pub(crate) const NS_MIN_INSTANT: i128 = -NS_MAX_INSTANT; diff --git a/temporal_capi/Cargo.toml b/temporal_capi/Cargo.toml deleted file mode 100644 index f9d9f1a95..000000000 --- a/temporal_capi/Cargo.toml +++ /dev/null @@ -1,36 +0,0 @@ -[package] -name = "temporal_capi" -description = "C interface to temporal_rs" -edition.workspace = true -version.workspace = true -rust-version.workspace = true -authors.workspace = true -license.workspace = true -repository.workspace = true -include = [ - "bindings/**/*", - "src/**/*", - "tests/**/*", - "Cargo.toml", - "LICENSE-Apache", - "LICENSE-MIT", - "README.md", -] - -[dependencies] -diplomat.workspace = true -diplomat-runtime.workspace = true -num-traits.workspace = true -temporal_rs = { workspace = true, default-features = false } -timezone_provider = { workspace = true, default-features = false } -icu_calendar.workspace = true -icu_locale_core.workspace = true -writeable.workspace = true -zoneinfo64 = { workspace = true, optional = true } - -[features] -compiled_data = ["temporal_rs/compiled_data"] -zoneinfo64 = ["dep:zoneinfo64", "timezone_provider/zoneinfo64"] - -[package.metadata.docs.rs] -all-features = true diff --git a/temporal_capi/README.md b/temporal_capi/README.md deleted file mode 100644 index 284b0e2e1..000000000 --- a/temporal_capi/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# temporal_capi [![crates.io](https://img.shields.io/crates/v/temporal_capi)](https://crates.io/crates/temporal_capi) - - - -This crate contains the original definitions of [`temporal_rs`] APIs consumed by [Diplomat](https://github.com/rust-diplomat/diplomat) -to generate FFI bindings. We currently generate bindings for C++ and `extern "C"` APIs. - -The APIs exposed by this crate are *not intended to be used from Rust* and as such this crate may change its Rust API -across compatible semver versions. In contrast, the `extern "C"` APIs and all the language bindings are stable within -the same major semver version. - -[`temporal_rs`]: http://crates.io/crates/temporal_rs - - diff --git a/temporal_capi/src/calendar.rs b/temporal_capi/src/calendar.rs deleted file mode 100644 index a2993e9fa..000000000 --- a/temporal_capi/src/calendar.rs +++ /dev/null @@ -1,82 +0,0 @@ -#[diplomat::bridge] -#[diplomat::abi_rename = "temporal_rs_{0}"] -pub mod ffi { - use crate::error::ffi::TemporalError; - use alloc::boxed::Box; - use diplomat_runtime::DiplomatStr; - use icu_calendar::preferences::CalendarAlgorithm; - - #[diplomat::enum_convert(icu_calendar::AnyCalendarKind, needs_wildcard)] - pub enum AnyCalendarKind { - Iso, - Buddhist, - Chinese, - Coptic, - Dangi, - Ethiopian, - EthiopianAmeteAlem, - Gregorian, - Hebrew, - Indian, - HijriTabularTypeIIFriday, - HijriTabularTypeIIThursday, - HijriUmmAlQura, - Japanese, - JapaneseExtended, - Persian, - Roc, - } - - impl AnyCalendarKind { - pub fn get_for_str(s: &DiplomatStr) -> Option { - let value = icu_locale_core::extensions::unicode::Value::try_from_utf8(s).ok()?; - let algorithm = CalendarAlgorithm::try_from(&value).ok()?; - match icu_calendar::AnyCalendarKind::try_from(algorithm) { - // islamic-rgsa / simulated-mecca is supported by ICU4X but not Temporal - Ok(icu_calendar::AnyCalendarKind::HijriSimulatedMecca) => None, - Ok(c) => Some(c.into()), - Err(()) => None, - } - } - - // https://tc39.es/proposal-temporal/#sec-temporal-parsetemporalcalendarstring - pub fn parse_temporal_calendar_string(s: &DiplomatStr) -> Option { - match temporal_rs::parsers::parse_allowed_calendar_formats(s) { - Some([]) => Some(AnyCalendarKind::Iso), - Some(result) => Self::get_for_str(result), - None => Self::get_for_str(s), - } - } - } - - #[diplomat::opaque] - #[diplomat::transparent_convert] - /// By and large one should not need to construct this type; it mostly exists - /// to represent calendar data found on other Temporal types, obtained via `.calendar()`. - pub struct Calendar(pub temporal_rs::Calendar); - - impl Calendar { - pub fn try_new_constrain(kind: AnyCalendarKind) -> Box { - Box::new(Calendar(temporal_rs::Calendar::new(kind.into()))) - } - - pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { - temporal_rs::Calendar::try_from_utf8(s) - .map(|c| Box::new(Calendar(c))) - .map_err(Into::into) - } - - pub fn is_iso(&self) -> bool { - self.0.is_iso() - } - - pub fn identifier(&self) -> &'static str { - self.0.identifier() - } - /// Returns the kind of this calendar - #[inline] - pub fn kind(&self) -> AnyCalendarKind { - self.0.kind().into() - } - } -} diff --git a/temporal_capi/src/duration.rs b/temporal_capi/src/duration.rs deleted file mode 100644 index bfa5d92eb..000000000 --- a/temporal_capi/src/duration.rs +++ /dev/null @@ -1,335 +0,0 @@ -use crate::error::ffi::TemporalError; - -#[diplomat::bridge] -#[diplomat::abi_rename = "temporal_rs_{0}"] -pub mod ffi { - use crate::error::ffi::TemporalError; - use crate::options::ffi::ToStringRoundingOptions; - use crate::options::ffi::{RoundingOptions, Unit}; - use crate::provider::ffi::Provider; - use crate::zoned_date_time::ffi::RelativeTo; - use alloc::boxed::Box; - use alloc::string::String; - use core::str::FromStr; - use diplomat_runtime::DiplomatOption; - use diplomat_runtime::{DiplomatStr, DiplomatStr16}; - use num_traits::FromPrimitive; - - #[diplomat::opaque] - pub struct Duration(pub(crate) temporal_rs::Duration); - - #[diplomat::opaque] - #[diplomat::transparent_convert] - pub struct DateDuration(pub(crate) temporal_rs::duration::DateDuration); - - pub struct PartialDuration { - pub years: DiplomatOption, - pub months: DiplomatOption, - pub weeks: DiplomatOption, - pub days: DiplomatOption, - pub hours: DiplomatOption, - pub minutes: DiplomatOption, - pub seconds: DiplomatOption, - pub milliseconds: DiplomatOption, - pub microseconds: DiplomatOption, - pub nanoseconds: DiplomatOption, - } - - #[diplomat::enum_convert(temporal_rs::Sign)] - pub enum Sign { - Positive = 1, - Zero = 0, - Negative = -1, - } - - impl PartialDuration { - pub fn is_empty(self) -> bool { - temporal_rs::partial::PartialDuration::try_from(self) - .map(|p| p.is_empty()) - .unwrap_or(false) - } - } - - impl DateDuration { - pub fn try_new( - years: i64, - months: i64, - weeks: i64, - days: i64, - ) -> Result, TemporalError> { - temporal_rs::duration::DateDuration::new(years, months, weeks, days) - .map(|x| Box::new(DateDuration(x))) - .map_err(Into::into) - } - - pub fn abs(&self) -> Box { - Box::new(Self(self.0.abs())) - } - pub fn negated(&self) -> Box { - Box::new(Self(self.0.negated())) - } - - pub fn sign(&self) -> Sign { - self.0.sign().into() - } - } - impl Duration { - /// Temporary API until v8 can move off of it - pub fn create( - years: i64, - months: i64, - weeks: i64, - days: i64, - hours: i64, - minutes: i64, - seconds: i64, - milliseconds: i64, - microseconds: f64, - nanoseconds: f64, - ) -> Result, TemporalError> { - Self::try_new( - years, - months, - weeks, - days, - hours, - minutes, - seconds, - milliseconds, - microseconds, - nanoseconds, - ) - } - - pub fn try_new( - years: i64, - months: i64, - weeks: i64, - days: i64, - hours: i64, - minutes: i64, - seconds: i64, - milliseconds: i64, - microseconds: f64, - nanoseconds: f64, - ) -> Result, TemporalError> { - temporal_rs::Duration::new( - years, - months, - weeks, - days, - hours, - minutes, - seconds, - milliseconds, - i128::from_f64(microseconds).ok_or(TemporalError::range("μs out of range"))?, - i128::from_f64(nanoseconds).ok_or(TemporalError::range("ms out of range"))?, - ) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - - pub fn from_partial_duration(partial: PartialDuration) -> Result, TemporalError> { - temporal_rs::Duration::from_partial_duration(partial.try_into()?) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - - pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { - temporal_rs::Duration::from_utf8(s) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { - // TODO(#275) This should not need to convert - let s = String::from_utf16(s).map_err(|_| temporal_rs::TemporalError::range())?; - temporal_rs::Duration::from_str(&s) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn is_time_within_range(&self) -> bool { - self.0.is_time_within_range() - } - - // set_time_duration is NOT safe to expose over FFI if the date()/time() methods are available - // Diplomat plans to make this a hard error. - - pub fn years(&self) -> i64 { - self.0.years() - } - pub fn months(&self) -> i64 { - self.0.months() - } - pub fn weeks(&self) -> i64 { - self.0.weeks() - } - pub fn days(&self) -> i64 { - self.0.days() - } - pub fn hours(&self) -> i64 { - self.0.hours() - } - pub fn minutes(&self) -> i64 { - self.0.minutes() - } - pub fn seconds(&self) -> i64 { - self.0.seconds() - } - pub fn milliseconds(&self) -> i64 { - self.0.milliseconds() - } - pub fn microseconds(&self) -> f64 { - // The error case should never occur since - // duration values are clamped within range - // - // https://github.com/boa-dev/temporal/issues/189 - f64::from_i128(self.0.microseconds()).unwrap_or(0.) - } - pub fn nanoseconds(&self) -> f64 { - // The error case should never occur since - // duration values are clamped within range - // - // https://github.com/boa-dev/temporal/issues/189 - f64::from_i128(self.0.nanoseconds()).unwrap_or(0.) - } - - pub fn sign(&self) -> Sign { - self.0.sign().into() - } - - pub fn is_zero(&self) -> bool { - self.0.is_zero() - } - - pub fn abs(&self) -> Box { - Box::new(Self(self.0.abs())) - } - pub fn negated(&self) -> Box { - Box::new(Self(self.0.negated())) - } - - pub fn add(&self, other: &Self) -> Result, TemporalError> { - self.0 - .add(&other.0) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - - pub fn subtract(&self, other: &Self) -> Result, TemporalError> { - self.0 - .subtract(&other.0) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - - pub fn to_string( - &self, - options: ToStringRoundingOptions, - write: &mut DiplomatWrite, - ) -> Result<(), TemporalError> { - use core::fmt::Write; - let string = self.0.as_temporal_string(options.into())?; - // throw away the error, this should always succeed - let _ = write.write_str(&string); - - Ok(()) - } - - #[cfg(feature = "compiled_data")] - pub fn round( - &self, - options: RoundingOptions, - relative_to: RelativeTo, - ) -> Result, TemporalError> { - self.round_with_provider(options, relative_to, &Provider::compiled()) - } - pub fn round_with_provider<'p>( - &self, - options: RoundingOptions, - relative_to: RelativeTo, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| self.0.round_with_provider( - options.try_into()?, - relative_to.into(), - p - )) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - - #[cfg(feature = "compiled_data")] - pub fn compare(&self, other: &Self, relative_to: RelativeTo) -> Result { - self.compare_with_provider(other, relative_to, &Provider::compiled()) - } - pub fn compare_with_provider<'p>( - &self, - other: &Self, - relative_to: RelativeTo, - p: &Provider<'p>, - ) -> Result { - // Ideally we'd return core::cmp::Ordering here but Diplomat - // isn't happy about needing to convert the contents of a result - with_provider!(p, |p| self.0.compare_with_provider( - &other.0, - relative_to.into(), - p - )) - .map(|x| x as i8) - .map_err(Into::into) - } - - #[cfg(feature = "compiled_data")] - pub fn total(&self, unit: Unit, relative_to: RelativeTo) -> Result { - self.total_with_provider(unit, relative_to, &Provider::compiled()) - } - pub fn total_with_provider<'p>( - &self, - unit: Unit, - relative_to: RelativeTo, - p: &Provider<'p>, - ) -> Result { - with_provider!(p, |p| self.0.total_with_provider( - unit.into(), - relative_to.into(), - p - )) - .map(|x| x.as_inner()) - .map_err(Into::into) - } - - #[allow(clippy::should_implement_trait)] - pub fn clone(&self) -> Box { - Box::new(Self(self.0)) - } - } -} - -impl TryFrom for temporal_rs::partial::PartialDuration { - type Error = TemporalError; - fn try_from(other: ffi::PartialDuration) -> Result { - use num_traits::FromPrimitive; - Ok(Self { - years: other.years.into_option(), - months: other.months.into_option(), - weeks: other.weeks.into_option(), - days: other.days.into_option(), - hours: other.hours.into_option(), - minutes: other.minutes.into_option(), - seconds: other.seconds.into_option(), - milliseconds: other.milliseconds.into_option(), - microseconds: other - .microseconds - .into_option() - .map(|v| i128::from_f64(v).ok_or(TemporalError::range("μs out of range"))) - .transpose()?, - nanoseconds: other - .nanoseconds - .into_option() - .map(|v| i128::from_f64(v).ok_or(TemporalError::range("ns out of range"))) - .transpose()?, - }) - } -} diff --git a/temporal_capi/src/instant.rs b/temporal_capi/src/instant.rs deleted file mode 100644 index e14a8b8a7..000000000 --- a/temporal_capi/src/instant.rs +++ /dev/null @@ -1,246 +0,0 @@ -#[diplomat::bridge] -#[diplomat::abi_rename = "temporal_rs_{0}"] -pub mod ffi { - use crate::duration::ffi::Duration; - use crate::error::ffi::TemporalError; - use crate::options::ffi::{DifferenceSettings, RoundingOptions}; - use crate::zoned_date_time::ffi::ZonedDateTime; - use alloc::boxed::Box; - use alloc::string::String; - use core::str::FromStr; - use diplomat_runtime::{DiplomatStr, DiplomatStr16}; - - use crate::options::ffi::ToStringRoundingOptions; - use crate::provider::ffi::Provider; - use crate::time_zone::ffi::TimeZone; - - #[diplomat::opaque] - pub struct Instant(pub temporal_rs::Instant); - - /// For portability, we use two u64s instead of an i128. - /// The high bit of the u64 is the sign. - /// This cannot represent i128::MIN, and has a -0, but those are largely - /// irrelevant for this purpose. - /// - /// This could potentially instead be a bit-by-bit split, or something else - #[derive(Debug, Copy, Clone)] - pub struct I128Nanoseconds { - pub high: u64, - pub low: u64, - } - - impl I128Nanoseconds { - pub fn is_valid(self) -> bool { - let ns = i128::from(self); - temporal_rs::unix_time::EpochNanoseconds::from(ns) - .check_validity() - .is_ok() - } - } - - impl Instant { - pub fn try_new(ns: I128Nanoseconds) -> Result, TemporalError> { - temporal_rs::Instant::try_new(ns.into()) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn from_epoch_milliseconds( - epoch_milliseconds: i64, - ) -> Result, TemporalError> { - temporal_rs::Instant::from_epoch_milliseconds(epoch_milliseconds) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { - temporal_rs::Instant::from_utf8(s) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { - // TODO(#275) This should not need to convert - let s = String::from_utf16(s).map_err(|_| temporal_rs::TemporalError::range())?; - temporal_rs::Instant::from_str(&s) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn add(&self, duration: &Duration) -> Result, TemporalError> { - self.0 - .add(&duration.0) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - pub fn subtract(&self, duration: &Duration) -> Result, TemporalError> { - self.0 - .subtract(&duration.0) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - pub fn since( - &self, - other: &Self, - settings: DifferenceSettings, - ) -> Result, TemporalError> { - self.0 - .since(&other.0, settings.try_into()?) - .map(|c| Box::new(Duration(c))) - .map_err(Into::into) - } - pub fn until( - &self, - other: &Self, - settings: DifferenceSettings, - ) -> Result, TemporalError> { - self.0 - .until(&other.0, settings.try_into()?) - .map(|c| Box::new(Duration(c))) - .map_err(Into::into) - } - pub fn round(&self, options: RoundingOptions) -> Result, TemporalError> { - self.0 - .round(options.try_into()?) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn compare(&self, other: &Self) -> core::cmp::Ordering { - self.0.cmp(&other.0) - } - - pub fn equals(&self, other: &Self) -> bool { - self.0 == other.0 - } - - pub fn epoch_milliseconds(&self) -> i64 { - self.0.epoch_milliseconds() - } - - pub fn epoch_nanoseconds(&self) -> I128Nanoseconds { - let ns = self.0.epoch_nanoseconds().as_i128(); - ns.into() - } - - // TODO: rename after 0.15/0.1.0 to remove the with_compiled_data - #[cfg(feature = "compiled_data")] - pub fn to_ixdtf_string_with_compiled_data( - &self, - zone: Option, - options: ToStringRoundingOptions, - write: &mut DiplomatWrite, - ) -> Result<(), TemporalError> { - self.to_ixdtf_string_with_provider(zone, options, &Provider::compiled(), write) - } - pub fn to_ixdtf_string_with_provider<'p>( - &self, - zone: Option, - options: ToStringRoundingOptions, - p: &Provider<'p>, - write: &mut DiplomatWrite, - ) -> Result<(), TemporalError> { - use writeable::Writeable; - with_provider!(p, |p| { - let writeable = self.0.to_ixdtf_writeable_with_provider( - zone.map(Into::into), - options.into(), - p, - )?; - // This can only fail in cases where the DiplomatWriteable is capped, we - // don't care about that. - let _ = writeable.write_to(write); - }); - Ok(()) - } - - #[cfg(feature = "compiled_data")] - pub fn to_zoned_date_time_iso( - &self, - zone: TimeZone, - ) -> Result, TemporalError> { - self.to_zoned_date_time_iso_with_provider(zone, &Provider::compiled()) - } - pub fn to_zoned_date_time_iso_with_provider<'p>( - &self, - zone: TimeZone, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| self - .0 - .to_zoned_date_time_iso_with_provider(zone.into(), p)) - .map(|c| Box::new(ZonedDateTime(c))) - .map_err(Into::into) - } - - #[allow(clippy::should_implement_trait)] - pub fn clone(&self) -> Box { - Box::new(Self(self.0)) - } - } -} - -const U64_HIGH_BIT_MASK: u64 = 1 << 63; - -impl From for i128 { - fn from(ns: ffi::I128Nanoseconds) -> Self { - let is_neg = (ns.high & U64_HIGH_BIT_MASK) != 0; - // Remove the bitflag - let ns_high = (ns.high & !U64_HIGH_BIT_MASK) as u128; - // Stick them together - let total = ((ns_high << 64) + ns.low as u128) as i128; - // Reintroduce the sign - if is_neg { - -total - } else { - total - } - } -} - -impl From for ffi::I128Nanoseconds { - fn from(ns: i128) -> Self { - debug_assert!( - ns != i128::MIN, - "temporal_rs should never produce i128::MIN, it is out of valid range" - ); - let is_neg = ns < 0; - let ns = ns.unsigned_abs(); - - let high = (ns >> 64) as u64; - let low = (ns & u64::MAX as u128) as u64; - let high = if (is_neg) { - high | U64_HIGH_BIT_MASK - } else { - high - }; - - ffi::I128Nanoseconds { high, low } - } -} - -#[test] -fn test_i128_roundtrip() { - #[track_caller] - fn roundtrip(x: i128) { - let ns = ffi::I128Nanoseconds::from(x); - let round = i128::from(ns); - assert_eq!(x, round, "{x} does not roundtrip via {ns:?}"); - } - - roundtrip(0); - roundtrip(-1); - roundtrip(1); - roundtrip(100); - roundtrip(1000); - roundtrip(-1000); - roundtrip(1000000000); - roundtrip(-100000000); - roundtrip(u64::MAX as i128); - roundtrip(-(u64::MIN as i128)); - roundtrip(100 * (u64::MAX as i128)); - roundtrip(-100 * (u64::MAX as i128)); - roundtrip(i128::MIN + 1); - roundtrip(i128::MAX); - roundtrip(i128::MAX - 10); -} diff --git a/temporal_capi/src/lib.rs b/temporal_capi/src/lib.rs deleted file mode 100644 index f9ba98e65..000000000 --- a/temporal_capi/src/lib.rs +++ /dev/null @@ -1,40 +0,0 @@ -#![allow(unused)] // Until we add all the APIs -#![warn(unused_imports)] // But we want to clean up imports -#![allow(clippy::needless_lifetimes)] // Diplomat requires explicit lifetimes at times -#![allow(clippy::too_many_arguments)] // We're mapping APIs with the same argument size -#![allow(clippy::wrong_self_convention)] // Diplomat forces self conventions that may not always be ideal - -//! This crate contains the original definitions of [`temporal_rs`] APIs consumed by [Diplomat](https://github.com/rust-diplomat/diplomat) -//! to generate FFI bindings. We currently generate bindings for C++ and `extern "C"` APIs. -//! -//! The APIs exposed by this crate are *not intended to be used from Rust* and as such this crate may change its Rust API -//! across compatible semver versions. In contrast, the `extern "C"` APIs and all the language bindings are stable within -//! the same major semver version. -//! -//! [`temporal_rs`]: http://crates.io/crates/temporal_rs - -#![no_std] -#![cfg_attr( - not(test), - forbid(clippy::unwrap_used, clippy::expect_used, clippy::indexing_slicing) -)] - -extern crate alloc; - -#[macro_use] -pub mod provider; - -pub mod calendar; -pub mod duration; -pub mod error; -pub mod instant; -pub mod options; - -pub mod plain_date; -pub mod plain_date_time; -pub mod plain_month_day; -pub mod plain_time; -pub mod plain_year_month; -pub mod zoned_date_time; - -pub mod time_zone; diff --git a/temporal_capi/src/plain_date.rs b/temporal_capi/src/plain_date.rs deleted file mode 100644 index 6c5420ce9..000000000 --- a/temporal_capi/src/plain_date.rs +++ /dev/null @@ -1,482 +0,0 @@ -use temporal_rs::MonthCode; - -use crate::error::ffi::TemporalError; - -#[diplomat::bridge] -#[diplomat::abi_rename = "temporal_rs_{0}"] -pub mod ffi { - use crate::calendar::ffi::{AnyCalendarKind, Calendar}; - use crate::duration::ffi::Duration; - use crate::error::ffi::TemporalError; - use crate::instant::ffi::I128Nanoseconds; - use crate::options::ffi::{ArithmeticOverflow, DifferenceSettings, DisplayCalendar}; - use crate::plain_date_time::ffi::PlainDateTime; - use crate::plain_month_day::ffi::PlainMonthDay; - use crate::plain_time::ffi::PlainTime; - use crate::plain_year_month::ffi::PlainYearMonth; - use crate::provider::ffi::Provider; - use crate::time_zone::ffi::TimeZone; - use crate::zoned_date_time::ffi::ZonedDateTime; - use alloc::boxed::Box; - use alloc::string::String; - use core::fmt::Write; - use diplomat_runtime::{DiplomatOption, DiplomatStrSlice, DiplomatWrite}; - use diplomat_runtime::{DiplomatStr, DiplomatStr16}; - use writeable::Writeable; - - use core::str::FromStr; - - #[diplomat::opaque] - pub struct PlainDate(pub(crate) temporal_rs::PlainDate); - - pub struct PartialDate<'a> { - pub year: DiplomatOption, - pub month: DiplomatOption, - // None if empty - pub month_code: DiplomatStrSlice<'a>, - pub day: DiplomatOption, - // None if empty - pub era: DiplomatStrSlice<'a>, - pub era_year: DiplomatOption, - pub calendar: AnyCalendarKind, - } - - #[diplomat::opaque] - pub struct ParsedDate(pub(crate) temporal_rs::parsed_intermediates::ParsedDate); - - impl ParsedDate { - pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { - temporal_rs::parsed_intermediates::ParsedDate::from_utf8(s) - .map(|x| Box::new(ParsedDate(x))) - .map_err(Into::::into) - } - pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { - // TODO(#275) This should not need to convert - let s = String::from_utf16(s).map_err(|_| temporal_rs::TemporalError::range())?; - - temporal_rs::parsed_intermediates::ParsedDate::from_utf8(s.as_bytes()) - .map(|x| Box::new(ParsedDate(x))) - .map_err(Into::::into) - } - - pub fn year_month_from_utf8(s: &DiplomatStr) -> Result, TemporalError> { - temporal_rs::parsed_intermediates::ParsedDate::year_month_from_utf8(s) - .map(|x| Box::new(ParsedDate(x))) - .map_err(Into::::into) - } - pub fn year_month_from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { - // TODO(#275) This should not need to convert - let s = String::from_utf16(s).map_err(|_| temporal_rs::TemporalError::range())?; - - temporal_rs::parsed_intermediates::ParsedDate::year_month_from_utf8(s.as_bytes()) - .map(|x| Box::new(ParsedDate(x))) - .map_err(Into::::into) - } - - pub fn month_day_from_utf8(s: &DiplomatStr) -> Result, TemporalError> { - temporal_rs::parsed_intermediates::ParsedDate::month_day_from_utf8(s) - .map(|x| Box::new(ParsedDate(x))) - .map_err(Into::::into) - } - pub fn month_day_from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { - // TODO(#275) This should not need to convert - let s = String::from_utf16(s).map_err(|_| temporal_rs::TemporalError::range())?; - - temporal_rs::parsed_intermediates::ParsedDate::month_day_from_utf8(s.as_bytes()) - .map(|x| Box::new(ParsedDate(x))) - .map_err(Into::::into) - } - } - - impl PlainDate { - pub fn try_new_constrain( - year: i32, - month: u8, - day: u8, - calendar: AnyCalendarKind, - ) -> Result, TemporalError> { - temporal_rs::PlainDate::new( - year, - month, - day, - temporal_rs::Calendar::new(calendar.into()), - ) - .map(|x| Box::new(PlainDate(x))) - .map_err(Into::into) - } - pub fn try_new( - year: i32, - month: u8, - day: u8, - calendar: AnyCalendarKind, - ) -> Result, TemporalError> { - temporal_rs::PlainDate::try_new( - year, - month, - day, - temporal_rs::Calendar::new(calendar.into()), - ) - .map(|x| Box::new(PlainDate(x))) - .map_err(Into::into) - } - pub fn try_new_with_overflow( - year: i32, - month: u8, - day: u8, - calendar: AnyCalendarKind, - overflow: ArithmeticOverflow, - ) -> Result, TemporalError> { - temporal_rs::PlainDate::new_with_overflow( - year, - month, - day, - temporal_rs::Calendar::new(calendar.into()), - overflow.into(), - ) - .map(|x| Box::new(PlainDate(x))) - .map_err(Into::into) - } - pub fn from_partial( - partial: PartialDate, - overflow: Option, - ) -> Result, TemporalError> { - temporal_rs::PlainDate::from_partial(partial.try_into()?, overflow.map(Into::into)) - .map(|x| Box::new(PlainDate(x))) - .map_err(Into::into) - } - - pub fn from_parsed(parsed: &ParsedDate) -> Result, TemporalError> { - temporal_rs::PlainDate::from_parsed(parsed.0) - .map(|x| Box::new(PlainDate(x))) - .map_err(Into::into) - } - - #[cfg(feature = "compiled_data")] - pub fn from_epoch_milliseconds(ms: i64, tz: TimeZone) -> Result, TemporalError> { - Self::from_epoch_milliseconds_with_provider(ms, tz, &Provider::compiled()) - } - pub fn from_epoch_milliseconds_with_provider<'p>( - ms: i64, - tz: TimeZone, - p: &Provider<'p>, - ) -> Result, TemporalError> { - let zdt = crate::zoned_date_time::zdt_from_epoch_ms_with_provider(ms, tz.into(), p)?; - Ok(Box::new(Self(zdt.to_plain_date()))) - } - - #[cfg(feature = "compiled_data")] - pub fn from_epoch_nanoseconds( - ns: I128Nanoseconds, - tz: TimeZone, - ) -> Result, TemporalError> { - Self::from_epoch_nanoseconds_with_provider(ns, tz, &Provider::compiled()) - } - pub fn from_epoch_nanoseconds_with_provider<'p>( - ns: I128Nanoseconds, - tz: TimeZone, - p: &Provider<'p>, - ) -> Result, TemporalError> { - let zdt = crate::zoned_date_time::zdt_from_epoch_ns_with_provider(ns, tz.into(), p)?; - Ok(Box::new(Self(zdt.to_plain_date()))) - } - - pub fn with( - &self, - partial: PartialDate, - overflow: Option, - ) -> Result, TemporalError> { - self.0 - .with(partial.try_into()?, overflow.map(Into::into)) - .map(|x| Box::new(PlainDate(x))) - .map_err(Into::into) - } - - pub fn with_calendar(&self, calendar: AnyCalendarKind) -> Box { - Box::new(PlainDate( - self.0 - .with_calendar(temporal_rs::Calendar::new(calendar.into())), - )) - } - - pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { - temporal_rs::PlainDate::from_utf8(s) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { - // TODO(#275) This should not need to convert - let s = String::from_utf16(s).map_err(|_| temporal_rs::TemporalError::range())?; - temporal_rs::PlainDate::from_str(&s) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn calendar<'a>(&'a self) -> &'a Calendar { - Calendar::transparent_convert(self.0.calendar()) - } - - pub fn is_valid(&self) -> bool { - self.0.is_valid() - } - - pub fn add( - &self, - duration: &Duration, - overflow: Option, - ) -> Result, TemporalError> { - self.0 - .add(&duration.0, overflow.map(Into::into)) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - pub fn subtract( - &self, - duration: &Duration, - overflow: Option, - ) -> Result, TemporalError> { - self.0 - .subtract(&duration.0, overflow.map(Into::into)) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - pub fn until( - &self, - other: &Self, - settings: DifferenceSettings, - ) -> Result, TemporalError> { - self.0 - .until(&other.0, settings.try_into()?) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - pub fn since( - &self, - other: &Self, - settings: DifferenceSettings, - ) -> Result, TemporalError> { - self.0 - .since(&other.0, settings.try_into()?) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - - pub fn equals(&self, other: &Self) -> bool { - self.0 == other.0 - } - - pub fn compare(one: &Self, two: &Self) -> core::cmp::Ordering { - one.0.compare_iso(&two.0) - } - pub fn year(&self) -> i32 { - self.0.year() - } - pub fn month(&self) -> u8 { - self.0.month() - } - pub fn month_code(&self, write: &mut DiplomatWrite) { - let code = self.0.month_code(); - // throw away the error, this should always succeed - let _ = write.write_str(code.as_str()); - } - pub fn day(&self) -> u8 { - self.0.day() - } - pub fn day_of_week(&self) -> u16 { - self.0.day_of_week() - } - pub fn day_of_year(&self) -> u16 { - self.0.day_of_year() - } - pub fn week_of_year(&self) -> Option { - self.0.week_of_year() - } - pub fn year_of_week(&self) -> Option { - self.0.year_of_week() - } - pub fn days_in_week(&self) -> u16 { - self.0.days_in_week() - } - pub fn days_in_month(&self) -> u16 { - self.0.days_in_month() - } - pub fn days_in_year(&self) -> u16 { - self.0.days_in_year() - } - pub fn months_in_year(&self) -> u16 { - self.0.months_in_year() - } - pub fn in_leap_year(&self) -> bool { - self.0.in_leap_year() - } - // Writes an empty string for no era - pub fn era(&self, write: &mut DiplomatWrite) { - let era = self.0.era(); - if let Some(era) = era { - // throw away the error, this should always succeed - let _ = write.write_str(&era); - } - } - - pub fn era_year(&self) -> Option { - self.0.era_year() - } - - pub fn to_plain_date_time( - &self, - time: Option<&PlainTime>, - ) -> Result, TemporalError> { - self.0 - .to_plain_date_time(time.map(|t| t.0)) - .map(|x| Box::new(PlainDateTime(x))) - .map_err(Into::into) - } - - pub fn to_plain_month_day(&self) -> Result, TemporalError> { - self.0 - .to_plain_month_day() - .map(|x| Box::new(PlainMonthDay(x))) - .map_err(Into::into) - } - - pub fn to_plain_year_month(&self) -> Result, TemporalError> { - self.0 - .to_plain_year_month() - .map(|x| Box::new(PlainYearMonth(x))) - .map_err(Into::into) - } - #[cfg(feature = "compiled_data")] - pub fn to_zoned_date_time( - &self, - time_zone: TimeZone, - time: Option<&PlainTime>, - ) -> Result, TemporalError> { - self.to_zoned_date_time_with_provider(time_zone, time, &Provider::compiled()) - } - pub fn to_zoned_date_time_with_provider<'p>( - &self, - time_zone: TimeZone, - time: Option<&PlainTime>, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| self.0.to_zoned_date_time_with_provider( - time_zone.into(), - time.map(|x| x.0), - p - )) - .map(|x| Box::new(ZonedDateTime(x))) - .map_err(Into::into) - } - - pub fn epoch_ms_for_utc(&self) -> Result { - let ns = self.0.epoch_ns_for_utc(); - - let ns_i128 = ns.as_i128(); - let ms = ns_i128 / 1_000_000; - if let Ok(ms) = i64::try_from(ms) { - Ok(ms) - } else { - Err(TemporalError::assert("Found an out-of-range Date")) - } - } - - pub fn to_ixdtf_string( - &self, - display_calendar: DisplayCalendar, - write: &mut DiplomatWrite, - ) { - let writeable = self.0.to_ixdtf_writeable(display_calendar.into()); - // This can only fail in cases where the DiplomatWriteable is capped, we - // don't care about that. - let _ = writeable.write_to(write); - } - - #[allow(clippy::should_implement_trait)] - pub fn clone(&self) -> Box { - Box::new(Self(self.0.clone())) - } - } -} - -impl TryFrom> for temporal_rs::partial::PartialDate { - type Error = TemporalError; - fn try_from(other: ffi::PartialDate<'_>) -> Result { - let calendar = temporal_rs::Calendar::new(other.calendar.into()); - Ok(Self { - calendar_fields: other.try_into()?, - calendar, - }) - } -} - -impl TryFrom> for temporal_rs::partial::PartialYearMonth { - type Error = TemporalError; - fn try_from(other: ffi::PartialDate<'_>) -> Result { - let calendar = temporal_rs::Calendar::new(other.calendar.into()); - Ok(Self { - calendar_fields: other.try_into()?, - calendar, - }) - } -} - -impl TryFrom> for temporal_rs::fields::CalendarFields { - type Error = TemporalError; - fn try_from(other: ffi::PartialDate<'_>) -> Result { - use temporal_rs::TinyAsciiStr; - - let month_code = if other.month_code.is_empty() { - None - } else { - Some(MonthCode::try_from_utf8(other.month_code.into()).map_err(TemporalError::from)?) - }; - - let era = if other.era.is_empty() { - None - } else { - Some(TinyAsciiStr::try_from_utf8(other.era.into()).map_err(|_| { - TemporalError::from( - temporal_rs::TemporalError::range().with_message("Invalid era code."), - ) - })?) - }; - Ok(Self { - year: other.year.into(), - month: other.month.into(), - month_code, - day: other.day.into(), - era_year: other.era_year.into(), - era, - }) - } -} - -impl TryFrom> for temporal_rs::fields::YearMonthCalendarFields { - type Error = TemporalError; - fn try_from(other: ffi::PartialDate<'_>) -> Result { - use temporal_rs::TinyAsciiStr; - - let month_code = if other.month_code.is_empty() { - None - } else { - Some(MonthCode::try_from_utf8(other.month_code.into()).map_err(TemporalError::from)?) - }; - - let era = if other.era.is_empty() { - None - } else { - Some(TinyAsciiStr::try_from_utf8(other.era.into()).map_err(|_| { - TemporalError::from( - temporal_rs::TemporalError::range().with_message("Invalid era code."), - ) - })?) - }; - Ok(Self { - year: other.year.into(), - month: other.month.into(), - month_code, - era_year: other.era_year.into(), - era, - }) - } -} diff --git a/temporal_capi/src/plain_date_time.rs b/temporal_capi/src/plain_date_time.rs deleted file mode 100644 index be33a7f2e..000000000 --- a/temporal_capi/src/plain_date_time.rs +++ /dev/null @@ -1,413 +0,0 @@ -use crate::error::ffi::TemporalError; - -#[diplomat::bridge] -#[diplomat::abi_rename = "temporal_rs_{0}"] -pub mod ffi { - use crate::calendar::ffi::{AnyCalendarKind, Calendar}; - use crate::duration::ffi::Duration; - use crate::error::ffi::TemporalError; - use crate::instant::ffi::I128Nanoseconds; - use crate::options::ffi::{ - ArithmeticOverflow, DifferenceSettings, DisplayCalendar, RoundingOptions, - ToStringRoundingOptions, - }; - use crate::provider::ffi::Provider; - use crate::time_zone::ffi::TimeZone; - use crate::zoned_date_time::ffi::ZonedDateTime; - use alloc::boxed::Box; - - use crate::options::ffi::Disambiguation; - use crate::plain_date::ffi::{PartialDate, PlainDate}; - use crate::plain_time::ffi::{PartialTime, PlainTime}; - use alloc::string::String; - use core::fmt::Write; - use core::str::FromStr; - use diplomat_runtime::DiplomatWrite; - use diplomat_runtime::{DiplomatStr, DiplomatStr16}; - use writeable::Writeable; - - #[diplomat::opaque] - pub struct PlainDateTime(pub(crate) temporal_rs::PlainDateTime); - - pub struct PartialDateTime<'a> { - pub date: PartialDate<'a>, - pub time: PartialTime, - } - - #[diplomat::opaque] - pub struct ParsedDateTime(temporal_rs::parsed_intermediates::ParsedDateTime); - - impl ParsedDateTime { - pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { - temporal_rs::parsed_intermediates::ParsedDateTime::from_utf8(s) - .map(|x| Box::new(ParsedDateTime(x))) - .map_err(Into::::into) - } - pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { - // TODO(#275) This should not need to convert - let s = String::from_utf16(s).map_err(|_| temporal_rs::TemporalError::range())?; - - temporal_rs::parsed_intermediates::ParsedDateTime::from_utf8(s.as_bytes()) - .map(|x| Box::new(ParsedDateTime(x))) - .map_err(Into::::into) - } - } - - impl PlainDateTime { - pub fn try_new_constrain( - year: i32, - month: u8, - day: u8, - hour: u8, - minute: u8, - second: u8, - millisecond: u16, - microsecond: u16, - nanosecond: u16, - calendar: AnyCalendarKind, - ) -> Result, TemporalError> { - temporal_rs::PlainDateTime::new( - year, - month, - day, - hour, - minute, - second, - millisecond, - microsecond, - nanosecond, - temporal_rs::Calendar::new(calendar.into()), - ) - .map(|x| Box::new(PlainDateTime(x))) - .map_err(Into::into) - } - pub fn try_new( - year: i32, - month: u8, - day: u8, - hour: u8, - minute: u8, - second: u8, - millisecond: u16, - microsecond: u16, - nanosecond: u16, - calendar: AnyCalendarKind, - ) -> Result, TemporalError> { - temporal_rs::PlainDateTime::try_new( - year, - month, - day, - hour, - minute, - second, - millisecond, - microsecond, - nanosecond, - temporal_rs::Calendar::new(calendar.into()), - ) - .map(|x| Box::new(PlainDateTime(x))) - .map_err(Into::into) - } - - pub fn from_partial( - partial: PartialDateTime, - overflow: Option, - ) -> Result, TemporalError> { - temporal_rs::PlainDateTime::from_partial(partial.try_into()?, overflow.map(Into::into)) - .map(|x| Box::new(PlainDateTime(x))) - .map_err(Into::into) - } - - pub fn from_parsed(parsed: &ParsedDateTime) -> Result, TemporalError> { - temporal_rs::PlainDateTime::from_parsed(parsed.0) - .map(|x| Box::new(PlainDateTime(x))) - .map_err(Into::into) - } - - #[cfg(feature = "compiled_data")] - pub fn from_epoch_milliseconds(ms: i64, tz: TimeZone) -> Result, TemporalError> { - Self::from_epoch_milliseconds_with_provider(ms, tz, &Provider::compiled()) - } - pub fn from_epoch_milliseconds_with_provider<'p>( - ms: i64, - tz: TimeZone, - p: &Provider<'p>, - ) -> Result, TemporalError> { - let zdt = crate::zoned_date_time::zdt_from_epoch_ms_with_provider(ms, tz.into(), p)?; - Ok(Box::new(Self(zdt.to_plain_date_time()))) - } - #[cfg(feature = "compiled_data")] - pub fn from_epoch_nanoseconds( - ns: I128Nanoseconds, - tz: TimeZone, - ) -> Result, TemporalError> { - Self::from_epoch_nanoseconds_with_provider(ns, tz, &Provider::compiled()) - } - pub fn from_epoch_nanoseconds_with_provider<'p>( - ns: I128Nanoseconds, - tz: TimeZone, - p: &Provider<'p>, - ) -> Result, TemporalError> { - let zdt = crate::zoned_date_time::zdt_from_epoch_ns_with_provider(ns, tz.into(), p)?; - Ok(Box::new(Self(zdt.to_plain_date_time()))) - } - pub fn with( - &self, - partial: PartialDateTime, - overflow: Option, - ) -> Result, TemporalError> { - self.0 - .with(partial.try_into()?, overflow.map(Into::into)) - .map(|x| Box::new(PlainDateTime(x))) - .map_err(Into::into) - } - - pub fn with_time(&self, time: Option<&PlainTime>) -> Result, TemporalError> { - self.0 - .with_time(time.map(|t| t.0)) - .map(|x| Box::new(PlainDateTime(x))) - .map_err(Into::into) - } - - pub fn with_calendar(&self, calendar: AnyCalendarKind) -> Box { - Box::new(PlainDateTime( - self.0 - .with_calendar(temporal_rs::Calendar::new(calendar.into())), - )) - } - - pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { - temporal_rs::PlainDateTime::from_utf8(s) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { - // TODO(#275) This should not need to convert - let s = String::from_utf16(s).map_err(|_| temporal_rs::TemporalError::range())?; - temporal_rs::PlainDateTime::from_str(&s) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn hour(&self) -> u8 { - self.0.hour() - } - pub fn minute(&self) -> u8 { - self.0.minute() - } - pub fn second(&self) -> u8 { - self.0.second() - } - pub fn millisecond(&self) -> u16 { - self.0.millisecond() - } - pub fn microsecond(&self) -> u16 { - self.0.microsecond() - } - pub fn nanosecond(&self) -> u16 { - self.0.nanosecond() - } - - pub fn calendar<'a>(&'a self) -> &'a Calendar { - Calendar::transparent_convert(self.0.calendar()) - } - - pub fn year(&self) -> i32 { - self.0.year() - } - pub fn month(&self) -> u8 { - self.0.month() - } - pub fn month_code(&self, write: &mut DiplomatWrite) { - let code = self.0.month_code(); - // throw away the error, this should always succeed - let _ = write.write_str(code.as_str()); - } - pub fn day(&self) -> u8 { - self.0.day() - } - pub fn day_of_week(&self) -> u16 { - self.0.day_of_week() - } - pub fn day_of_year(&self) -> u16 { - self.0.day_of_year() - } - pub fn week_of_year(&self) -> Option { - self.0.week_of_year() - } - pub fn year_of_week(&self) -> Option { - self.0.year_of_week() - } - pub fn days_in_week(&self) -> u16 { - self.0.days_in_week() - } - pub fn days_in_month(&self) -> u16 { - self.0.days_in_month() - } - pub fn days_in_year(&self) -> u16 { - self.0.days_in_year() - } - pub fn months_in_year(&self) -> u16 { - self.0.months_in_year() - } - pub fn in_leap_year(&self) -> bool { - self.0.in_leap_year() - } - // Writes an empty string for no era - pub fn era(&self, write: &mut DiplomatWrite) { - let era = self.0.era(); - if let Some(era) = era { - // throw away the error, this should always succeed - let _ = write.write_str(&era); - } - } - - pub fn era_year(&self) -> Option { - self.0.era_year() - } - - pub fn add( - &self, - duration: &Duration, - overflow: Option, - ) -> Result, TemporalError> { - self.0 - .add(&duration.0, overflow.map(Into::into)) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - pub fn subtract( - &self, - duration: &Duration, - overflow: Option, - ) -> Result, TemporalError> { - self.0 - .subtract(&duration.0, overflow.map(Into::into)) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - pub fn until( - &self, - other: &Self, - settings: DifferenceSettings, - ) -> Result, TemporalError> { - self.0 - .until(&other.0, settings.try_into()?) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - pub fn since( - &self, - other: &Self, - settings: DifferenceSettings, - ) -> Result, TemporalError> { - self.0 - .since(&other.0, settings.try_into()?) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - - pub fn equals(&self, other: &Self) -> bool { - self.0 == other.0 - } - - pub fn compare(one: &Self, two: &Self) -> core::cmp::Ordering { - one.0.compare_iso(&two.0) - } - - pub fn round(&self, options: RoundingOptions) -> Result, TemporalError> { - self.0 - .round(options.try_into()?) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - - pub fn to_plain_date(&self) -> Box { - Box::new(PlainDate(self.0.to_plain_date())) - } - - pub fn to_plain_time(&self) -> Box { - Box::new(PlainTime(self.0.to_plain_time())) - } - - #[cfg(feature = "compiled_data")] - pub fn to_zoned_date_time( - &self, - time_zone: TimeZone, - disambiguation: Disambiguation, - ) -> Result, TemporalError> { - self.to_zoned_date_time_with_provider(time_zone, disambiguation, &Provider::compiled()) - } - - pub fn to_zoned_date_time_with_provider<'p>( - &self, - time_zone: TimeZone, - disambiguation: Disambiguation, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| self.0.to_zoned_date_time_with_provider( - time_zone.into(), - disambiguation.into(), - p - )) - .map(|x| Box::new(ZonedDateTime(x))) - .map_err(Into::into) - } - - pub fn epoch_ms_for_utc(&self) -> Result { - let ns = self.0.epoch_ns_for_utc(); - - let ns_i128 = ns.as_i128(); - let ms = ns_i128 / 1_000_000; - if let Ok(ms) = i64::try_from(ms) { - Ok(ms) - } else { - Err(TemporalError::assert("Found an out-of-range DateTime")) - } - } - - pub fn to_ixdtf_string( - &self, - options: ToStringRoundingOptions, - - display_calendar: DisplayCalendar, - write: &mut DiplomatWrite, - ) -> Result<(), TemporalError> { - let writeable = self - .0 - .to_ixdtf_writeable(options.into(), display_calendar.into())?; - - // This can only fail in cases where the DiplomatWriteable is capped, we - // don't care about that. - let _ = writeable.write_to(write); - Ok(()) - } - - #[allow(clippy::should_implement_trait)] - pub fn clone(&self) -> Box { - Box::new(Self(self.0.clone())) - } - } -} - -impl TryFrom> for temporal_rs::partial::PartialDateTime { - type Error = TemporalError; - fn try_from(other: ffi::PartialDateTime<'_>) -> Result { - let calendar = temporal_rs::Calendar::new(other.date.calendar.into()); - Ok(Self { - fields: other.try_into()?, - calendar, - }) - } -} - -impl TryFrom> for temporal_rs::fields::DateTimeFields { - type Error = TemporalError; - fn try_from(other: ffi::PartialDateTime<'_>) -> Result { - Ok(Self { - calendar_fields: other.date.try_into()?, - time: other.time.into(), - }) - } -} diff --git a/temporal_capi/src/plain_month_day.rs b/temporal_capi/src/plain_month_day.rs deleted file mode 100644 index 2180cc9cb..000000000 --- a/temporal_capi/src/plain_month_day.rs +++ /dev/null @@ -1,171 +0,0 @@ -#[diplomat::bridge] -#[diplomat::abi_rename = "temporal_rs_{0}"] -pub mod ffi { - use crate::calendar::ffi::{AnyCalendarKind, Calendar}; - use crate::error::ffi::TemporalError; - use alloc::boxed::Box; - - use crate::options::ffi::{ArithmeticOverflow, DisplayCalendar}; - use crate::plain_date::ffi::{PartialDate, PlainDate}; - use crate::time_zone::ffi::TimeZone; - - use crate::provider::ffi::Provider; - use alloc::string::String; - use core::fmt::Write; - use core::str::FromStr; - use diplomat_runtime::DiplomatWrite; - use diplomat_runtime::{DiplomatStr, DiplomatStr16}; - use writeable::Writeable; - - #[diplomat::opaque] - pub struct PlainMonthDay(pub(crate) temporal_rs::PlainMonthDay); - - impl PlainMonthDay { - pub fn try_new_with_overflow( - month: u8, - day: u8, - calendar: AnyCalendarKind, - overflow: ArithmeticOverflow, - ref_year: Option, - ) -> Result, TemporalError> { - temporal_rs::PlainMonthDay::new_with_overflow( - month, - day, - temporal_rs::Calendar::new(calendar.into()), - overflow.into(), - ref_year, - ) - .map(|x| Box::new(PlainMonthDay(x))) - .map_err(Into::into) - } - - pub fn from_partial( - partial: PartialDate, - overflow: Option, - ) -> Result, TemporalError> { - temporal_rs::PlainMonthDay::from_partial(partial.try_into()?, overflow.map(Into::into)) - .map(|x| Box::new(PlainMonthDay(x))) - .map_err(Into::into) - } - pub fn from_parsed( - parsed: &crate::plain_date::ffi::ParsedDate, - ) -> Result, TemporalError> { - temporal_rs::PlainMonthDay::from_parsed(parsed.0) - .map(|x| Box::new(PlainMonthDay(x))) - .map_err(Into::into) - } - - pub fn with( - &self, - partial: PartialDate, - overflow: Option, - ) -> Result, TemporalError> { - self.0 - .with(partial.try_into()?, overflow.map(Into::into)) - .map(|x| Box::new(PlainMonthDay(x))) - .map_err(Into::into) - } - - pub fn equals(&self, other: &Self) -> bool { - self.0 == other.0 - } - - pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { - temporal_rs::PlainMonthDay::from_utf8(s) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { - // TODO(#275) This should not need to convert - let s = String::from_utf16(s).map_err(|_| temporal_rs::TemporalError::range())?; - temporal_rs::PlainMonthDay::from_str(&s) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn day(&self) -> u8 { - self.0.day() - } - - pub fn calendar<'a>(&'a self) -> &'a Calendar { - Calendar::transparent_convert(self.0.calendar()) - } - - pub fn month(&self) -> u8 { - self.0.month_code().to_month_integer() - } - - pub fn month_code(&self, write: &mut DiplomatWrite) { - let code = self.0.month_code(); - // throw away the error, this should always succeed - let _ = write.write_str(code.as_str()); - } - - pub fn reference_year(&self) -> i32 { - self.0.reference_year() - } - - pub fn to_plain_date( - &self, - year: Option, - ) -> Result, TemporalError> { - self.0 - .to_plain_date(year.map(|y| y.try_into()).transpose()?) - .map(|x| Box::new(PlainDate(x))) - .map_err(Into::into) - } - - pub fn epoch_ms_for_utc(&self) -> Result { - let ns = self.0.epoch_ns_for_utc(); - - let ns_i128 = ns.as_i128(); - let ms = ns_i128 / 1_000_000; - if let Ok(ms) = i64::try_from(ms) { - Ok(ms) - } else { - Err(TemporalError::assert("Found an out-of-range MonthDay")) - } - } - - #[cfg(feature = "compiled_data")] - pub fn epoch_ms_for(&self, time_zone: TimeZone) -> Result { - self.epoch_ms_for_with_provider(time_zone, &Provider::compiled()) - } - - pub fn epoch_ms_for_with_provider<'p>( - &self, - time_zone: TimeZone, - p: &Provider<'p>, - ) -> Result { - let ns = with_provider!(p, |p| self - .0 - .epoch_ns_for_with_provider(time_zone.into(), p) - .map_err(TemporalError::from))?; - - let ns_i128 = ns.as_i128(); - let ms = ns_i128 / 1_000_000; - if let Ok(ms) = i64::try_from(ms) { - Ok(ms) - } else { - Err(TemporalError::assert("Found an out-of-range MonthDay")) - } - } - - pub fn to_ixdtf_string( - &self, - display_calendar: DisplayCalendar, - write: &mut DiplomatWrite, - ) { - let writeable = self.0.to_ixdtf_writeable(display_calendar.into()); - // This can only fail in cases where the DiplomatWriteable is capped, we - // don't care about that. - let _ = writeable.write_to(write); - } - - #[allow(clippy::should_implement_trait)] - pub fn clone(&self) -> Box { - Box::new(Self(self.0.clone())) - } - } -} diff --git a/temporal_capi/src/plain_time.rs b/temporal_capi/src/plain_time.rs deleted file mode 100644 index 83c1eed42..000000000 --- a/temporal_capi/src/plain_time.rs +++ /dev/null @@ -1,251 +0,0 @@ -#[diplomat::bridge] -#[diplomat::abi_rename = "temporal_rs_{0}"] -pub mod ffi { - use alloc::boxed::Box; - - use crate::duration::ffi::Duration; - use crate::error::ffi::TemporalError; - use crate::instant::ffi::I128Nanoseconds; - use crate::options::ffi::{ - ArithmeticOverflow, DifferenceSettings, RoundingOptions, ToStringRoundingOptions, - }; - use crate::provider::ffi::Provider; - use crate::time_zone::ffi::TimeZone; - use alloc::string::String; - use core::str::FromStr; - use diplomat_runtime::{DiplomatOption, DiplomatWrite}; - use diplomat_runtime::{DiplomatStr, DiplomatStr16}; - use writeable::Writeable; - - #[diplomat::opaque] - pub struct PlainTime(pub(crate) temporal_rs::PlainTime); - - pub struct PartialTime { - pub hour: DiplomatOption, - pub minute: DiplomatOption, - pub second: DiplomatOption, - pub millisecond: DiplomatOption, - pub microsecond: DiplomatOption, - pub nanosecond: DiplomatOption, - } - - impl PlainTime { - pub fn try_new_constrain( - hour: u8, - minute: u8, - second: u8, - millisecond: u16, - microsecond: u16, - nanosecond: u16, - ) -> Result, TemporalError> { - temporal_rs::PlainTime::new(hour, minute, second, millisecond, microsecond, nanosecond) - .map(|x| Box::new(PlainTime(x))) - .map_err(Into::into) - } - pub fn try_new( - hour: u8, - minute: u8, - second: u8, - millisecond: u16, - microsecond: u16, - nanosecond: u16, - ) -> Result, TemporalError> { - temporal_rs::PlainTime::try_new( - hour, - minute, - second, - millisecond, - microsecond, - nanosecond, - ) - .map(|x| Box::new(PlainTime(x))) - .map_err(Into::into) - } - - pub fn from_partial( - partial: PartialTime, - overflow: Option, - ) -> Result, TemporalError> { - temporal_rs::PlainTime::from_partial(partial.into(), overflow.map(Into::into)) - .map(|x| Box::new(PlainTime(x))) - .map_err(Into::into) - } - - #[cfg(feature = "compiled_data")] - pub fn from_epoch_milliseconds(ms: i64, tz: TimeZone) -> Result, TemporalError> { - Self::from_epoch_milliseconds_with_provider(ms, tz, &Provider::compiled()) - } - pub fn from_epoch_milliseconds_with_provider<'p>( - ms: i64, - tz: TimeZone, - p: &Provider<'p>, - ) -> Result, TemporalError> { - let zdt = crate::zoned_date_time::zdt_from_epoch_ms_with_provider(ms, tz.into(), p)?; - Ok(Box::new(Self(zdt.to_plain_time()))) - } - - #[cfg(feature = "compiled_data")] - pub fn from_epoch_nanoseconds( - ns: I128Nanoseconds, - tz: TimeZone, - ) -> Result, TemporalError> { - Self::from_epoch_nanoseconds_with_provider(ns, tz, &Provider::compiled()) - } - pub fn from_epoch_nanoseconds_with_provider<'p>( - ns: I128Nanoseconds, - tz: TimeZone, - p: &Provider<'p>, - ) -> Result, TemporalError> { - let zdt = crate::zoned_date_time::zdt_from_epoch_ns_with_provider(ns, tz.into(), p)?; - Ok(Box::new(Self(zdt.to_plain_time()))) - } - - pub fn epoch_ms_for_utc(&self) -> Result { - let ns = self.0.epoch_ns_for_utc(); - - let ns_i128 = ns.as_i128(); - let ms = ns_i128 / 1_000_000; - if let Ok(ms) = i64::try_from(ms) { - Ok(ms) - } else { - Err(TemporalError::assert("Found an out-of-range Time")) - } - } - - pub fn with( - &self, - partial: PartialTime, - overflow: Option, - ) -> Result, TemporalError> { - self.0 - .with(partial.into(), overflow.map(Into::into)) - .map(|x| Box::new(PlainTime(x))) - .map_err(Into::into) - } - - pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { - temporal_rs::PlainTime::from_utf8(s) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { - // TODO(#275) This should not need to convert - let s = String::from_utf16(s).map_err(|_| temporal_rs::TemporalError::range())?; - temporal_rs::PlainTime::from_str(&s) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn hour(&self) -> u8 { - self.0.hour() - } - pub fn minute(&self) -> u8 { - self.0.minute() - } - pub fn second(&self) -> u8 { - self.0.second() - } - pub fn millisecond(&self) -> u16 { - self.0.millisecond() - } - pub fn microsecond(&self) -> u16 { - self.0.microsecond() - } - pub fn nanosecond(&self) -> u16 { - self.0.nanosecond() - } - - pub fn add(&self, duration: &Duration) -> Result, TemporalError> { - self.0 - .add(&duration.0) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - pub fn subtract(&self, duration: &Duration) -> Result, TemporalError> { - self.0 - .subtract(&duration.0) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - pub fn until( - &self, - other: &Self, - settings: DifferenceSettings, - ) -> Result, TemporalError> { - self.0 - .until(&other.0, settings.try_into()?) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - pub fn since( - &self, - other: &Self, - settings: DifferenceSettings, - ) -> Result, TemporalError> { - self.0 - .since(&other.0, settings.try_into()?) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - pub fn equals(&self, other: &Self) -> bool { - self.0 == other.0 - } - pub fn compare(one: &Self, two: &Self) -> core::cmp::Ordering { - let tuple1 = ( - one.hour(), - one.minute(), - one.second(), - one.millisecond(), - one.microsecond(), - one.nanosecond(), - ); - let tuple2 = ( - two.hour(), - two.minute(), - two.second(), - two.millisecond(), - two.microsecond(), - two.nanosecond(), - ); - - tuple1.cmp(&tuple2) - } - pub fn round(&self, options: RoundingOptions) -> Result, TemporalError> { - self.0 - .round(options.try_into()?) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - pub fn to_ixdtf_string( - &self, - options: ToStringRoundingOptions, - write: &mut DiplomatWrite, - ) -> Result<(), TemporalError> { - let writeable = self.0.to_ixdtf_writeable(options.into())?; - // This can only fail in cases where the DiplomatWriteable is capped, we - // don't care about that. - let _ = writeable.write_to(write); - - Ok(()) - } - - #[allow(clippy::should_implement_trait)] - pub fn clone(&self) -> Box { - Box::new(Self(self.0)) - } - } -} - -impl From for temporal_rs::partial::PartialTime { - fn from(other: ffi::PartialTime) -> Self { - Self { - hour: other.hour.into(), - minute: other.minute.into(), - second: other.second.into(), - millisecond: other.millisecond.into(), - microsecond: other.microsecond.into(), - nanosecond: other.nanosecond.into(), - } - } -} diff --git a/temporal_capi/src/plain_year_month.rs b/temporal_capi/src/plain_year_month.rs deleted file mode 100644 index 733c89f4b..000000000 --- a/temporal_capi/src/plain_year_month.rs +++ /dev/null @@ -1,237 +0,0 @@ -#[diplomat::bridge] -#[diplomat::abi_rename = "temporal_rs_{0}"] -pub mod ffi { - use crate::calendar::ffi::{AnyCalendarKind, Calendar}; - use crate::duration::ffi::Duration; - use crate::error::ffi::TemporalError; - use crate::provider::ffi::Provider; - use crate::time_zone::ffi::TimeZone; - use alloc::boxed::Box; - - use crate::options::ffi::{ArithmeticOverflow, DifferenceSettings, DisplayCalendar}; - use crate::plain_date::ffi::{PartialDate, PlainDate}; - use alloc::string::String; - use core::fmt::Write; - use diplomat_runtime::DiplomatWrite; - use diplomat_runtime::{DiplomatStr, DiplomatStr16}; - use writeable::Writeable; - - use core::str::FromStr; - - #[diplomat::opaque] - pub struct PlainYearMonth(pub(crate) temporal_rs::PlainYearMonth); - - impl PlainYearMonth { - pub fn try_new_with_overflow( - year: i32, - month: u8, - reference_day: Option, - calendar: AnyCalendarKind, - overflow: ArithmeticOverflow, - ) -> Result, TemporalError> { - temporal_rs::PlainYearMonth::new_with_overflow( - year, - month, - reference_day, - temporal_rs::Calendar::new(calendar.into()), - overflow.into(), - ) - .map(|x| Box::new(PlainYearMonth(x))) - .map_err(Into::into) - } - - pub fn from_partial( - partial: PartialDate, - overflow: Option, - ) -> Result, TemporalError> { - temporal_rs::PlainYearMonth::from_partial(partial.try_into()?, overflow.map(Into::into)) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - - pub fn from_parsed( - parsed: &crate::plain_date::ffi::ParsedDate, - ) -> Result, TemporalError> { - temporal_rs::PlainYearMonth::from_parsed(parsed.0) - .map(|x| Box::new(PlainYearMonth(x))) - .map_err(Into::into) - } - - pub fn with( - &self, - partial: PartialDate, - overflow: Option, - ) -> Result, TemporalError> { - let fields: temporal_rs::fields::YearMonthCalendarFields = partial.try_into()?; - self.0 - .with(fields, overflow.map(Into::into)) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - - pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { - temporal_rs::PlainYearMonth::from_utf8(s) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { - // TODO(#275) This should not need to convert - let s = String::from_utf16(s).map_err(|_| temporal_rs::TemporalError::range())?; - temporal_rs::PlainYearMonth::from_str(&s) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn year(&self) -> i32 { - self.0.year() - } - pub fn month(&self) -> u8 { - self.0.month() - } - pub fn month_code(&self, write: &mut DiplomatWrite) { - let code = self.0.month_code(); - // throw away the error, this should always succeed - let _ = write.write_str(code.as_str()); - } - - pub fn in_leap_year(&self) -> bool { - self.0.in_leap_year() - } - pub fn days_in_month(&self) -> u16 { - self.0.days_in_month() - } - pub fn days_in_year(&self) -> u16 { - self.0.days_in_year() - } - pub fn months_in_year(&self) -> u16 { - self.0.months_in_year() - } - // Writes an empty string for no era - pub fn era(&self, write: &mut DiplomatWrite) { - let era = self.0.era(); - if let Some(era) = era { - // throw away the error, this should always succeed - let _ = write.write_str(&era); - } - } - - pub fn era_year(&self) -> Option { - self.0.era_year() - } - - pub fn reference_day(&self) -> u8 { - self.0.reference_day() - } - - pub fn calendar<'a>(&'a self) -> &'a Calendar { - Calendar::transparent_convert(self.0.calendar()) - } - pub fn add( - &self, - duration: &Duration, - overflow: ArithmeticOverflow, - ) -> Result, TemporalError> { - self.0 - .add(&duration.0, overflow.into()) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - pub fn subtract( - &self, - duration: &Duration, - overflow: ArithmeticOverflow, - ) -> Result, TemporalError> { - self.0 - .subtract(&duration.0, overflow.into()) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - pub fn until( - &self, - other: &Self, - settings: DifferenceSettings, - ) -> Result, TemporalError> { - self.0 - .until(&other.0, settings.try_into()?) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - pub fn since( - &self, - other: &Self, - settings: DifferenceSettings, - ) -> Result, TemporalError> { - self.0 - .since(&other.0, settings.try_into()?) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - pub fn equals(&self, other: &Self) -> bool { - self.0 == other.0 - } - pub fn compare(one: &Self, two: &Self) -> core::cmp::Ordering { - one.0.compare_iso(&two.0) - } - pub fn to_plain_date( - &self, - day: Option, - ) -> Result, TemporalError> { - self.0 - .to_plain_date(day.map(|d| d.try_into()).transpose()?) - .map(|x| Box::new(PlainDate(x))) - .map_err(Into::into) - } - - pub fn epoch_ms_for_utc(&self) -> Result { - let ns = self.0.epoch_ns_for_utc(); - - let ns_i128 = ns.as_i128(); - let ms = ns_i128 / 1_000_000; - if let Ok(ms) = i64::try_from(ms) { - Ok(ms) - } else { - Err(TemporalError::assert("Found an out-of-range YearMonth")) - } - } - - #[cfg(feature = "compiled_data")] - pub fn epoch_ms_for(&self, time_zone: TimeZone) -> Result { - self.epoch_ms_for_with_provider(time_zone, &Provider::compiled()) - } - pub fn epoch_ms_for_with_provider<'p>( - &self, - time_zone: TimeZone, - p: &Provider<'p>, - ) -> Result { - let ns = with_provider!(p, |p| self - .0 - .epoch_ns_for_with_provider(time_zone.into(), p)) - .map_err(TemporalError::from)?; - - let ns_i128 = ns.as_i128(); - let ms = ns_i128 / 1_000_000; - if let Ok(ms) = i64::try_from(ms) { - Ok(ms) - } else { - Err(TemporalError::assert("Found an out-of-range YearMonth")) - } - } - - pub fn to_ixdtf_string( - &self, - display_calendar: DisplayCalendar, - write: &mut DiplomatWrite, - ) { - let writeable = self.0.to_ixdtf_writeable(display_calendar.into()); - // This can only fail in cases where the DiplomatWriteable is capped, we - // don't care about that. - let _ = writeable.write_to(write); - } - - #[allow(clippy::should_implement_trait)] - pub fn clone(&self) -> Box { - Box::new(Self(self.0.clone())) - } - } -} diff --git a/temporal_capi/src/zoned_date_time.rs b/temporal_capi/src/zoned_date_time.rs deleted file mode 100644 index 6d39b3ee1..000000000 --- a/temporal_capi/src/zoned_date_time.rs +++ /dev/null @@ -1,806 +0,0 @@ -use crate::error::ffi::TemporalError; -use crate::instant::ffi::I128Nanoseconds; -use crate::provider::ffi::Provider; -use temporal_rs::options::RelativeTo; - -#[diplomat::bridge] -#[diplomat::abi_rename = "temporal_rs_{0}"] -pub mod ffi { - use crate::calendar::ffi::AnyCalendarKind; - use crate::calendar::ffi::Calendar; - use crate::duration::ffi::Duration; - use crate::error::ffi::TemporalError; - use crate::plain_date::ffi::{PartialDate, PlainDate}; - use crate::plain_date_time::ffi::PlainDateTime; - use crate::plain_time::ffi::{PartialTime, PlainTime}; - use alloc::boxed::Box; - - use crate::provider::ffi::Provider; - - use crate::instant::ffi::I128Nanoseconds; - use crate::instant::ffi::Instant; - use crate::options::ffi::{ - ArithmeticOverflow, DifferenceSettings, Disambiguation, DisplayCalendar, DisplayOffset, - DisplayTimeZone, OffsetDisambiguation, RoundingOptions, ToStringRoundingOptions, - TransitionDirection, - }; - - use crate::time_zone::ffi::TimeZone; - - use alloc::string::String; - use core::fmt::Write; - - use diplomat_runtime::DiplomatOption; - use diplomat_runtime::DiplomatStrSlice; - use diplomat_runtime::DiplomatWrite; - - pub struct PartialZonedDateTime<'a> { - pub date: PartialDate<'a>, - pub time: PartialTime, - pub offset: DiplomatOption>, - pub timezone: DiplomatOption, - } - - pub struct RelativeTo<'a> { - pub date: Option<&'a PlainDate>, - pub zoned: Option<&'a ZonedDateTime>, - } - - /// GetTemporalRelativeToOption can create fresh PlainDate/ZonedDateTimes by parsing them, - /// we need a way to produce that result. - #[diplomat::out] - pub struct OwnedRelativeTo { - pub date: Option>, - pub zoned: Option>, - } - - impl OwnedRelativeTo { - #[cfg(feature = "compiled_data")] - pub fn from_utf8(s: &DiplomatStr) -> Result { - Self::from_utf8_with_provider(s, &Provider::compiled()) - } - pub fn from_utf8_with_provider<'p>( - s: &DiplomatStr, - p: &Provider<'p>, - ) -> Result { - // TODO(#275) This should not need to check - let s = core::str::from_utf8(s).map_err(|_| temporal_rs::TemporalError::range())?; - - with_provider!(p, |p| super::RelativeTo::try_from_str_with_provider(s, p)) - .map(Into::into) - .map_err(Into::::into) - } - - #[cfg(feature = "compiled_data")] - pub fn from_utf16(s: &DiplomatStr16) -> Result { - Self::from_utf16_with_provider(s, &Provider::compiled()) - } - pub fn from_utf16_with_provider<'p>( - s: &DiplomatStr16, - p: &Provider<'p>, - ) -> Result { - // TODO(#275) This should not need to convert - let s = String::from_utf16(s).map_err(|_| temporal_rs::TemporalError::range())?; - with_provider!(p, |p| super::RelativeTo::try_from_str_with_provider(&s, p)) - .map(Into::into) - .map_err(Into::::into) - } - - pub fn empty() -> Self { - Self { - date: None, - zoned: None, - } - } - } - - #[diplomat::opaque] - pub struct ParsedZonedDateTime(temporal_rs::parsed_intermediates::ParsedZonedDateTime); - - impl ParsedZonedDateTime { - #[cfg(feature = "compiled_data")] - pub fn from_utf8(s: &DiplomatStr) -> Result, TemporalError> { - Self::from_utf8_with_provider(s, &Provider::compiled()) - } - pub fn from_utf8_with_provider<'p>( - s: &DiplomatStr, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| { - temporal_rs::parsed_intermediates::ParsedZonedDateTime::from_utf8_with_provider( - s, p, - ) - }) - .map(|x| Box::new(ParsedZonedDateTime(x))) - .map_err(Into::::into) - } - - #[cfg(feature = "compiled_data")] - pub fn from_utf16(s: &DiplomatStr16) -> Result, TemporalError> { - Self::from_utf16_with_provider(s, &Provider::compiled()) - } - pub fn from_utf16_with_provider<'p>( - s: &DiplomatStr16, - p: &Provider<'p>, - ) -> Result, TemporalError> { - // TODO(#275) This should not need to convert - let s = String::from_utf16(s).map_err(|_| temporal_rs::TemporalError::range())?; - - with_provider!(p, |p| { - temporal_rs::parsed_intermediates::ParsedZonedDateTime::from_utf8_with_provider( - s.as_bytes(), - p, - ) - }) - .map(|x| Box::new(ParsedZonedDateTime(x))) - .map_err(Into::::into) - } - } - - #[diplomat::opaque] - pub struct ZonedDateTime(pub(crate) temporal_rs::ZonedDateTime); - - impl ZonedDateTime { - #[cfg(feature = "compiled_data")] - pub fn try_new( - nanosecond: I128Nanoseconds, - calendar: AnyCalendarKind, - time_zone: TimeZone, - ) -> Result, TemporalError> { - Self::try_new_with_provider(nanosecond, calendar, time_zone, &Provider::compiled()) - } - pub fn try_new_with_provider<'p>( - nanosecond: I128Nanoseconds, - calendar: AnyCalendarKind, - time_zone: TimeZone, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| temporal_rs::ZonedDateTime::try_new_with_provider( - nanosecond.into(), - time_zone.into(), - temporal_rs::Calendar::new(calendar.into()), - p - )) - .map(|x| Box::new(ZonedDateTime(x))) - .map_err(Into::into) - } - #[cfg(feature = "compiled_data")] - pub fn from_partial( - partial: PartialZonedDateTime, - overflow: Option, - disambiguation: Option, - offset_option: Option, - ) -> Result, TemporalError> { - Self::from_partial_with_provider( - partial, - overflow, - disambiguation, - offset_option, - &Provider::compiled(), - ) - } - pub fn from_partial_with_provider<'p>( - partial: PartialZonedDateTime, - overflow: Option, - disambiguation: Option, - offset_option: Option, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| { - temporal_rs::ZonedDateTime::from_partial_with_provider( - partial.try_into()?, - overflow.map(Into::into), - disambiguation.map(Into::into), - offset_option.map(Into::into), - p, - ) - }) - .map(|x| Box::new(ZonedDateTime(x))) - .map_err(Into::into) - } - #[cfg(feature = "compiled_data")] - pub fn from_parsed( - parsed: &ParsedZonedDateTime, - disambiguation: Disambiguation, - offset_option: OffsetDisambiguation, - ) -> Result, TemporalError> { - Self::from_parsed_with_provider( - parsed, - disambiguation, - offset_option, - &Provider::compiled(), - ) - } - pub fn from_parsed_with_provider<'p>( - parsed: &ParsedZonedDateTime, - disambiguation: Disambiguation, - offset_option: OffsetDisambiguation, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!( - p, - |p| temporal_rs::ZonedDateTime::from_parsed_with_provider( - parsed.0.clone(), - disambiguation.into(), - offset_option.into(), - p - ) - ) - .map(|x| Box::new(ZonedDateTime(x))) - .map_err(Into::into) - } - #[cfg(feature = "compiled_data")] - pub fn from_utf8( - s: &DiplomatStr, - disambiguation: Disambiguation, - offset_disambiguation: OffsetDisambiguation, - ) -> Result, TemporalError> { - Self::from_utf8_with_provider( - s, - disambiguation, - offset_disambiguation, - &Provider::compiled(), - ) - } - pub fn from_utf8_with_provider<'p>( - s: &DiplomatStr, - disambiguation: Disambiguation, - offset_disambiguation: OffsetDisambiguation, - p: &Provider<'p>, - ) -> Result, TemporalError> { - // TODO(#275) This should not need to check - with_provider!(p, |p| temporal_rs::ZonedDateTime::from_utf8_with_provider( - s, - disambiguation.into(), - offset_disambiguation.into(), - p - )) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - #[cfg(feature = "compiled_data")] - pub fn from_utf16( - s: &DiplomatStr16, - disambiguation: Disambiguation, - offset_disambiguation: OffsetDisambiguation, - ) -> Result, TemporalError> { - Self::from_utf16_with_provider( - s, - disambiguation, - offset_disambiguation, - &Provider::compiled(), - ) - } - pub fn from_utf16_with_provider<'p>( - s: &DiplomatStr16, - disambiguation: Disambiguation, - offset_disambiguation: OffsetDisambiguation, - p: &Provider<'p>, - ) -> Result, TemporalError> { - // TODO(#275) This should not need to convert - let s = String::from_utf16(s).map_err(|_| temporal_rs::TemporalError::range())?; - with_provider!(p, |p| temporal_rs::ZonedDateTime::from_utf8_with_provider( - s.as_bytes(), - disambiguation.into(), - offset_disambiguation.into(), - p - )) - .map(|c| Box::new(Self(c))) - .map_err(Into::into) - } - - pub fn epoch_milliseconds(&self) -> i64 { - self.0.epoch_milliseconds() - } - - #[cfg(feature = "compiled_data")] - pub fn from_epoch_milliseconds(ms: i64, tz: TimeZone) -> Result, TemporalError> { - Self::from_epoch_milliseconds_with_provider(ms, tz, &Provider::compiled()) - } - pub fn from_epoch_milliseconds_with_provider<'p>( - ms: i64, - tz: TimeZone, - p: &Provider<'p>, - ) -> Result, TemporalError> { - super::zdt_from_epoch_ms_with_provider(ms, tz.into(), p).map(|c| Box::new(Self(c))) - } - - #[cfg(feature = "compiled_data")] - pub fn from_epoch_nanoseconds( - ns: I128Nanoseconds, - tz: TimeZone, - ) -> Result, TemporalError> { - Self::from_epoch_nanoseconds_with_provider(ns, tz, &Provider::compiled()) - } - pub fn from_epoch_nanoseconds_with_provider<'p>( - ns: I128Nanoseconds, - tz: TimeZone, - p: &Provider<'p>, - ) -> Result, TemporalError> { - let zdt = crate::zoned_date_time::zdt_from_epoch_ns_with_provider(ns, tz.into(), p)?; - Ok(Box::new(Self(zdt))) - } - - pub fn epoch_nanoseconds(&self) -> I128Nanoseconds { - self.0.epoch_nanoseconds().as_i128().into() - } - - pub fn offset_nanoseconds(&self) -> i64 { - self.0.offset_nanoseconds() - } - - pub fn to_instant(&self) -> Box { - Box::new(Instant(self.0.to_instant())) - } - - #[cfg(feature = "compiled_data")] - pub fn with( - &self, - partial: PartialZonedDateTime, - disambiguation: Option, - offset_option: Option, - overflow: Option, - ) -> Result, TemporalError> { - self.with_with_provider( - partial, - disambiguation, - offset_option, - overflow, - &Provider::compiled(), - ) - } - pub fn with_with_provider<'p>( - &self, - partial: PartialZonedDateTime, - disambiguation: Option, - offset_option: Option, - overflow: Option, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| self.0.with_with_provider( - partial.try_into()?, - disambiguation.map(Into::into), - offset_option.map(Into::into), - overflow.map(Into::into), - p - )) - .map(|x| Box::new(ZonedDateTime(x))) - .map_err(Into::into) - } - - #[cfg(feature = "compiled_data")] - pub fn with_timezone(&self, zone: TimeZone) -> Result, TemporalError> { - self.with_timezone_with_provider(zone, &Provider::compiled()) - } - pub fn with_timezone_with_provider<'p>( - &self, - zone: TimeZone, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| self.0.with_time_zone_with_provider(zone.into(), p)) - .map(|x| Box::new(ZonedDateTime(x))) - .map_err(Into::into) - } - - pub fn timezone(&self) -> TimeZone { - TimeZone::from(*self.0.time_zone()) - } - - pub fn compare_instant(&self, other: &Self) -> core::cmp::Ordering { - self.0.compare_instant(&other.0) - } - - #[cfg(feature = "compiled_data")] - pub fn equals(&self, other: &Self) -> bool { - self.equals_with_provider(other, &Provider::compiled()) - .unwrap_or(false) - } - pub fn equals_with_provider<'p>( - &self, - other: &Self, - p: &Provider<'p>, - ) -> Result { - with_provider!(p, |p| self.0.equals_with_provider(&other.0, p)).map_err(Into::into) - } - - pub fn offset(&self, write: &mut DiplomatWrite) -> Result<(), TemporalError> { - let string = self.0.offset(); - // throw away the error, this should always succeed - let _ = write.write_str(&string); - Ok(()) - } - - #[cfg(feature = "compiled_data")] - pub fn start_of_day(&self) -> Result, TemporalError> { - self.start_of_day_with_provider(&Provider::compiled()) - } - pub fn start_of_day_with_provider<'p>( - &self, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| self.0.start_of_day_with_provider(p)) - .map(|x| Box::new(ZonedDateTime(x))) - .map_err(Into::into) - } - - #[cfg(feature = "compiled_data")] - pub fn get_time_zone_transition( - &self, - direction: TransitionDirection, - ) -> Result>, TemporalError> { - self.get_time_zone_transition_with_provider(direction, &Provider::compiled()) - } - pub fn get_time_zone_transition_with_provider<'p>( - &self, - direction: TransitionDirection, - p: &Provider<'p>, - ) -> Result>, TemporalError> { - with_provider!(p, |p| self - .0 - .get_time_zone_transition_with_provider(direction.into(), p)) - .map(|x| x.map(|y| Box::new(ZonedDateTime(y)))) - .map_err(Into::into) - } - - #[cfg(feature = "compiled_data")] - pub fn hours_in_day(&self) -> Result { - self.hours_in_day_with_provider(&Provider::compiled()) - } - pub fn hours_in_day_with_provider<'p>( - &self, - p: &Provider<'p>, - ) -> Result { - with_provider!(p, |p| self.0.hours_in_day_with_provider(p)).map_err(Into::into) - } - - pub fn to_plain_datetime(&self) -> Box { - Box::new(PlainDateTime(self.0.to_plain_date_time())) - } - - pub fn to_plain_date(&self) -> Box { - Box::new(PlainDate(self.0.to_plain_date())) - } - - pub fn to_plain_time(&self) -> Box { - Box::new(PlainTime(self.0.to_plain_time())) - } - - #[cfg(feature = "compiled_data")] - pub fn to_ixdtf_string( - &self, - display_offset: DisplayOffset, - display_timezone: DisplayTimeZone, - display_calendar: DisplayCalendar, - options: ToStringRoundingOptions, - write: &mut DiplomatWrite, - ) -> Result<(), TemporalError> { - self.to_ixdtf_string_with_provider( - display_offset, - display_timezone, - display_calendar, - options, - &Provider::compiled(), - write, - ) - } - pub fn to_ixdtf_string_with_provider<'p>( - &self, - display_offset: DisplayOffset, - display_timezone: DisplayTimeZone, - display_calendar: DisplayCalendar, - options: ToStringRoundingOptions, - p: &Provider<'p>, - write: &mut DiplomatWrite, - ) -> Result<(), TemporalError> { - // TODO this double-allocates, an API returning a Writeable or impl Write would be better - let string = with_provider!(p, |p| self.0.to_ixdtf_string_with_provider( - display_offset.into(), - display_timezone.into(), - display_calendar.into(), - options.into(), - p - )?); - // throw away the error, this should always succeed - let _ = write.write_str(&string); - Ok(()) - } - - // Same as PlainDateTime (non-getters) - pub fn with_calendar(&self, calendar: AnyCalendarKind) -> Box { - Box::new(ZonedDateTime( - self.0 - .with_calendar(temporal_rs::Calendar::new(calendar.into())), - )) - } - #[cfg(feature = "compiled_data")] - pub fn with_plain_time( - &self, - time: Option<&PlainTime>, - ) -> Result, TemporalError> { - self.with_plain_time_and_provider(time, &Provider::compiled()) - } - pub fn with_plain_time_and_provider<'p>( - &self, - time: Option<&PlainTime>, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| self - .0 - .with_plain_time_and_provider(time.map(|t| t.0), p)) - .map(|x| Box::new(ZonedDateTime(x))) - .map_err(Into::into) - } - #[cfg(feature = "compiled_data")] - pub fn add( - &self, - duration: &Duration, - overflow: Option, - ) -> Result, TemporalError> { - self.add_with_provider(duration, overflow, &Provider::compiled()) - } - pub fn add_with_provider<'p>( - &self, - duration: &Duration, - overflow: Option, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| self.0.add_with_provider( - &duration.0, - overflow.map(Into::into), - p - )) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - #[cfg(feature = "compiled_data")] - pub fn subtract( - &self, - duration: &Duration, - overflow: Option, - ) -> Result, TemporalError> { - self.subtract_with_provider(duration, overflow, &Provider::compiled()) - } - pub fn subtract_with_provider<'p>( - &self, - duration: &Duration, - overflow: Option, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| self.0.subtract_with_provider( - &duration.0, - overflow.map(Into::into), - p - )) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - #[cfg(feature = "compiled_data")] - pub fn until( - &self, - other: &Self, - settings: DifferenceSettings, - ) -> Result, TemporalError> { - self.until_with_provider(other, settings, &Provider::compiled()) - } - pub fn until_with_provider<'p>( - &self, - other: &Self, - settings: DifferenceSettings, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| self.0.until_with_provider( - &other.0, - settings.try_into()?, - p - )) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - #[cfg(feature = "compiled_data")] - pub fn since( - &self, - other: &Self, - settings: DifferenceSettings, - ) -> Result, TemporalError> { - self.since_with_provider(other, settings, &Provider::compiled()) - } - pub fn since_with_provider<'p>( - &self, - other: &Self, - settings: DifferenceSettings, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| self.0.since_with_provider( - &other.0, - settings.try_into()?, - p - )) - .map(|x| Box::new(Duration(x))) - .map_err(Into::into) - } - #[cfg(feature = "compiled_data")] - pub fn round(&self, options: RoundingOptions) -> Result, TemporalError> { - self.round_with_provider(options, &Provider::compiled()) - } - pub fn round_with_provider<'p>( - &self, - options: RoundingOptions, - p: &Provider<'p>, - ) -> Result, TemporalError> { - with_provider!(p, |p| self.0.round_with_provider(options.try_into()?, p)) - .map(|x| Box::new(Self(x))) - .map_err(Into::into) - } - - // Same as PlainDateTime (getters) - pub fn hour(&self) -> u8 { - // unwrap_or_default because of - // https://github.com/boa-dev/temporal/issues/548 - self.0.hour() - } - pub fn minute(&self) -> u8 { - self.0.minute() - } - pub fn second(&self) -> u8 { - self.0.second() - } - pub fn millisecond(&self) -> u16 { - self.0.millisecond() - } - pub fn microsecond(&self) -> u16 { - self.0.microsecond() - } - pub fn nanosecond(&self) -> u16 { - self.0.nanosecond() - } - - pub fn calendar<'a>(&'a self) -> &'a Calendar { - Calendar::transparent_convert(self.0.calendar()) - } - pub fn year(&self) -> i32 { - self.0.year() - } - pub fn month(&self) -> u8 { - self.0.month() - } - pub fn month_code(&self, write: &mut DiplomatWrite) { - // https://github.com/boa-dev/temporal/issues/328 for the fallibility - let code = self.0.month_code(); - // throw away the error, this should always succeed - let _ = write.write_str(code.as_str()); - } - pub fn day(&self) -> u8 { - self.0.day() - } - - pub fn day_of_week(&self) -> u16 { - self.0.day_of_week() - } - - pub fn day_of_year(&self) -> u16 { - self.0.day_of_year() - } - - pub fn week_of_year(&self) -> Option { - self.0.week_of_year() - } - - pub fn year_of_week(&self) -> Option { - self.0.year_of_week() - } - - pub fn days_in_week(&self) -> u16 { - self.0.days_in_week() - } - pub fn days_in_month(&self) -> u16 { - self.0.days_in_month() - } - - pub fn days_in_year(&self) -> u16 { - self.0.days_in_year() - } - - pub fn months_in_year(&self) -> u16 { - self.0.months_in_year() - } - - pub fn in_leap_year(&self) -> bool { - self.0.in_leap_year() - } - // Writes an empty string for no era - pub fn era(&self, write: &mut DiplomatWrite) { - let era = self.0.era(); - if let Some(era) = era { - // throw away the error, this should always succeed - let _ = write.write_str(&era); - } - } - - pub fn era_year(&self) -> Option { - self.0.era_year() - } - - #[allow(clippy::should_implement_trait)] - pub fn clone(&self) -> Box { - Box::new(Self(self.0.clone())) - } - } -} - -pub(crate) fn zdt_from_epoch_ms_with_provider<'p>( - ms: i64, - time_zone: temporal_rs::TimeZone, - p: &Provider<'p>, -) -> Result { - let instant = temporal_rs::Instant::from_epoch_milliseconds(ms)?; - with_provider!(p, |p| instant - .to_zoned_date_time_iso_with_provider(time_zone, p)) - .map_err(Into::into) -} - -pub(crate) fn zdt_from_epoch_ns_with_provider<'p>( - ns: I128Nanoseconds, - time_zone: temporal_rs::TimeZone, - p: &Provider<'p>, -) -> Result { - let instant = temporal_rs::Instant::try_new(ns.into())?; - with_provider!(p, |p| instant - .to_zoned_date_time_iso_with_provider(time_zone, p)) - .map_err(Into::into) -} - -impl TryFrom> for temporal_rs::partial::PartialZonedDateTime { - type Error = TemporalError; - fn try_from(other: ffi::PartialZonedDateTime<'_>) -> Result { - let timezone = other.timezone.clone().into_option().map(|x| x.tz()); - let calendar = temporal_rs::Calendar::new(other.date.calendar.into()); - Ok(Self { - fields: other.try_into()?, - timezone, - calendar, - }) - } -} - -impl TryFrom> for temporal_rs::fields::ZonedDateTimeFields { - type Error = TemporalError; - fn try_from(other: ffi::PartialZonedDateTime<'_>) -> Result { - let offset = match other.offset.into_option() { - Some(o) => Some(temporal_rs::UtcOffset::from_utf8(o.into())?), - None => None, - }; - Ok(Self { - calendar_fields: other.date.try_into()?, - time: other.time.into(), - offset, - }) - } -} - -impl From> for Option { - fn from(other: ffi::RelativeTo) -> Self { - if let Some(pd) = other.date { - Some(temporal_rs::options::RelativeTo::PlainDate(pd.0.clone())) - } else { - other - .zoned - .map(|z| temporal_rs::options::RelativeTo::ZonedDateTime(z.0.clone())) - } - } -} - -impl From for ffi::OwnedRelativeTo { - fn from(other: RelativeTo) -> Self { - use alloc::boxed::Box; - match other { - RelativeTo::PlainDate(d) => Self { - date: Some(Box::new(crate::plain_date::ffi::PlainDate(d))), - zoned: None, - }, - RelativeTo::ZonedDateTime(d) => Self { - zoned: Some(Box::new(ffi::ZonedDateTime(d))), - date: None, - }, - } - } -} diff --git a/temporal_capi/tests/c/Makefile b/temporal_capi/tests/c/Makefile deleted file mode 100644 index 91a6fbef0..000000000 --- a/temporal_capi/tests/c/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -.DEFAULT_GOAL := test -.PHONY: build test -FORCE: - -HEADERS := ../../bindings/c/ -ALL_HEADERS := $(wildcard ${HEADERS}/**/*.h) - -C?=gcc - -TEST_FILES := $(wildcard *.c) -OUT_FILES = $(patsubst %.c,%.out,$(TEST_FILES)) - -$(ALL_HEADERS): - -../../../target/debug/libtemporal_capi.a: FORCE - cargo rustc -p temporal_capi --crate-type staticlib - -%.out: %.c ../../../target/debug/libtemporal_capi.a $(ALL_HEADERS) - $(C) -L ../../../target/debug/ -I ${HEADERS} $< -ltemporal_capi -lm -o $@ - ./$@ - -test: $(OUT_FILES) - -clean: - rm $(OUT_FILES) diff --git a/temporal_capi/tests/cpp/Makefile b/temporal_capi/tests/cpp/Makefile deleted file mode 100644 index 2e17a4845..000000000 --- a/temporal_capi/tests/cpp/Makefile +++ /dev/null @@ -1,25 +0,0 @@ -.DEFAULT_GOAL := test -.PHONY: build test -FORCE: - -HEADERS := ../../bindings/cpp/ -ALL_HEADERS := $(wildcard ${HEADERS}/**/*.hpp) - -CXX?=g++ - -TEST_FILES := $(wildcard *.cpp) -OUT_FILES = $(patsubst %.cpp,%.out,$(TEST_FILES)) - -$(ALL_HEADERS): - -../../../target/debug/libtemporal_capi.a: FORCE - cargo rustc -p temporal_capi --crate-type staticlib - -%.out: %.cpp ../../../target/debug/libtemporal_capi.a $(ALL_HEADERS) - $(CXX) -std=c++17 -L ../../../target/debug/ -I ${HEADERS} $< -ltemporal_capi -lm -o $@ - ./$@ - -test: $(OUT_FILES) - -clean: - rm $(OUT_FILES) diff --git a/tools/bakeddata/src/main.rs b/tools/bakeddata/src/main.rs index 4219aaee9..2a967339b 100644 --- a/tools/bakeddata/src/main.rs +++ b/tools/bakeddata/src/main.rs @@ -37,7 +37,10 @@ impl BakedDataProvider for ZoneInfoProvider<'_> { let file = syn::parse_file(&baked_macro.to_string()).unwrap(); let formatted = prettyplease::unparse(&file); let mut file = BufWriter::new(File::create(generated_file)?); - write!(file, "//@generated\n// (by `bakeddata` binary in temporal_rs, using `databake`)\n\n{formatted}") + write!( + file, + "//@generated\n// (by the `bakeddata` tool, using `databake`)\n\n{formatted}" + ) } fn write_debug(&self, debug_path: &Path) -> io::Result<()> { @@ -118,7 +121,10 @@ impl BakedDataProvider for IanaIdentifierNormalizer<'_> { let file = syn::parse_file(&baked_macro.to_string()).unwrap(); let formatted = prettyplease::unparse(&file); let mut file = BufWriter::new(File::create(generated_file)?); - write!(file, "//@generated\n// (by `bakeddata` binary in temporal_rs, using `databake`)\n\n{formatted}") + write!( + file, + "//@generated\n// (by the `bakeddata` tool, using `databake`)\n\n{formatted}" + ) } fn write_debug(&self, debug_path: &Path) -> io::Result<()> { @@ -168,7 +174,7 @@ fn main() -> io::Result<()> { .unwrap() .parent() .unwrap() - .join("provider/src"); + .join("crates/provider/src"); println!("Using provider directory: {provider:?}"); // Write identifiers diff --git a/tools/depcheck/src/main.rs b/tools/depcheck/src/main.rs index c6da9b025..77a419b7c 100644 --- a/tools/depcheck/src/main.rs +++ b/tools/depcheck/src/main.rs @@ -153,8 +153,8 @@ fn main() { /// Dependencies that are always allowed as runtime dependencies pub const BASIC_RUNTIME_DEPS: &[&str] = &[ - // temporal_rs crates - "temporal_rs", + // temporal crates + "temporal", "timezone_provider", // ICU4X components and utils "calendrical_calculations", diff --git a/tools/diplomat-gen/src/main.rs b/tools/diplomat-gen/src/main.rs index 5f879b013..da0e7752f 100644 --- a/tools/diplomat-gen/src/main.rs +++ b/tools/diplomat-gen/src/main.rs @@ -12,6 +12,7 @@ fn main() -> std::io::Result<()> { .unwrap() .parent() .unwrap() + .join("crates") .join("temporal_capi"); let mut library_config = Config::default(); diff --git a/tools/tzif-inspect/Cargo.toml b/tools/tzif-inspect/Cargo.toml index 80131cc50..673202dae 100644 --- a/tools/tzif-inspect/Cargo.toml +++ b/tools/tzif-inspect/Cargo.toml @@ -13,5 +13,5 @@ publish = false [dependencies] jiff-tzdb.workspace = true tzif.workspace = true -temporal_rs = {workspace = true, features = ["tzdb", "compiled_data"]} +temporal = {workspace = true, features = ["tzdb", "compiled_data"]} timezone_provider = {workspace = true, features = ["tzif"]} diff --git a/tools/tzif-inspect/src/main.rs b/tools/tzif-inspect/src/main.rs index c05854a3e..28a4eed9b 100644 --- a/tools/tzif-inspect/src/main.rs +++ b/tools/tzif-inspect/src/main.rs @@ -1,7 +1,7 @@ use std::env; use std::string::ToString; -use temporal_rs::partial::PartialDuration; -use temporal_rs::{Duration, PlainDate, PlainTime, TimeZone, ZonedDateTime}; +use temporal::partial::PartialDuration; +use temporal::{Duration, PlainDate, PlainTime, TimeZone, ZonedDateTime}; use timezone_provider::tzif::Tzif; use tzif::data::posix::TransitionDay; use tzif::data::time::Seconds;