1use super::{MILLISECONDS_PER_HOUR, MILLISECONDS_PER_MINUTE};
12
13macro_rules! create_timezone {
14 (
15 $(
16 $(#[$attrs:meta])*
17 $abbr:ident, $short:literal, $long:literal, $positive:literal, $utch:literal, $utcm:literal
18 ),*
19 ) => {
20 #[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
21 #[allow(non_camel_case_types)]
22 pub enum Timezone {
23 $(
24 $(#[$attrs])*
25 $abbr
26 ),*
27 }
28
29 impl Timezone {
30 pub const fn format_long(&self) -> &'static str {
31 match self {
32 $(Timezone::$abbr => $long),*
33 }
34 }
35
36 pub const fn format_short(&self) -> &'static str {
37 match self {
38 $(Timezone::$abbr => $short),*
39 }
40 }
41
42 pub const fn utc_offset_hours_min(&self) -> (bool, u8, u8) {
43 match self {
44 $(Timezone::$abbr => ($positive, $utch, $utcm)),*
45 }
46 }
47
48 pub const fn utc_offset_millis(&self) -> i64 {
49 match self {
50 $(Timezone::$abbr => {
51 (if $positive { 1 } else { -1 } * MILLISECONDS_PER_HOUR * $utch + MILLISECONDS_PER_MINUTE * $utcm)
52 }),*
53 }
54 }
55 }
56 };
57}
58
59#[rustfmt::skip]
62create_timezone! {
63 #[default]
65 UTC, "Z", "Universal Time Coordinated", true, 0, 0,
66
67 EST, "EST", "Eastern Standard Time", false, 5, 0,
70 EDT, "EDT", "Eastern Daylight Time", false, 4, 0,
72 CST, "CST", "Central Standard Time", false, 6, 0,
74 CDT, "CDT", "Central Daylight Time", false, 5, 0,
76 MST, "MST", "Mountain Standard Time", false, 7, 0,
78 MDT, "MDT", "Mountain Daylight Time", false, 6, 0,
80 PST, "PST", "Pacific Standard Time", false, 8, 0,
82 PDT, "PDT", "Pacific Daylight Time", false, 7, 0,
84 AST, "AST", "Alaska Standard Time", false, 9, 0,
86 AKDT, "AKDT", "Alaska Daylight Time", false, 8, 0,
88 HST, "HST", "Hawaii Standard Time", false, 10, 0,
90 HAST, "HAST", "Hawaii-Aleutian Standard Time", false, 10, 0,
92
93 BRT, "BRT", "BrasÃlia Time", false, 3, 0,
96 ART, "ART", "Argentina Time", false, 3, 0,
98 CLT, "CLT", "Chile Standard Time", false, 4, 0,
100 CLST, "CLST", "Chile Summer Time", false, 3, 0,
102 PYT, "PYT", "Paraguay Time", false, 4, 0,
104 PYST, "PYST", "Paraguay Summer Time", false, 3, 0,
106 GFT, "GFT", "French Guiana Time", false, 3, 0,
108 VET, "VET", "Venezuela Time", false, 4, 0,
110 BOT, "BOT", "Bolivia Time", false, 4, 0,
112 PET, "PET", "Peru Time", false, 5, 0,
114 COT, "COT", "Colombia Time", false, 5, 0,
116 ECT, "ECT", "Ecuador Time", false, 5, 0,
118
119 GMT, "GMT", "Greenwich Mean Time", true, 0, 0,
122 BST, "BST", "British Summer Time", true, 1, 0,
124 WET, "WET", "Western European Time", true, 0, 0,
126 WEST, "WEST", "Western European Summer Time", true, 1, 0,
128 CET, "CET", "Central European Time", true, 1, 0,
130 CEST, "CEST", "Central European Summer Time", true, 2, 0,
132 EET, "EET", "Eastern European Time", true, 2, 0,
134 EEST, "EEST", "Eastern European Summer Time", true, 3, 0,
136 MSK, "MSK", "Moscow Standard Time", true, 3, 0,
138 TRT, "TRT", "Turkey Time", true, 3, 0,
140 IST, "IST", "Irish Standard Time", true, 1, 0,
142
143 WAT, "WAT", "West Africa Time", true, 1, 0,
146 CAT, "CAT", "Central Africa Time", true, 2, 0,
148 EAT, "EAT", "East Africa Time", true, 3, 0,
150 SAST, "SAST", "South Africa Standard Time", true, 2, 0,
152
153 INST, "IST", "India Standard Time", true, 5, 30,
156 PKT, "PKT", "Pakistan Standard Time", true, 5, 0,
158 BAST, "BST", "Bangladesh Standard Time", true, 6, 0,
160 MMT, "MMT", "Myanmar Time", true, 6, 30,
162 CHST, "CST", "China Standard Time", true, 8, 0,
164 JST, "JST", "Japan Standard Time", true, 9, 0,
166 KST, "KST", "Korea Standard Time", true, 9, 0,
168 SGT, "SGT", "Singapore Time", true, 8, 0,
170 PHT, "PHT", "Philippine Time", true, 8, 0,
172 ICT, "ICT", "Indochina Time", true, 7, 0,
174 WIB, "WIB", "Western Indonesia Time", true, 7, 0,
176 WITA, "WITA", "Central Indonesia Time", true, 8, 0,
178 WIT, "WIT", "Eastern Indonesia Time", true, 9, 0,
180 GST, "GST", "Gulf Standard Time", true, 4, 0,
182 AZT, "AZT", "Azerbaijan Time", true, 4, 0,
184 GET, "GET", "Georgia Standard Time", true, 4, 0,
186 AMT, "AMT", "Armenia Time", true, 4, 0,
188 ARST, "AST", "Arabia Standard Time", true, 3, 0,
190 EAEST, "EEST", "Eastern European Summer Time", true, 3, 0,
192
193 AWST, "AWST", "Australian Western Standard Time", true, 8, 0,
196 ACST, "ACST", "Australian Central Standard Time", true, 9, 30,
198 AEST, "AEST", "Australian Eastern Standard Time", true, 10, 0,
200 ACDT, "ACDT", "Australian Central Daylight Time", true, 10, 30,
202 AEDT, "AEDT", "Australian Eastern Daylight Time", true, 11, 0,
204 NZST, "NZST", "New Zealand Standard Time", true, 12, 0,
206 NZDT, "NZDT", "New Zealand Daylight Time", true, 13, 0,
208 FJT, "FJT", "Fiji Time", true, 12, 0,
210 CHAST, "CHAST", "Chatham Standard Time", true, 12, 45,
212 CHADT, "CHADT", "Chatham Daylight Time", true, 13, 45
214}