// tz_impl.mbt — Tz 的 TimeZone 实现(timespans 自动生成,勿手改)
// 移植自仓颉 src/base/tz/tz_impl.cj + moon-chrono_tz/tz/tz_impl.mbt。
///|
/// 返回本时区的预计算过渡表(Tz variant → FixedTimespanSet 映射)。
/// 拆分为 6 个子函数以避免 WASM local count 限制(597 match arm 单函数超限)。
pub fn Tz::timespans(self : Tz) -> @core.FixedTimespanSet {
if self < Tz::America__Cordoba {
timespans_1(self)
} else if self < Tz::America__Santa_Isabel {
timespans_2(self)
} else if self < Tz::Asia__Novokuznetsk {
timespans_3(self)
} else if self < Tz::Etc__GMTPlus11 {
timespans_4(self)
} else if self < Tz::GMT0 {
timespans_5(self)
} else {
timespans_6(self)
}
}
///|
fn timespans_1(tz : Tz) -> @core.FixedTimespanSet {
match tz {
Tz::Africa__Abidjan => @data.africa__abidjan
Tz::Africa__Accra => @data.africa__abidjan
Tz::Africa__Addis_Ababa => @data.africa__nairobi
Tz::Africa__Algiers => @data.africa__algiers
Tz::Africa__Asmara => @data.africa__nairobi
Tz::Africa__Asmera => @data.africa__nairobi
Tz::Africa__Bamako => @data.africa__abidjan
Tz::Africa__Bangui => @data.africa__lagos
Tz::Africa__Banjul => @data.africa__abidjan
Tz::Africa__Bissau => @data.africa__bissau
Tz::Africa__Blantyre => @data.africa__maputo
Tz::Africa__Brazzaville => @data.africa__lagos
Tz::Africa__Bujumbura => @data.africa__maputo
Tz::Africa__Cairo => @data.africa__cairo
Tz::Africa__Casablanca => @data.africa__casablanca
Tz::Africa__Ceuta => @data.africa__ceuta
Tz::Africa__Conakry => @data.africa__abidjan
Tz::Africa__Dakar => @data.africa__abidjan
Tz::Africa__Dar_es_Salaam => @data.africa__nairobi
Tz::Africa__Djibouti => @data.africa__nairobi
Tz::Africa__Douala => @data.africa__lagos
Tz::Africa__El_Aaiun => @data.africa__el_aaiun
Tz::Africa__Freetown => @data.africa__abidjan
Tz::Africa__Gaborone => @data.africa__maputo
Tz::Africa__Harare => @data.africa__maputo
Tz::Africa__Johannesburg => @data.africa__johannesburg
Tz::Africa__Juba => @data.africa__juba
Tz::Africa__Kampala => @data.africa__nairobi
Tz::Africa__Khartoum => @data.africa__khartoum
Tz::Africa__Kigali => @data.africa__maputo
Tz::Africa__Kinshasa => @data.africa__lagos
Tz::Africa__Lagos => @data.africa__lagos
Tz::Africa__Libreville => @data.africa__lagos
Tz::Africa__Lome => @data.africa__abidjan
Tz::Africa__Luanda => @data.africa__lagos
Tz::Africa__Lubumbashi => @data.africa__maputo
Tz::Africa__Lusaka => @data.africa__maputo
Tz::Africa__Malabo => @data.africa__lagos
Tz::Africa__Maputo => @data.africa__maputo
Tz::Africa__Maseru => @data.africa__johannesburg
Tz::Africa__Mbabane => @data.africa__johannesburg
Tz::Africa__Mogadishu => @data.africa__nairobi
Tz::Africa__Monrovia => @data.africa__monrovia
Tz::Africa__Nairobi => @data.africa__nairobi
Tz::Africa__Ndjamena => @data.africa__ndjamena
Tz::Africa__Niamey => @data.africa__lagos
Tz::Africa__Nouakchott => @data.africa__abidjan
Tz::Africa__Ouagadougou => @data.africa__abidjan
Tz::Africa__PortoNovo => @data.africa__lagos
Tz::Africa__Sao_Tome => @data.africa__sao_tome
Tz::Africa__Timbuktu => @data.africa__abidjan
Tz::Africa__Tripoli => @data.africa__tripoli
Tz::Africa__Tunis => @data.africa__tunis
Tz::Africa__Windhoek => @data.africa__windhoek
Tz::America__Adak => @data.america__adak
Tz::America__Anchorage => @data.america__anchorage
Tz::America__Anguilla => @data.america__puerto_rico
Tz::America__Antigua => @data.america__puerto_rico
Tz::America__Araguaina => @data.america__araguaina
Tz::America__Argentina__Buenos_Aires =>
@data.america__argentina__buenos_aires
Tz::America__Argentina__Catamarca => @data.america__argentina__catamarca
Tz::America__Argentina__ComodRivadavia =>
@data.america__argentina__catamarca
Tz::America__Argentina__Cordoba => @data.america__argentina__cordoba
Tz::America__Argentina__Jujuy => @data.america__argentina__jujuy
Tz::America__Argentina__La_Rioja => @data.america__argentina__la_rioja
Tz::America__Argentina__Mendoza => @data.america__argentina__mendoza
Tz::America__Argentina__Rio_Gallegos =>
@data.america__argentina__rio_gallegos
Tz::America__Argentina__Salta => @data.america__argentina__salta
Tz::America__Argentina__San_Juan => @data.america__argentina__san_juan
Tz::America__Argentina__San_Luis => @data.america__argentina__san_luis
Tz::America__Argentina__Tucuman => @data.america__argentina__tucuman
Tz::America__Argentina__Ushuaia => @data.america__argentina__ushuaia
Tz::America__Aruba => @data.america__puerto_rico
Tz::America__Asuncion => @data.america__asuncion
Tz::America__Atikokan => @data.america__panama
Tz::America__Atka => @data.america__adak
Tz::America__Bahia => @data.america__bahia
Tz::America__Bahia_Banderas => @data.america__bahia_banderas
Tz::America__Barbados => @data.america__barbados
Tz::America__Belem => @data.america__belem
Tz::America__Belize => @data.america__belize
Tz::America__BlancSablon => @data.america__puerto_rico
Tz::America__Boa_Vista => @data.america__boa_vista
Tz::America__Bogota => @data.america__bogota
Tz::America__Boise => @data.america__boise
Tz::America__Buenos_Aires => @data.america__argentina__buenos_aires
Tz::America__Cambridge_Bay => @data.america__cambridge_bay
Tz::America__Campo_Grande => @data.america__campo_grande
Tz::America__Cancun => @data.america__cancun
Tz::America__Caracas => @data.america__caracas
Tz::America__Catamarca => @data.america__argentina__catamarca
Tz::America__Cayenne => @data.america__cayenne
Tz::America__Cayman => @data.america__panama
Tz::America__Chicago => @data.america__chicago
Tz::America__Chihuahua => @data.america__chihuahua
Tz::America__Ciudad_Juarez => @data.america__ciudad_juarez
Tz::America__Coral_Harbour => @data.america__panama
_ => abort("unreachable in timespans_1")
}
}
///|
fn timespans_2(tz : Tz) -> @core.FixedTimespanSet {
match tz {
Tz::America__Cordoba => @data.america__argentina__cordoba
Tz::America__Costa_Rica => @data.america__costa_rica
Tz::America__Coyhaique => @data.america__coyhaique
Tz::America__Creston => @data.america__phoenix
Tz::America__Cuiaba => @data.america__cuiaba
Tz::America__Curacao => @data.america__puerto_rico
Tz::America__Danmarkshavn => @data.america__danmarkshavn
Tz::America__Dawson => @data.america__dawson
Tz::America__Dawson_Creek => @data.america__dawson_creek
Tz::America__Denver => @data.america__denver
Tz::America__Detroit => @data.america__detroit
Tz::America__Dominica => @data.america__puerto_rico
Tz::America__Edmonton => @data.america__edmonton
Tz::America__Eirunepe => @data.america__eirunepe
Tz::America__El_Salvador => @data.america__el_salvador
Tz::America__Ensenada => @data.america__tijuana
Tz::America__Fort_Nelson => @data.america__fort_nelson
Tz::America__Fort_Wayne => @data.america__indiana__indianapolis
Tz::America__Fortaleza => @data.america__fortaleza
Tz::America__Glace_Bay => @data.america__glace_bay
Tz::America__Godthab => @data.america__nuuk
Tz::America__Goose_Bay => @data.america__goose_bay
Tz::America__Grand_Turk => @data.america__grand_turk
Tz::America__Grenada => @data.america__puerto_rico
Tz::America__Guadeloupe => @data.america__puerto_rico
Tz::America__Guatemala => @data.america__guatemala
Tz::America__Guayaquil => @data.america__guayaquil
Tz::America__Guyana => @data.america__guyana
Tz::America__Halifax => @data.america__halifax
Tz::America__Havana => @data.america__havana
Tz::America__Hermosillo => @data.america__hermosillo
Tz::America__Indiana__Indianapolis => @data.america__indiana__indianapolis
Tz::America__Indiana__Knox => @data.america__indiana__knox
Tz::America__Indiana__Marengo => @data.america__indiana__marengo
Tz::America__Indiana__Petersburg => @data.america__indiana__petersburg
Tz::America__Indiana__Tell_City => @data.america__indiana__tell_city
Tz::America__Indiana__Vevay => @data.america__indiana__vevay
Tz::America__Indiana__Vincennes => @data.america__indiana__vincennes
Tz::America__Indiana__Winamac => @data.america__indiana__winamac
Tz::America__Indianapolis => @data.america__indiana__indianapolis
Tz::America__Inuvik => @data.america__inuvik
Tz::America__Iqaluit => @data.america__iqaluit
Tz::America__Jamaica => @data.america__jamaica
Tz::America__Jujuy => @data.america__argentina__jujuy
Tz::America__Juneau => @data.america__juneau
Tz::America__Kentucky__Louisville => @data.america__kentucky__louisville
Tz::America__Kentucky__Monticello => @data.america__kentucky__monticello
Tz::America__Knox_IN => @data.america__indiana__knox
Tz::America__Kralendijk => @data.america__puerto_rico
Tz::America__La_Paz => @data.america__la_paz
Tz::America__Lima => @data.america__lima
Tz::America__Los_Angeles => @data.america__los_angeles
Tz::America__Louisville => @data.america__kentucky__louisville
Tz::America__Lower_Princes => @data.america__puerto_rico
Tz::America__Maceio => @data.america__maceio
Tz::America__Managua => @data.america__managua
Tz::America__Manaus => @data.america__manaus
Tz::America__Marigot => @data.america__puerto_rico
Tz::America__Martinique => @data.america__martinique
Tz::America__Matamoros => @data.america__matamoros
Tz::America__Mazatlan => @data.america__mazatlan
Tz::America__Mendoza => @data.america__argentina__mendoza
Tz::America__Menominee => @data.america__menominee
Tz::America__Merida => @data.america__merida
Tz::America__Metlakatla => @data.america__metlakatla
Tz::America__Mexico_City => @data.america__mexico_city
Tz::America__Miquelon => @data.america__miquelon
Tz::America__Moncton => @data.america__moncton
Tz::America__Monterrey => @data.america__monterrey
Tz::America__Montevideo => @data.america__montevideo
Tz::America__Montreal => @data.america__toronto
Tz::America__Montserrat => @data.america__puerto_rico
Tz::America__Nassau => @data.america__toronto
Tz::America__New_York => @data.america__new_york
Tz::America__Nipigon => @data.america__toronto
Tz::America__Nome => @data.america__nome
Tz::America__Noronha => @data.america__noronha
Tz::America__North_Dakota__Beulah => @data.america__north_dakota__beulah
Tz::America__North_Dakota__Center => @data.america__north_dakota__center
Tz::America__North_Dakota__New_Salem =>
@data.america__north_dakota__new_salem
Tz::America__Nuuk => @data.america__nuuk
Tz::America__Ojinaga => @data.america__ojinaga
Tz::America__Panama => @data.america__panama
Tz::America__Pangnirtung => @data.america__iqaluit
Tz::America__Paramaribo => @data.america__paramaribo
Tz::America__Phoenix => @data.america__phoenix
Tz::America__PortauPrince => @data.america__portauprince
Tz::America__Port_of_Spain => @data.america__puerto_rico
Tz::America__Porto_Acre => @data.america__rio_branco
Tz::America__Porto_Velho => @data.america__porto_velho
Tz::America__Puerto_Rico => @data.america__puerto_rico
Tz::America__Punta_Arenas => @data.america__punta_arenas
Tz::America__Rainy_River => @data.america__winnipeg
Tz::America__Rankin_Inlet => @data.america__rankin_inlet
Tz::America__Recife => @data.america__recife
Tz::America__Regina => @data.america__regina
Tz::America__Resolute => @data.america__resolute
Tz::America__Rio_Branco => @data.america__rio_branco
Tz::America__Rosario => @data.america__argentina__cordoba
_ => abort("unreachable in timespans_2")
}
}
///|
fn timespans_3(tz : Tz) -> @core.FixedTimespanSet {
match tz {
Tz::America__Santa_Isabel => @data.america__tijuana
Tz::America__Santarem => @data.america__santarem
Tz::America__Santiago => @data.america__santiago
Tz::America__Santo_Domingo => @data.america__santo_domingo
Tz::America__Sao_Paulo => @data.america__sao_paulo
Tz::America__Scoresbysund => @data.america__scoresbysund
Tz::America__Shiprock => @data.america__denver
Tz::America__Sitka => @data.america__sitka
Tz::America__St_Barthelemy => @data.america__puerto_rico
Tz::America__St_Johns => @data.america__st_johns
Tz::America__St_Kitts => @data.america__puerto_rico
Tz::America__St_Lucia => @data.america__puerto_rico
Tz::America__St_Thomas => @data.america__puerto_rico
Tz::America__St_Vincent => @data.america__puerto_rico
Tz::America__Swift_Current => @data.america__swift_current
Tz::America__Tegucigalpa => @data.america__tegucigalpa
Tz::America__Thule => @data.america__thule
Tz::America__Thunder_Bay => @data.america__toronto
Tz::America__Tijuana => @data.america__tijuana
Tz::America__Toronto => @data.america__toronto
Tz::America__Tortola => @data.america__puerto_rico
Tz::America__Vancouver => @data.america__vancouver
Tz::America__Virgin => @data.america__puerto_rico
Tz::America__Whitehorse => @data.america__whitehorse
Tz::America__Winnipeg => @data.america__winnipeg
Tz::America__Yakutat => @data.america__yakutat
Tz::America__Yellowknife => @data.america__edmonton
Tz::Antarctica__Casey => @data.antarctica__casey
Tz::Antarctica__Davis => @data.antarctica__davis
Tz::Antarctica__DumontDUrville => @data.pacific__port_moresby
Tz::Antarctica__Macquarie => @data.antarctica__macquarie
Tz::Antarctica__Mawson => @data.antarctica__mawson
Tz::Antarctica__McMurdo => @data.pacific__auckland
Tz::Antarctica__Palmer => @data.antarctica__palmer
Tz::Antarctica__Rothera => @data.antarctica__rothera
Tz::Antarctica__South_Pole => @data.pacific__auckland
Tz::Antarctica__Syowa => @data.asia__riyadh
Tz::Antarctica__Troll => @data.antarctica__troll
Tz::Antarctica__Vostok => @data.antarctica__vostok
Tz::Arctic__Longyearbyen => @data.europe__berlin
Tz::Asia__Aden => @data.asia__riyadh
Tz::Asia__Almaty => @data.asia__almaty
Tz::Asia__Amman => @data.asia__amman
Tz::Asia__Anadyr => @data.asia__anadyr
Tz::Asia__Aqtau => @data.asia__aqtau
Tz::Asia__Aqtobe => @data.asia__aqtobe
Tz::Asia__Ashgabat => @data.asia__ashgabat
Tz::Asia__Ashkhabad => @data.asia__ashgabat
Tz::Asia__Atyrau => @data.asia__atyrau
Tz::Asia__Baghdad => @data.asia__baghdad
Tz::Asia__Bahrain => @data.asia__qatar
Tz::Asia__Baku => @data.asia__baku
Tz::Asia__Bangkok => @data.asia__bangkok
Tz::Asia__Barnaul => @data.asia__barnaul
Tz::Asia__Beirut => @data.asia__beirut
Tz::Asia__Bishkek => @data.asia__bishkek
Tz::Asia__Brunei => @data.asia__kuching
Tz::Asia__Calcutta => @data.asia__kolkata
Tz::Asia__Chita => @data.asia__chita
Tz::Asia__Choibalsan => @data.asia__ulaanbaatar
Tz::Asia__Chongqing => @data.asia__shanghai
Tz::Asia__Chungking => @data.asia__shanghai
Tz::Asia__Colombo => @data.asia__colombo
Tz::Asia__Dacca => @data.asia__dhaka
Tz::Asia__Damascus => @data.asia__damascus
Tz::Asia__Dhaka => @data.asia__dhaka
Tz::Asia__Dili => @data.asia__dili
Tz::Asia__Dubai => @data.asia__dubai
Tz::Asia__Dushanbe => @data.asia__dushanbe
Tz::Asia__Famagusta => @data.asia__famagusta
Tz::Asia__Gaza => @data.asia__gaza
Tz::Asia__Harbin => @data.asia__shanghai
Tz::Asia__Hebron => @data.asia__hebron
Tz::Asia__Ho_Chi_Minh => @data.asia__ho_chi_minh
Tz::Asia__Hong_Kong => @data.asia__hong_kong
Tz::Asia__Hovd => @data.asia__hovd
Tz::Asia__Irkutsk => @data.asia__irkutsk
Tz::Asia__Istanbul => @data.europe__istanbul
Tz::Asia__Jakarta => @data.asia__jakarta
Tz::Asia__Jayapura => @data.asia__jayapura
Tz::Asia__Jerusalem => @data.asia__jerusalem
Tz::Asia__Kabul => @data.asia__kabul
Tz::Asia__Kamchatka => @data.asia__kamchatka
Tz::Asia__Karachi => @data.asia__karachi
Tz::Asia__Kashgar => @data.asia__urumqi
Tz::Asia__Kathmandu => @data.asia__kathmandu
Tz::Asia__Katmandu => @data.asia__kathmandu
Tz::Asia__Khandyga => @data.asia__khandyga
Tz::Asia__Kolkata => @data.asia__kolkata
Tz::Asia__Krasnoyarsk => @data.asia__krasnoyarsk
Tz::Asia__Kuala_Lumpur => @data.asia__singapore
Tz::Asia__Kuching => @data.asia__kuching
Tz::Asia__Kuwait => @data.asia__riyadh
Tz::Asia__Macao => @data.asia__macau
Tz::Asia__Macau => @data.asia__macau
Tz::Asia__Magadan => @data.asia__magadan
Tz::Asia__Makassar => @data.asia__makassar
Tz::Asia__Manila => @data.asia__manila
Tz::Asia__Muscat => @data.asia__dubai
Tz::Asia__Nicosia => @data.asia__nicosia
_ => abort("unreachable in timespans_3")
}
}
///|
fn timespans_4(tz : Tz) -> @core.FixedTimespanSet {
match tz {
Tz::Asia__Novokuznetsk => @data.asia__novokuznetsk
Tz::Asia__Novosibirsk => @data.asia__novosibirsk
Tz::Asia__Omsk => @data.asia__omsk
Tz::Asia__Oral => @data.asia__oral
Tz::Asia__Phnom_Penh => @data.asia__bangkok
Tz::Asia__Pontianak => @data.asia__pontianak
Tz::Asia__Pyongyang => @data.asia__pyongyang
Tz::Asia__Qatar => @data.asia__qatar
Tz::Asia__Qostanay => @data.asia__qostanay
Tz::Asia__Qyzylorda => @data.asia__qyzylorda
Tz::Asia__Rangoon => @data.asia__yangon
Tz::Asia__Riyadh => @data.asia__riyadh
Tz::Asia__Saigon => @data.asia__ho_chi_minh
Tz::Asia__Sakhalin => @data.asia__sakhalin
Tz::Asia__Samarkand => @data.asia__samarkand
Tz::Asia__Seoul => @data.asia__seoul
Tz::Asia__Shanghai => @data.asia__shanghai
Tz::Asia__Singapore => @data.asia__singapore
Tz::Asia__Srednekolymsk => @data.asia__srednekolymsk
Tz::Asia__Taipei => @data.asia__taipei
Tz::Asia__Tashkent => @data.asia__tashkent
Tz::Asia__Tbilisi => @data.asia__tbilisi
Tz::Asia__Tehran => @data.asia__tehran
Tz::Asia__Tel_Aviv => @data.asia__jerusalem
Tz::Asia__Thimbu => @data.asia__thimphu
Tz::Asia__Thimphu => @data.asia__thimphu
Tz::Asia__Tokyo => @data.asia__tokyo
Tz::Asia__Tomsk => @data.asia__tomsk
Tz::Asia__Ujung_Pandang => @data.asia__makassar
Tz::Asia__Ulaanbaatar => @data.asia__ulaanbaatar
Tz::Asia__Ulan_Bator => @data.asia__ulaanbaatar
Tz::Asia__Urumqi => @data.asia__urumqi
Tz::Asia__UstNera => @data.asia__ustnera
Tz::Asia__Vientiane => @data.asia__bangkok
Tz::Asia__Vladivostok => @data.asia__vladivostok
Tz::Asia__Yakutsk => @data.asia__yakutsk
Tz::Asia__Yangon => @data.asia__yangon
Tz::Asia__Yekaterinburg => @data.asia__yekaterinburg
Tz::Asia__Yerevan => @data.asia__yerevan
Tz::Atlantic__Azores => @data.atlantic__azores
Tz::Atlantic__Bermuda => @data.atlantic__bermuda
Tz::Atlantic__Canary => @data.atlantic__canary
Tz::Atlantic__Cape_Verde => @data.atlantic__cape_verde
Tz::Atlantic__Faeroe => @data.atlantic__faroe
Tz::Atlantic__Faroe => @data.atlantic__faroe
Tz::Atlantic__Jan_Mayen => @data.europe__berlin
Tz::Atlantic__Madeira => @data.atlantic__madeira
Tz::Atlantic__Reykjavik => @data.africa__abidjan
Tz::Atlantic__South_Georgia => @data.atlantic__south_georgia
Tz::Atlantic__St_Helena => @data.africa__abidjan
Tz::Atlantic__Stanley => @data.atlantic__stanley
Tz::Australia__ACT => @data.australia__sydney
Tz::Australia__Adelaide => @data.australia__adelaide
Tz::Australia__Brisbane => @data.australia__brisbane
Tz::Australia__Broken_Hill => @data.australia__broken_hill
Tz::Australia__Canberra => @data.australia__sydney
Tz::Australia__Currie => @data.australia__hobart
Tz::Australia__Darwin => @data.australia__darwin
Tz::Australia__Eucla => @data.australia__eucla
Tz::Australia__Hobart => @data.australia__hobart
Tz::Australia__LHI => @data.australia__lord_howe
Tz::Australia__Lindeman => @data.australia__lindeman
Tz::Australia__Lord_Howe => @data.australia__lord_howe
Tz::Australia__Melbourne => @data.australia__melbourne
Tz::Australia__NSW => @data.australia__sydney
Tz::Australia__North => @data.australia__darwin
Tz::Australia__Perth => @data.australia__perth
Tz::Australia__Queensland => @data.australia__brisbane
Tz::Australia__South => @data.australia__adelaide
Tz::Australia__Sydney => @data.australia__sydney
Tz::Australia__Tasmania => @data.australia__hobart
Tz::Australia__Victoria => @data.australia__melbourne
Tz::Australia__West => @data.australia__perth
Tz::Australia__Yancowinna => @data.australia__broken_hill
Tz::Brazil__Acre => @data.america__rio_branco
Tz::Brazil__DeNoronha => @data.america__noronha
Tz::Brazil__East => @data.america__sao_paulo
Tz::Brazil__West => @data.america__manaus
Tz::CET => @data.europe__brussels
Tz::CST6CDT => @data.america__chicago
Tz::Canada__Atlantic => @data.america__halifax
Tz::Canada__Central => @data.america__winnipeg
Tz::Canada__Eastern => @data.america__toronto
Tz::Canada__Mountain => @data.america__edmonton
Tz::Canada__Newfoundland => @data.america__st_johns
Tz::Canada__Pacific => @data.america__vancouver
Tz::Canada__Saskatchewan => @data.america__regina
Tz::Canada__Yukon => @data.america__whitehorse
Tz::Chile__Continental => @data.america__santiago
Tz::Chile__EasterIsland => @data.pacific__easter
Tz::Cuba => @data.america__havana
Tz::EET => @data.europe__athens
Tz::EST => @data.america__panama
Tz::EST5EDT => @data.america__new_york
Tz::Egypt => @data.africa__cairo
Tz::Eire => @data.europe__dublin
Tz::Etc__GMT => @data.etc__gmt
Tz::Etc__GMTPlus0 => @data.etc__gmt
Tz::Etc__GMTPlus1 => @data.etc__gmtplus1
Tz::Etc__GMTPlus10 => @data.etc__gmtplus10
_ => abort("unreachable in timespans_4")
}
}
///|
fn timespans_5(tz : Tz) -> @core.FixedTimespanSet {
match tz {
Tz::Etc__GMTPlus11 => @data.etc__gmtplus11
Tz::Etc__GMTPlus12 => @data.etc__gmtplus12
Tz::Etc__GMTPlus2 => @data.etc__gmtplus2
Tz::Etc__GMTPlus3 => @data.etc__gmtplus3
Tz::Etc__GMTPlus4 => @data.etc__gmtplus4
Tz::Etc__GMTPlus5 => @data.etc__gmtplus5
Tz::Etc__GMTPlus6 => @data.etc__gmtplus6
Tz::Etc__GMTPlus7 => @data.etc__gmtplus7
Tz::Etc__GMTPlus8 => @data.etc__gmtplus8
Tz::Etc__GMTPlus9 => @data.etc__gmtplus9
Tz::Etc__GMTMinus0 => @data.etc__gmt
Tz::Etc__GMTMinus1 => @data.etc__gmtminus1
Tz::Etc__GMTMinus10 => @data.etc__gmtminus10
Tz::Etc__GMTMinus11 => @data.etc__gmtminus11
Tz::Etc__GMTMinus12 => @data.etc__gmtminus12
Tz::Etc__GMTMinus13 => @data.etc__gmtminus13
Tz::Etc__GMTMinus14 => @data.etc__gmtminus14
Tz::Etc__GMTMinus2 => @data.etc__gmtminus2
Tz::Etc__GMTMinus3 => @data.etc__gmtminus3
Tz::Etc__GMTMinus4 => @data.etc__gmtminus4
Tz::Etc__GMTMinus5 => @data.etc__gmtminus5
Tz::Etc__GMTMinus6 => @data.etc__gmtminus6
Tz::Etc__GMTMinus7 => @data.etc__gmtminus7
Tz::Etc__GMTMinus8 => @data.etc__gmtminus8
Tz::Etc__GMTMinus9 => @data.etc__gmtminus9
Tz::Etc__GMT0 => @data.etc__gmt
Tz::Etc__Greenwich => @data.etc__gmt
Tz::Etc__UCT => @data.etc__utc
Tz::Etc__UTC => @data.etc__utc
Tz::Etc__Universal => @data.etc__utc
Tz::Etc__Zulu => @data.etc__utc
Tz::Europe__Amsterdam => @data.europe__brussels
Tz::Europe__Andorra => @data.europe__andorra
Tz::Europe__Astrakhan => @data.europe__astrakhan
Tz::Europe__Athens => @data.europe__athens
Tz::Europe__Belfast => @data.europe__london
Tz::Europe__Belgrade => @data.europe__belgrade
Tz::Europe__Berlin => @data.europe__berlin
Tz::Europe__Bratislava => @data.europe__prague
Tz::Europe__Brussels => @data.europe__brussels
Tz::Europe__Bucharest => @data.europe__bucharest
Tz::Europe__Budapest => @data.europe__budapest
Tz::Europe__Busingen => @data.europe__zurich
Tz::Europe__Chisinau => @data.europe__chisinau
Tz::Europe__Copenhagen => @data.europe__berlin
Tz::Europe__Dublin => @data.europe__dublin
Tz::Europe__Gibraltar => @data.europe__gibraltar
Tz::Europe__Guernsey => @data.europe__london
Tz::Europe__Helsinki => @data.europe__helsinki
Tz::Europe__Isle_of_Man => @data.europe__london
Tz::Europe__Istanbul => @data.europe__istanbul
Tz::Europe__Jersey => @data.europe__london
Tz::Europe__Kaliningrad => @data.europe__kaliningrad
Tz::Europe__Kiev => @data.europe__kyiv
Tz::Europe__Kirov => @data.europe__kirov
Tz::Europe__Kyiv => @data.europe__kyiv
Tz::Europe__Lisbon => @data.europe__lisbon
Tz::Europe__Ljubljana => @data.europe__belgrade
Tz::Europe__London => @data.europe__london
Tz::Europe__Luxembourg => @data.europe__brussels
Tz::Europe__Madrid => @data.europe__madrid
Tz::Europe__Malta => @data.europe__malta
Tz::Europe__Mariehamn => @data.europe__helsinki
Tz::Europe__Minsk => @data.europe__minsk
Tz::Europe__Monaco => @data.europe__paris
Tz::Europe__Moscow => @data.europe__moscow
Tz::Europe__Nicosia => @data.asia__nicosia
Tz::Europe__Oslo => @data.europe__berlin
Tz::Europe__Paris => @data.europe__paris
Tz::Europe__Podgorica => @data.europe__belgrade
Tz::Europe__Prague => @data.europe__prague
Tz::Europe__Riga => @data.europe__riga
Tz::Europe__Rome => @data.europe__rome
Tz::Europe__Samara => @data.europe__samara
Tz::Europe__San_Marino => @data.europe__rome
Tz::Europe__Sarajevo => @data.europe__belgrade
Tz::Europe__Saratov => @data.europe__saratov
Tz::Europe__Simferopol => @data.europe__simferopol
Tz::Europe__Skopje => @data.europe__belgrade
Tz::Europe__Sofia => @data.europe__sofia
Tz::Europe__Stockholm => @data.europe__berlin
Tz::Europe__Tallinn => @data.europe__tallinn
Tz::Europe__Tirane => @data.europe__tirane
Tz::Europe__Tiraspol => @data.europe__chisinau
Tz::Europe__Ulyanovsk => @data.europe__ulyanovsk
Tz::Europe__Uzhgorod => @data.europe__kyiv
Tz::Europe__Vaduz => @data.europe__zurich
Tz::Europe__Vatican => @data.europe__rome
Tz::Europe__Vienna => @data.europe__vienna
Tz::Europe__Vilnius => @data.europe__vilnius
Tz::Europe__Volgograd => @data.europe__volgograd
Tz::Europe__Warsaw => @data.europe__warsaw
Tz::Europe__Zagreb => @data.europe__belgrade
Tz::Europe__Zaporozhye => @data.europe__kyiv
Tz::Europe__Zurich => @data.europe__zurich
Tz::GB => @data.europe__london
Tz::GBEire => @data.europe__london
Tz::GMT => @data.etc__gmt
Tz::GMTPlus0 => @data.etc__gmt
Tz::GMTMinus0 => @data.etc__gmt
_ => abort("unreachable in timespans_5")
}
}
///|
fn timespans_6(tz : Tz) -> @core.FixedTimespanSet {
match tz {
Tz::GMT0 => @data.etc__gmt
Tz::Greenwich => @data.etc__gmt
Tz::HST => @data.pacific__honolulu
Tz::Hongkong => @data.asia__hong_kong
Tz::Iceland => @data.africa__abidjan
Tz::Indian__Antananarivo => @data.africa__nairobi
Tz::Indian__Chagos => @data.indian__chagos
Tz::Indian__Christmas => @data.asia__bangkok
Tz::Indian__Cocos => @data.asia__yangon
Tz::Indian__Comoro => @data.africa__nairobi
Tz::Indian__Kerguelen => @data.indian__maldives
Tz::Indian__Mahe => @data.asia__dubai
Tz::Indian__Maldives => @data.indian__maldives
Tz::Indian__Mauritius => @data.indian__mauritius
Tz::Indian__Mayotte => @data.africa__nairobi
Tz::Indian__Reunion => @data.asia__dubai
Tz::Iran => @data.asia__tehran
Tz::Israel => @data.asia__jerusalem
Tz::Jamaica => @data.america__jamaica
Tz::Japan => @data.asia__tokyo
Tz::Kwajalein => @data.pacific__kwajalein
Tz::Libya => @data.africa__tripoli
Tz::MET => @data.europe__brussels
Tz::MST => @data.america__phoenix
Tz::MST7MDT => @data.america__denver
Tz::Mexico__BajaNorte => @data.america__tijuana
Tz::Mexico__BajaSur => @data.america__mazatlan
Tz::Mexico__General => @data.america__mexico_city
Tz::NZ => @data.pacific__auckland
Tz::NZCHAT => @data.pacific__chatham
Tz::Navajo => @data.america__denver
Tz::PRC => @data.asia__shanghai
Tz::PST8PDT => @data.america__los_angeles
Tz::Pacific__Apia => @data.pacific__apia
Tz::Pacific__Auckland => @data.pacific__auckland
Tz::Pacific__Bougainville => @data.pacific__bougainville
Tz::Pacific__Chatham => @data.pacific__chatham
Tz::Pacific__Chuuk => @data.pacific__port_moresby
Tz::Pacific__Easter => @data.pacific__easter
Tz::Pacific__Efate => @data.pacific__efate
Tz::Pacific__Enderbury => @data.pacific__kanton
Tz::Pacific__Fakaofo => @data.pacific__fakaofo
Tz::Pacific__Fiji => @data.pacific__fiji
Tz::Pacific__Funafuti => @data.pacific__tarawa
Tz::Pacific__Galapagos => @data.pacific__galapagos
Tz::Pacific__Gambier => @data.pacific__gambier
Tz::Pacific__Guadalcanal => @data.pacific__guadalcanal
Tz::Pacific__Guam => @data.pacific__guam
Tz::Pacific__Honolulu => @data.pacific__honolulu
Tz::Pacific__Johnston => @data.pacific__honolulu
Tz::Pacific__Kanton => @data.pacific__kanton
Tz::Pacific__Kiritimati => @data.pacific__kiritimati
Tz::Pacific__Kosrae => @data.pacific__kosrae
Tz::Pacific__Kwajalein => @data.pacific__kwajalein
Tz::Pacific__Majuro => @data.pacific__tarawa
Tz::Pacific__Marquesas => @data.pacific__marquesas
Tz::Pacific__Midway => @data.pacific__pago_pago
Tz::Pacific__Nauru => @data.pacific__nauru
Tz::Pacific__Niue => @data.pacific__niue
Tz::Pacific__Norfolk => @data.pacific__norfolk
Tz::Pacific__Noumea => @data.pacific__noumea
Tz::Pacific__Pago_Pago => @data.pacific__pago_pago
Tz::Pacific__Palau => @data.pacific__palau
Tz::Pacific__Pitcairn => @data.pacific__pitcairn
Tz::Pacific__Pohnpei => @data.pacific__guadalcanal
Tz::Pacific__Ponape => @data.pacific__guadalcanal
Tz::Pacific__Port_Moresby => @data.pacific__port_moresby
Tz::Pacific__Rarotonga => @data.pacific__rarotonga
Tz::Pacific__Saipan => @data.pacific__guam
Tz::Pacific__Samoa => @data.pacific__pago_pago
Tz::Pacific__Tahiti => @data.pacific__tahiti
Tz::Pacific__Tarawa => @data.pacific__tarawa
Tz::Pacific__Tongatapu => @data.pacific__tongatapu
Tz::Pacific__Truk => @data.pacific__port_moresby
Tz::Pacific__Wake => @data.pacific__tarawa
Tz::Pacific__Wallis => @data.pacific__tarawa
Tz::Pacific__Yap => @data.pacific__port_moresby
Tz::Poland => @data.europe__warsaw
Tz::Portugal => @data.europe__lisbon
Tz::ROC => @data.asia__taipei
Tz::ROK => @data.asia__seoul
Tz::Singapore => @data.asia__singapore
Tz::Turkey => @data.europe__istanbul
Tz::UCT => @data.etc__utc
Tz::US__Alaska => @data.america__anchorage
Tz::US__Aleutian => @data.america__adak
Tz::US__Arizona => @data.america__phoenix
Tz::US__Central => @data.america__chicago
Tz::US__EastIndiana => @data.america__indiana__indianapolis
Tz::US__Eastern => @data.america__new_york
Tz::US__Hawaii => @data.pacific__honolulu
Tz::US__IndianaStarke => @data.america__indiana__knox
Tz::US__Michigan => @data.america__detroit
Tz::US__Mountain => @data.america__denver
Tz::US__Pacific => @data.america__los_angeles
Tz::US__Samoa => @data.pacific__pago_pago
Tz::UTC => @data.etc__utc
Tz::Universal => @data.etc__utc
Tz::WSU => @data.europe__moscow
Tz::WET => @data.europe__lisbon
Tz::Zulu => @data.etc__utc
_ => abort("unreachable in timespans_6")
}
}
///|
/// 给定 UTC 瞬时,返回其在本时区的偏移(无歧义)。
/// 用 binary_search + utc_span(n).cmp(ts),Ok/Err 均取 idx(UTC 区间无缺口)。
pub fn Tz::offset_from_utc_date_time(self : Tz, dt : NaiveDateTime) -> TzOffset {
let ts = dt.timestamp()
let span = self.timespans()
let i = binary_search(0, span.len(), fn(n) { span.utc_span(n).cmp(ts) })
let idx = match i {
Ok(n) => n
Err(n) => n
}
TzOffset::make(self, span.get(idx))
}
///|
/// 给定本地墙钟,返回 LocalResult[TzOffset](含 DST 歧义/缺口处理)。
pub fn Tz::offset_from_local_date_time(
self : Tz,
dt : NaiveDateTime,
) -> LocalResult[TzOffset] {
let ts = dt.timestamp()
let span = self.timespans()
let i = binary_search(0, span.len(), fn(n) { span.local_span(n).cmp(ts) })
match i {
Ok(0) if span.len() == 1 =>
LocalResult::Single(TzOffset::make(self, span.get(0)))
Ok(0) if span.local_span(1).contains(ts) =>
LocalResult::Ambiguous(
TzOffset::make(self, span.get(0)),
TzOffset::make(self, span.get(1)),
)
Ok(0) => LocalResult::Single(TzOffset::make(self, span.get(0)))
Ok(n) if span.local_span(n - 1).contains(ts) =>
LocalResult::Ambiguous(
TzOffset::make(self, span.get(n - 1)),
TzOffset::make(self, span.get(n)),
)
Ok(n) if n == span.len() - 1 =>
LocalResult::Single(TzOffset::make(self, span.get(n)))
Ok(n) if span.local_span(n + 1).contains(ts) =>
LocalResult::Ambiguous(
TzOffset::make(self, span.get(n)),
TzOffset::make(self, span.get(n + 1)),
)
Ok(n) => LocalResult::Single(TzOffset::make(self, span.get(n)))
Err(_) => LocalResult::None
}
}
///|
/// Tz 实现 TimeZone trait(方法已定义,trait 声明见下)。
/// 注:MoonBit 用户自定义 trait 用 `pub impl Trait for Type with fn ...` 语法,
/// 此处方法已作为 Tz 的公开方法定义,可直接调用。
///|
/// DST 春进缺口信息,描述一个不存在的本地时刻前后的边界。
pub struct GapInfo {
begin : (NaiveDateTime, TzOffset)?
end : DateTime?
}
///|
/// 由边界直接构造。
pub fn GapInfo::make(
begin : (NaiveDateTime, TzOffset)?,
end : DateTime?,
) -> GapInfo {
GapInfo::{ begin, end, }
}
///|
/// 探测本地墙钟 `local` 在时区 `tz` 下是否落在 DST 春进缺口。
pub fn GapInfo::detect(local_dt : NaiveDateTime, tz : Tz) -> GapInfo? {
let ts = tz.timespans()
let timestamp = local_dt.timestamp()
match binary_search(0, ts.len(), fn(n) { ts.local_span(n).cmp(timestamp) }) {
Ok(_) => None
Err(end_idx) =>
Some(GapInfo::make(gap_begin(tz, ts, end_idx), gap_end(tz, ts, end_idx)))
}
}
///|
/// 缺口前最后一刻(本地):endIdx==0 表示无前驱。
fn gap_begin(
tz : Tz,
ts : @core.FixedTimespanSet,
end_idx : Int32,
) -> (NaiveDateTime, TzOffset)? {
if end_idx == 0 {
None
} else {
match ts.local_span(end_idx - 1).end {
Some(t) =>
Some(
(
NaiveDateTime::from_timestamp(t),
TzOffset::make(tz, ts.get(end_idx - 1)),
),
)
None => None
}
}
}
///|
/// 缺口后第一刻(本地):endIdx>=len 表示无后继。
fn gap_end(tz : Tz, ts : @core.FixedTimespanSet, end_idx : Int32) -> DateTime? {
if end_idx >= ts.len() {
None
} else {
match ts.local_span(end_idx).begin {
Some(t) => gap_end_inner(tz, t)
None => None
}
}
}
///|
fn gap_end_inner(tz : Tz, t : Int64) -> DateTime? {
let nl = NaiveDateTime::from_timestamp(t)
match tz.from_local_date_time(nl) {
LocalResult::Single(dt) => Some(dt)
_ => None
}
}