• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

taosdata / TDengine / #4989

17 Mar 2026 03:40AM UTC coverage: 68.862% (-7.0%) from 75.821%
#4989

push

travis-ci

web-flow
Merge c54c3d8de into e29fadda2

31 of 44 new or added lines in 2 files covered. (70.45%)

527 existing lines in 3 files now uncovered.

174201 of 252971 relevant lines covered (68.86%)

283829025.96 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

72.65
/source/os/src/osTimezone.c
1
/*
2
 * Copyright (c) 2019 TAOS Data, Inc. <jhtao@taosdata.com>
3
 *
4
 * This program is free software: you can use, redistribute, and/or modify
5
 * it under the terms of the GNU Affero General Public License, version 3
6
 * or later ("AGPL"), as published by the Free Software Foundation.
7
 *
8
 * This program is distributed in the hope that it will be useful, but WITHOUT
9
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
10
 * FITNESS FOR A PARTICULAR PURPOSE.
11
 *
12
 * You should have received a copy of the GNU Affero General Public License
13
 * along with this program. If not, see <http://www.gnu.org/licenses/>.
14
 */
15

16
#define ALLOW_FORBID_FUNC
17
#define _DEFAULT_SOURCE
18
#include "os.h"
19

20
#ifdef WINDOWS
21
#if (_WIN64)
22
#include <iphlpapi.h>
23
#include <mswsock.h>
24
#include <psapi.h>
25
#include <stdio.h>
26
#include <windows.h>
27
#include <ws2tcpip.h>
28
#pragma comment(lib, "Mswsock.lib ")
29
#endif
30
#include <objbase.h>
31
#pragma warning(push)
32
#pragma warning(disable : 4091)
33
#include <DbgHelp.h>
34
#pragma warning(pop)
35

36
#define W_TZ_NUM 139
37
char *win_tz[W_TZ_NUM][2] = {{"China Standard Time", "Asia/Shanghai"},
38
                        {"AUS Central Standard Time", "Australia/Darwin"},
39
                        {"AUS Eastern Standard Time", "Australia/Sydney"},
40
                        {"Afghanistan Standard Time", "Asia/Kabul"},
41
                        {"Alaskan Standard Time", "America/Anchorage"},
42
                        {"Aleutian Standard Time", "America/Adak"},
43
                        {"Altai Standard Time", "Asia/Barnaul"},
44
                        {"Arab Standard Time", "Asia/Riyadh"},
45
                        {"Arabian Standard Time", "Asia/Dubai"},
46
                        {"Arabic Standard Time", "Asia/Baghdad"},
47
                        {"Argentina Standard Time", "America/Buenos_Aires"},
48
                        {"Astrakhan Standard Time", "Europe/Astrakhan"},
49
                        {"Atlantic Standard Time", "America/Halifax"},
50
                        {"Aus Central W. Standard Time", "Australia/Eucla"},
51
                        {"Azerbaijan Standard Time", "Asia/Baku"},
52
                        {"Azores Standard Time", "Atlantic/Azores"},
53
                        {"Bahia Standard Time", "America/Bahia"},
54
                        {"Bangladesh Standard Time", "Asia/Dhaka"},
55
                        {"Belarus Standard Time", "Europe/Minsk"},
56
                        {"Bougainville Standard Time", "Pacific/Bougainville"},
57
                        {"Canada Central Standard Time", "America/Regina"},
58
                        {"Cape Verde Standard Time", "Atlantic/Cape_Verde"},
59
                        {"Caucasus Standard Time", "Asia/Yerevan"},
60
                        {"Cen. Australia Standard Time", "Australia/Adelaide"},
61
                        {"Central America Standard Time", "America/Guatemala"},
62
                        {"Central Asia Standard Time", "Asia/Almaty"},
63
                        {"Central Brazilian Standard Time", "America/Cuiaba"},
64
                        {"Central Europe Standard Time", "Europe/Budapest"},
65
                        {"Central European Standard Time", "Europe/Warsaw"},
66
                        {"Central Pacific Standard Time", "Pacific/Guadalcanal"},
67
                        {"Central Standard Time", "America/Chicago"},
68
                        {"Central Standard Time (Mexico)", "America/Mexico_City"},
69
                        {"Chatham Islands Standard Time", "Pacific/Chatham"},
70
                        {"Cuba Standard Time", "America/Havana"},
71
                        {"Dateline Standard Time", "Etc/GMT+12"},
72
                        {"E. Africa Standard Time", "Africa/Nairobi"},
73
                        {"E. Australia Standard Time", "Australia/Brisbane"},
74
                        {"E. Europe Standard Time", "Europe/Chisinau"},
75
                        {"E. South America Standard Time", "America/Sao_Paulo"},
76
                        {"Easter Island Standard Time", "Pacific/Easter"},
77
                        {"Eastern Standard Time", "America/New_York"},
78
                        {"Eastern Standard Time (Mexico)", "America/Cancun"},
79
                        {"Egypt Standard Time", "Africa/Cairo"},
80
                        {"Ekaterinburg Standard Time", "Asia/Yekaterinburg"},
81
                        {"FLE Standard Time", "Europe/Kiev"},
82
                        {"Fiji Standard Time", "Pacific/Fiji"},
83
                        {"GMT Standard Time", "Europe/London"},
84
                        {"GTB Standard Time", "Europe/Bucharest"},
85
                        {"Georgian Standard Time", "Asia/Tbilisi"},
86
                        {"Greenland Standard Time", "America/Godthab"},
87
                        {"Greenwich Standard Time", "Atlantic/Reykjavik"},
88
                        {"Haiti Standard Time", "America/Port-au-Prince"},
89
                        {"Hawaiian Standard Time", "Pacific/Honolulu"},
90
                        {"India Standard Time", "Asia/Calcutta"},
91
                        {"Iran Standard Time", "Asia/Tehran"},
92
                        {"Israel Standard Time", "Asia/Jerusalem"},
93
                        {"Jordan Standard Time", "Asia/Amman"},
94
                        {"Kaliningrad Standard Time", "Europe/Kaliningrad"},
95
                        {"Korea Standard Time", "Asia/Seoul"},
96
                        {"Libya Standard Time", "Africa/Tripoli"},
97
                        {"Line Islands Standard Time", "Pacific/Kiritimati"},
98
                        {"Lord Howe Standard Time", "Australia/Lord_Howe"},
99
                        {"Magadan Standard Time", "Asia/Magadan"},
100
                        {"Magallanes Standard Time", "America/Punta_Arenas"},
101
                        {"Marquesas Standard Time", "Pacific/Marquesas"},
102
                        {"Mauritius Standard Time", "Indian/Mauritius"},
103
                        {"Middle East Standard Time", "Asia/Beirut"},
104
                        {"Montevideo Standard Time", "America/Montevideo"},
105
                        {"Morocco Standard Time", "Africa/Casablanca"},
106
                        {"Mountain Standard Time", "America/Denver"},
107
                        {"Mountain Standard Time (Mexico)", "America/Chihuahua"},
108
                        {"Myanmar Standard Time", "Asia/Rangoon"},
109
                        {"N. Central Asia Standard Time", "Asia/Novosibirsk"},
110
                        {"Namibia Standard Time", "Africa/Windhoek"},
111
                        {"Nepal Standard Time", "Asia/Katmandu"},
112
                        {"New Zealand Standard Time", "Pacific/Auckland"},
113
                        {"Newfoundland Standard Time", "America/St_Johns"},
114
                        {"Norfolk Standard Time", "Pacific/Norfolk"},
115
                        {"North Asia East Standard Time", "Asia/Irkutsk"},
116
                        {"North Asia Standard Time", "Asia/Krasnoyarsk"},
117
                        {"North Korea Standard Time", "Asia/Pyongyang"},
118
                        {"Omsk Standard Time", "Asia/Omsk"},
119
                        {"Pacific SA Standard Time", "America/Santiago"},
120
                        {"Pacific Standard Time", "America/Los_Angeles"},
121
                        {"Pacific Standard Time (Mexico)", "America/Tijuana"},
122
                        {"Pakistan Standard Time", "Asia/Karachi"},
123
                        {"Paraguay Standard Time", "America/Asuncion"},
124
                        {"Qyzylorda Standard Time", "Asia/Qyzylorda"},
125
                        {"Romance Standard Time", "Europe/Paris"},
126
                        {"Russia Time Zone 10", "Asia/Srednekolymsk"},
127
                        {"Russia Time Zone 11", "Asia/Kamchatka"},
128
                        {"Russia Time Zone 3", "Europe/Samara"},
129
                        {"Russian Standard Time", "Europe/Moscow"},
130
                        {"SA Eastern Standard Time", "America/Cayenne"},
131
                        {"SA Pacific Standard Time", "America/Bogota"},
132
                        {"SA Western Standard Time", "America/La_Paz"},
133
                        {"SE Asia Standard Time", "Asia/Bangkok"},
134
                        {"Saint Pierre Standard Time", "America/Miquelon"},
135
                        {"Sakhalin Standard Time", "Asia/Sakhalin"},
136
                        {"Samoa Standard Time", "Pacific/Apia"},
137
                        {"Sao Tome Standard Time", "Africa/Sao_Tome"},
138
                        {"Saratov Standard Time", "Europe/Saratov"},
139
                        {"Singapore Standard Time", "Asia/Singapore"},
140
                        {"South Africa Standard Time", "Africa/Johannesburg"},
141
                        {"South Sudan Standard Time", "Africa/Juba"},
142
                        {"Sri Lanka Standard Time", "Asia/Colombo"},
143
                        {"Sudan Standard Time", "Africa/Khartoum"},
144
                        {"Syria Standard Time", "Asia/Damascus"},
145
                        {"Taipei Standard Time", "Asia/Taipei"},
146
                        {"Tasmania Standard Time", "Australia/Hobart"},
147
                        {"Tocantins Standard Time", "America/Araguaina"},
148
                        {"Tokyo Standard Time", "Asia/Tokyo"},
149
                        {"Tomsk Standard Time", "Asia/Tomsk"},
150
                        {"Tonga Standard Time", "Pacific/Tongatapu"},
151
                        {"Transbaikal Standard Time", "Asia/Chita"},
152
                        {"Turkey Standard Time", "Europe/Istanbul"},
153
                        {"Turks And Caicos Standard Time", "America/Grand_Turk"},
154
                        {"US Eastern Standard Time", "America/Indianapolis"},
155
                        {"US Mountain Standard Time", "America/Phoenix"},
156
                        {"UTC", "Etc/UTC"},
157
                        {"UTC+12", "Etc/GMT-12"},
158
                        {"UTC+13", "Etc/GMT-13"},
159
                        {"UTC-02", "Etc/GMT+2"},
160
                        {"UTC-08", "Etc/GMT+8"},
161
                        {"UTC-09", "Etc/GMT+9"},
162
                        {"UTC-11", "Etc/GMT+11"},
163
                        {"Ulaanbaatar Standard Time", "Asia/Ulaanbaatar"},
164
                        {"Venezuela Standard Time", "America/Caracas"},
165
                        {"Vladivostok Standard Time", "Asia/Vladivostok"},
166
                        {"Volgograd Standard Time", "Europe/Volgograd"},
167
                        {"W. Australia Standard Time", "Australia/Perth"},
168
                        {"W. Central Africa Standard Time", "Africa/Lagos"},
169
                        {"W. Europe Standard Time", "Europe/Berlin"},
170
                        {"W. Mongolia Standard Time", "Asia/Hovd"},
171
                        {"West Asia Standard Time", "Asia/Tashkent"},
172
                        {"West Bank Standard Time", "Asia/Hebron"},
173
                        {"West Pacific Standard Time", "Pacific/Port_Moresby"},
174
                        {"Yakutsk Standard Time", "Asia/Yakutsk"},
175
                        {"Yukon Standard Time", "America/Whitehorse"}};
176
#define W_TZ_CITY_NUM 554
177
char *tz_win[W_TZ_CITY_NUM][2] = {{"Asia/Shanghai", "China Standard Time"},
178
                        {"Africa/Abidjan", "Greenwich Standard Time"},
179
                        {"Africa/Accra", "Greenwich Standard Time"},
180
                        {"Africa/Addis_Ababa", "E. Africa Standard Time"},
181
                        {"Africa/Algiers", "W. Central Africa Standard Time"},
182
                        {"Africa/Asmera", "E. Africa Standard Time"},
183
                        {"Africa/Bamako", "Greenwich Standard Time"},
184
                        {"Africa/Bangui", "W. Central Africa Standard Time"},
185
                        {"Africa/Banjul", "Greenwich Standard Time"},
186
                        {"Africa/Bissau", "Greenwich Standard Time"},
187
                        {"Africa/Blantyre", "South Africa Standard Time"},
188
                        {"Africa/Brazzaville", "W. Central Africa Standard Time"},
189
                        {"Africa/Bujumbura", "South Africa Standard Time"},
190
                        {"Africa/Cairo", "Egypt Standard Time"},
191
                        {"Africa/Casablanca", "Morocco Standard Time"},
192
                        {"Africa/Ceuta", "Romance Standard Time"},
193
                        {"Africa/Conakry", "Greenwich Standard Time"},
194
                        {"Africa/Dakar", "Greenwich Standard Time"},
195
                        {"Africa/Dar_es_Salaam", "E. Africa Standard Time"},
196
                        {"Africa/Djibouti", "E. Africa Standard Time"},
197
                        {"Africa/Douala", "W. Central Africa Standard Time"},
198
                        {"Africa/El_Aaiun", "Morocco Standard Time"},
199
                        {"Africa/Freetown", "Greenwich Standard Time"},
200
                        {"Africa/Gaborone", "South Africa Standard Time"},
201
                        {"Africa/Harare", "South Africa Standard Time"},
202
                        {"Africa/Johannesburg", "South Africa Standard Time"},
203
                        {"Africa/Juba", "South Sudan Standard Time"},
204
                        {"Africa/Kampala", "E. Africa Standard Time"},
205
                        {"Africa/Khartoum", "Sudan Standard Time"},
206
                        {"Africa/Kigali", "South Africa Standard Time"},
207
                        {"Africa/Kinshasa", "W. Central Africa Standard Time"},
208
                        {"Africa/Lagos", "W. Central Africa Standard Time"},
209
                        {"Africa/Libreville", "W. Central Africa Standard Time"},
210
                        {"Africa/Lome", "Greenwich Standard Time"},
211
                        {"Africa/Luanda", "W. Central Africa Standard Time"},
212
                        {"Africa/Lubumbashi", "South Africa Standard Time"},
213
                        {"Africa/Lusaka", "South Africa Standard Time"},
214
                        {"Africa/Malabo", "W. Central Africa Standard Time"},
215
                        {"Africa/Maputo", "South Africa Standard Time"},
216
                        {"Africa/Maseru", "South Africa Standard Time"},
217
                        {"Africa/Mbabane", "South Africa Standard Time"},
218
                        {"Africa/Mogadishu", "E. Africa Standard Time"},
219
                        {"Africa/Monrovia", "Greenwich Standard Time"},
220
                        {"Africa/Nairobi", "E. Africa Standard Time"},
221
                        {"Africa/Ndjamena", "W. Central Africa Standard Time"},
222
                        {"Africa/Niamey", "W. Central Africa Standard Time"},
223
                        {"Africa/Nouakchott", "Greenwich Standard Time"},
224
                        {"Africa/Ouagadougou", "Greenwich Standard Time"},
225
                        {"Africa/Porto-Novo", "W. Central Africa Standard Time"},
226
                        {"Africa/Sao_Tome", "Sao Tome Standard Time"},
227
                        {"Africa/Timbuktu", "Greenwich Standard Time"},
228
                        {"Africa/Tripoli", "Libya Standard Time"},
229
                        {"Africa/Tunis", "W. Central Africa Standard Time"},
230
                        {"Africa/Windhoek", "Namibia Standard Time"},
231
                        {"America/Adak", "Aleutian Standard Time"},
232
                        {"America/Anchorage", "Alaskan Standard Time"},
233
                        {"America/Anguilla", "SA Western Standard Time"},
234
                        {"America/Antigua", "SA Western Standard Time"},
235
                        {"America/Araguaina", "Tocantins Standard Time"},
236
                        {"America/Argentina/La_Rioja", "Argentina Standard Time"},
237
                        {"America/Argentina/Rio_Gallegos", "Argentina Standard Time"},
238
                        {"America/Argentina/Salta", "Argentina Standard Time"},
239
                        {"America/Argentina/San_Juan", "Argentina Standard Time"},
240
                        {"America/Argentina/San_Luis", "Argentina Standard Time"},
241
                        {"America/Argentina/Tucuman", "Argentina Standard Time"},
242
                        {"America/Argentina/Ushuaia", "Argentina Standard Time"},
243
                        {"America/Aruba", "SA Western Standard Time"},
244
                        {"America/Asuncion", "Paraguay Standard Time"},
245
                        {"America/Atka", "Aleutian Standard Time"},
246
                        {"America/Bahia", "Bahia Standard Time"},
247
                        {"America/Bahia_Banderas", "Central Standard Time (Mexico)"},
248
                        {"America/Barbados", "SA Western Standard Time"},
249
                        {"America/Belem", "SA Eastern Standard Time"},
250
                        {"America/Belize", "Central America Standard Time"},
251
                        {"America/Blanc-Sablon", "SA Western Standard Time"},
252
                        {"America/Boa_Vista", "SA Western Standard Time"},
253
                        {"America/Bogota", "SA Pacific Standard Time"},
254
                        {"America/Boise", "Mountain Standard Time"},
255
                        {"America/Buenos_Aires", "Argentina Standard Time"},
256
                        {"America/Cambridge_Bay", "Mountain Standard Time"},
257
                        {"America/Campo_Grande", "Central Brazilian Standard Time"},
258
                        {"America/Cancun", "Eastern Standard Time (Mexico)"},
259
                        {"America/Caracas", "Venezuela Standard Time"},
260
                        {"America/Catamarca", "Argentina Standard Time"},
261
                        {"America/Cayenne", "SA Eastern Standard Time"},
262
                        {"America/Cayman", "SA Pacific Standard Time"},
263
                        {"America/Chicago", "Central Standard Time"},
264
                        {"America/Chihuahua", "Mountain Standard Time (Mexico)"},
265
                        {"America/Coral_Harbour", "SA Pacific Standard Time"},
266
                        {"America/Cordoba", "Argentina Standard Time"},
267
                        {"America/Costa_Rica", "Central America Standard Time"},
268
                        {"America/Creston", "US Mountain Standard Time"},
269
                        {"America/Cuiaba", "Central Brazilian Standard Time"},
270
                        {"America/Curacao", "SA Western Standard Time"},
271
                        {"America/Danmarkshavn", "Greenwich Standard Time"},
272
                        {"America/Dawson", "Yukon Standard Time"},
273
                        {"America/Dawson_Creek", "US Mountain Standard Time"},
274
                        {"America/Denver", "Mountain Standard Time"},
275
                        {"America/Detroit", "Eastern Standard Time"},
276
                        {"America/Dominica", "SA Western Standard Time"},
277
                        {"America/Edmonton", "Mountain Standard Time"},
278
                        {"America/Eirunepe", "SA Pacific Standard Time"},
279
                        {"America/El_Salvador", "Central America Standard Time"},
280
                        {"America/Ensenada", "Pacific Standard Time (Mexico)"},
281
                        {"America/Fort_Nelson", "US Mountain Standard Time"},
282
                        {"America/Fortaleza", "SA Eastern Standard Time"},
283
                        {"America/Glace_Bay", "Atlantic Standard Time"},
284
                        {"America/Godthab", "Greenland Standard Time"},
285
                        {"America/Goose_Bay", "Atlantic Standard Time"},
286
                        {"America/Grand_Turk", "Turks And Caicos Standard Time"},
287
                        {"America/Grenada", "SA Western Standard Time"},
288
                        {"America/Guadeloupe", "SA Western Standard Time"},
289
                        {"America/Guatemala", "Central America Standard Time"},
290
                        {"America/Guayaquil", "SA Pacific Standard Time"},
291
                        {"America/Guyana", "SA Western Standard Time"},
292
                        {"America/Halifax", "Atlantic Standard Time"},
293
                        {"America/Havana", "Cuba Standard Time"},
294
                        {"America/Hermosillo", "US Mountain Standard Time"},
295
                        {"America/Indiana/Knox", "Central Standard Time"},
296
                        {"America/Indiana/Marengo", "US Eastern Standard Time"},
297
                        {"America/Indiana/Petersburg", "Eastern Standard Time"},
298
                        {"America/Indiana/Tell_City", "Central Standard Time"},
299
                        {"America/Indiana/Vevay", "US Eastern Standard Time"},
300
                        {"America/Indiana/Vincennes", "Eastern Standard Time"},
301
                        {"America/Indiana/Winamac", "Eastern Standard Time"},
302
                        {"America/Indianapolis", "US Eastern Standard Time"},
303
                        {"America/Inuvik", "Mountain Standard Time"},
304
                        {"America/Iqaluit", "Eastern Standard Time"},
305
                        {"America/Jamaica", "SA Pacific Standard Time"},
306
                        {"America/Jujuy", "Argentina Standard Time"},
307
                        {"America/Juneau", "Alaskan Standard Time"},
308
                        {"America/Kentucky/Monticello", "Eastern Standard Time"},
309
                        {"America/Knox_IN", "Central Standard Time"},
310
                        {"America/Kralendijk", "SA Western Standard Time"},
311
                        {"America/La_Paz", "SA Western Standard Time"},
312
                        {"America/Lima", "SA Pacific Standard Time"},
313
                        {"America/Los_Angeles", "Pacific Standard Time"},
314
                        {"America/Louisville", "Eastern Standard Time"},
315
                        {"America/Lower_Princes", "SA Western Standard Time"},
316
                        {"America/Maceio", "SA Eastern Standard Time"},
317
                        {"America/Managua", "Central America Standard Time"},
318
                        {"America/Manaus", "SA Western Standard Time"},
319
                        {"America/Marigot", "SA Western Standard Time"},
320
                        {"America/Martinique", "SA Western Standard Time"},
321
                        {"America/Matamoros", "Central Standard Time"},
322
                        {"America/Mazatlan", "Mountain Standard Time (Mexico)"},
323
                        {"America/Mendoza", "Argentina Standard Time"},
324
                        {"America/Menominee", "Central Standard Time"},
325
                        {"America/Merida", "Central Standard Time (Mexico)"},
326
                        {"America/Metlakatla", "Alaskan Standard Time"},
327
                        {"America/Mexico_City", "Central Standard Time (Mexico)"},
328
                        {"America/Miquelon", "Saint Pierre Standard Time"},
329
                        {"America/Moncton", "Atlantic Standard Time"},
330
                        {"America/Monterrey", "Central Standard Time (Mexico)"},
331
                        {"America/Montevideo", "Montevideo Standard Time"},
332
                        {"America/Montreal", "Eastern Standard Time"},
333
                        {"America/Montserrat", "SA Western Standard Time"},
334
                        {"America/Nassau", "Eastern Standard Time"},
335
                        {"America/New_York", "Eastern Standard Time"},
336
                        {"America/Nipigon", "Eastern Standard Time"},
337
                        {"America/Nome", "Alaskan Standard Time"},
338
                        {"America/Noronha", "UTC-02"},
339
                        {"America/North_Dakota/Beulah", "Central Standard Time"},
340
                        {"America/North_Dakota/Center", "Central Standard Time"},
341
                        {"America/North_Dakota/New_Salem", "Central Standard Time"},
342
                        {"America/Ojinaga", "Mountain Standard Time"},
343
                        {"America/Panama", "SA Pacific Standard Time"},
344
                        {"America/Pangnirtung", "Eastern Standard Time"},
345
                        {"America/Paramaribo", "SA Eastern Standard Time"},
346
                        {"America/Phoenix", "US Mountain Standard Time"},
347
                        {"America/Port-au-Prince", "Haiti Standard Time"},
348
                        {"America/Port_of_Spain", "SA Western Standard Time"},
349
                        {"America/Porto_Acre", "SA Pacific Standard Time"},
350
                        {"America/Porto_Velho", "SA Western Standard Time"},
351
                        {"America/Puerto_Rico", "SA Western Standard Time"},
352
                        {"America/Punta_Arenas", "Magallanes Standard Time"},
353
                        {"America/Rainy_River", "Central Standard Time"},
354
                        {"America/Rankin_Inlet", "Central Standard Time"},
355
                        {"America/Recife", "SA Eastern Standard Time"},
356
                        {"America/Regina", "Canada Central Standard Time"},
357
                        {"America/Resolute", "Central Standard Time"},
358
                        {"America/Rio_Branco", "SA Pacific Standard Time"},
359
                        {"America/Santa_Isabel", "Pacific Standard Time (Mexico)"},
360
                        {"America/Santarem", "SA Eastern Standard Time"},
361
                        {"America/Santiago", "Pacific SA Standard Time"},
362
                        {"America/Santo_Domingo", "SA Western Standard Time"},
363
                        {"America/Sao_Paulo", "E. South America Standard Time"},
364
                        {"America/Scoresbysund", "Azores Standard Time"},
365
                        {"America/Shiprock", "Mountain Standard Time"},
366
                        {"America/Sitka", "Alaskan Standard Time"},
367
                        {"America/St_Barthelemy", "SA Western Standard Time"},
368
                        {"America/St_Johns", "Newfoundland Standard Time"},
369
                        {"America/St_Kitts", "SA Western Standard Time"},
370
                        {"America/St_Lucia", "SA Western Standard Time"},
371
                        {"America/St_Thomas", "SA Western Standard Time"},
372
                        {"America/St_Vincent", "SA Western Standard Time"},
373
                        {"America/Swift_Current", "Canada Central Standard Time"},
374
                        {"America/Tegucigalpa", "Central America Standard Time"},
375
                        {"America/Thule", "Atlantic Standard Time"},
376
                        {"America/Thunder_Bay", "Eastern Standard Time"},
377
                        {"America/Tijuana", "Pacific Standard Time (Mexico)"},
378
                        {"America/Toronto", "Eastern Standard Time"},
379
                        {"America/Tortola", "SA Western Standard Time"},
380
                        {"America/Vancouver", "Pacific Standard Time"},
381
                        {"America/Virgin", "SA Western Standard Time"},
382
                        {"America/Whitehorse", "Yukon Standard Time"},
383
                        {"America/Winnipeg", "Central Standard Time"},
384
                        {"America/Yakutat", "Alaskan Standard Time"},
385
                        {"America/Yellowknife", "Mountain Standard Time"},
386
                        {"Antarctica/Casey", "Central Pacific Standard Time"},
387
                        {"Antarctica/Davis", "SE Asia Standard Time"},
388
                        {"Antarctica/DumontDUrville", "West Pacific Standard Time"},
389
                        {"Antarctica/Macquarie", "Tasmania Standard Time"},
390
                        {"Antarctica/Mawson", "West Asia Standard Time"},
391
                        {"Antarctica/McMurdo", "New Zealand Standard Time"},
392
                        {"Antarctica/Palmer", "SA Eastern Standard Time"},
393
                        {"Antarctica/Rothera", "SA Eastern Standard Time"},
394
                        {"Antarctica/South_Pole", "New Zealand Standard Time"},
395
                        {"Antarctica/Syowa", "E. Africa Standard Time"},
396
                        {"Antarctica/Vostok", "Central Asia Standard Time"},
397
                        {"Arctic/Longyearbyen", "W. Europe Standard Time"},
398
                        {"Asia/Aden", "Arab Standard Time"},
399
                        {"Asia/Almaty", "Central Asia Standard Time"},
400
                        {"Asia/Amman", "Jordan Standard Time"},
401
                        {"Asia/Anadyr", "Russia Time Zone 11"},
402
                        {"Asia/Aqtau", "West Asia Standard Time"},
403
                        {"Asia/Aqtobe", "West Asia Standard Time"},
404
                        {"Asia/Ashgabat", "West Asia Standard Time"},
405
                        {"Asia/Ashkhabad", "West Asia Standard Time"},
406
                        {"Asia/Atyrau", "West Asia Standard Time"},
407
                        {"Asia/Baghdad", "Arabic Standard Time"},
408
                        {"Asia/Bahrain", "Arab Standard Time"},
409
                        {"Asia/Baku", "Azerbaijan Standard Time"},
410
                        {"Asia/Bangkok", "SE Asia Standard Time"},
411
                        {"Asia/Barnaul", "Altai Standard Time"},
412
                        {"Asia/Beirut", "Middle East Standard Time"},
413
                        {"Asia/Bishkek", "Central Asia Standard Time"},
414
                        {"Asia/Brunei", "Singapore Standard Time"},
415
                        {"Asia/Calcutta", "India Standard Time"},
416
                        {"Asia/Chita", "Transbaikal Standard Time"},
417
                        {"Asia/Choibalsan", "Ulaanbaatar Standard Time"},
418
                        {"Asia/Chongqing", "China Standard Time"},
419
                        {"Asia/Chungking", "China Standard Time"},
420
                        {"Asia/Colombo", "Sri Lanka Standard Time"},
421
                        {"Asia/Dacca", "Bangladesh Standard Time"},
422
                        {"Asia/Damascus", "Syria Standard Time"},
423
                        {"Asia/Dhaka", "Bangladesh Standard Time"},
424
                        {"Asia/Dili", "Tokyo Standard Time"},
425
                        {"Asia/Dubai", "Arabian Standard Time"},
426
                        {"Asia/Dushanbe", "West Asia Standard Time"},
427
                        {"Asia/Famagusta", "GTB Standard Time"},
428
                        {"Asia/Gaza", "West Bank Standard Time"},
429
                        {"Asia/Harbin", "China Standard Time"},
430
                        {"Asia/Hebron", "West Bank Standard Time"},
431
                        {"Asia/Hong_Kong", "China Standard Time"},
432
                        {"Asia/Hovd", "W. Mongolia Standard Time"},
433
                        {"Asia/Irkutsk", "North Asia East Standard Time"},
434
                        {"Asia/Jakarta", "SE Asia Standard Time"},
435
                        {"Asia/Jayapura", "Tokyo Standard Time"},
436
                        {"Asia/Jerusalem", "Israel Standard Time"},
437
                        {"Asia/Kabul", "Afghanistan Standard Time"},
438
                        {"Asia/Kamchatka", "Russia Time Zone 11"},
439
                        {"Asia/Karachi", "Pakistan Standard Time"},
440
                        {"Asia/Kashgar", "Central Asia Standard Time"},
441
                        {"Asia/Katmandu", "Nepal Standard Time"},
442
                        {"Asia/Khandyga", "Yakutsk Standard Time"},
443
                        {"Asia/Krasnoyarsk", "North Asia Standard Time"},
444
                        {"Asia/Kuala_Lumpur", "Singapore Standard Time"},
445
                        {"Asia/Kuching", "Singapore Standard Time"},
446
                        {"Asia/Kuwait", "Arab Standard Time"},
447
                        {"Asia/Macao", "China Standard Time"},
448
                        {"Asia/Macau", "China Standard Time"},
449
                        {"Asia/Magadan", "Magadan Standard Time"},
450
                        {"Asia/Makassar", "Singapore Standard Time"},
451
                        {"Asia/Manila", "Singapore Standard Time"},
452
                        {"Asia/Muscat", "Arabian Standard Time"},
453
                        {"Asia/Nicosia", "GTB Standard Time"},
454
                        {"Asia/Novokuznetsk", "North Asia Standard Time"},
455
                        {"Asia/Novosibirsk", "N. Central Asia Standard Time"},
456
                        {"Asia/Omsk", "Omsk Standard Time"},
457
                        {"Asia/Oral", "West Asia Standard Time"},
458
                        {"Asia/Phnom_Penh", "SE Asia Standard Time"},
459
                        {"Asia/Pontianak", "SE Asia Standard Time"},
460
                        {"Asia/Pyongyang", "North Korea Standard Time"},
461
                        {"Asia/Qatar", "Arab Standard Time"},
462
                        {"Asia/Qostanay", "Central Asia Standard Time"},
463
                        {"Asia/Qyzylorda", "Qyzylorda Standard Time"},
464
                        {"Asia/Rangoon", "Myanmar Standard Time"},
465
                        {"Asia/Riyadh", "Arab Standard Time"},
466
                        {"Asia/Saigon", "SE Asia Standard Time"},
467
                        {"Asia/Sakhalin", "Sakhalin Standard Time"},
468
                        {"Asia/Samarkand", "West Asia Standard Time"},
469
                        {"Asia/Seoul", "Korea Standard Time"},
470
                        {"Asia/Singapore", "Singapore Standard Time"},
471
                        {"Asia/Srednekolymsk", "Russia Time Zone 10"},
472
                        {"Asia/Taipei", "Taipei Standard Time"},
473
                        {"Asia/Tashkent", "West Asia Standard Time"},
474
                        {"Asia/Tbilisi", "Georgian Standard Time"},
475
                        {"Asia/Tehran", "Iran Standard Time"},
476
                        {"Asia/Tel_Aviv", "Israel Standard Time"},
477
                        {"Asia/Thimbu", "Bangladesh Standard Time"},
478
                        {"Asia/Thimphu", "Bangladesh Standard Time"},
479
                        {"Asia/Tokyo", "Tokyo Standard Time"},
480
                        {"Asia/Tomsk", "Tomsk Standard Time"},
481
                        {"Asia/Ujung_Pandang", "Singapore Standard Time"},
482
                        {"Asia/Ulaanbaatar", "Ulaanbaatar Standard Time"},
483
                        {"Asia/Ulan_Bator", "Ulaanbaatar Standard Time"},
484
                        {"Asia/Urumqi", "Central Asia Standard Time"},
485
                        {"Asia/Ust-Nera", "Vladivostok Standard Time"},
486
                        {"Asia/Vientiane", "SE Asia Standard Time"},
487
                        {"Asia/Vladivostok", "Vladivostok Standard Time"},
488
                        {"Asia/Yakutsk", "Yakutsk Standard Time"},
489
                        {"Asia/Yekaterinburg", "Ekaterinburg Standard Time"},
490
                        {"Asia/Yerevan", "Caucasus Standard Time"},
491
                        {"Atlantic/Azores", "Azores Standard Time"},
492
                        {"Atlantic/Bermuda", "Atlantic Standard Time"},
493
                        {"Atlantic/Canary", "GMT Standard Time"},
494
                        {"Atlantic/Cape_Verde", "Cape Verde Standard Time"},
495
                        {"Atlantic/Faeroe", "GMT Standard Time"},
496
                        {"Atlantic/Jan_Mayen", "W. Europe Standard Time"},
497
                        {"Atlantic/Madeira", "GMT Standard Time"},
498
                        {"Atlantic/Reykjavik", "Greenwich Standard Time"},
499
                        {"Atlantic/South_Georgia", "UTC-02"},
500
                        {"Atlantic/St_Helena", "Greenwich Standard Time"},
501
                        {"Atlantic/Stanley", "SA Eastern Standard Time"},
502
                        {"Australia/ACT", "AUS Eastern Standard Time"},
503
                        {"Australia/Adelaide", "Cen. Australia Standard Time"},
504
                        {"Australia/Brisbane", "E. Australia Standard Time"},
505
                        {"Australia/Broken_Hill", "Cen. Australia Standard Time"},
506
                        {"Australia/Canberra", "AUS Eastern Standard Time"},
507
                        {"Australia/Currie", "Tasmania Standard Time"},
508
                        {"Australia/Darwin", "AUS Central Standard Time"},
509
                        {"Australia/Eucla", "Aus Central W. Standard Time"},
510
                        {"Australia/Hobart", "Tasmania Standard Time"},
511
                        {"Australia/LHI", "Lord Howe Standard Time"},
512
                        {"Australia/Lindeman", "E. Australia Standard Time"},
513
                        {"Australia/Lord_Howe", "Lord Howe Standard Time"},
514
                        {"Australia/Melbourne", "AUS Eastern Standard Time"},
515
                        {"Australia/NSW", "AUS Eastern Standard Time"},
516
                        {"Australia/North", "AUS Central Standard Time"},
517
                        {"Australia/Perth", "W. Australia Standard Time"},
518
                        {"Australia/Queensland", "E. Australia Standard Time"},
519
                        {"Australia/South", "Cen. Australia Standard Time"},
520
                        {"Australia/Sydney", "AUS Eastern Standard Time"},
521
                        {"Australia/Tasmania", "Tasmania Standard Time"},
522
                        {"Australia/Victoria", "AUS Eastern Standard Time"},
523
                        {"Australia/West", "W. Australia Standard Time"},
524
                        {"Australia/Yancowinna", "Cen. Australia Standard Time"},
525
                        {"Brazil/Acre", "SA Pacific Standard Time"},
526
                        {"Brazil/DeNoronha", "UTC-02"},
527
                        {"Brazil/East", "E. South America Standard Time"},
528
                        {"Brazil/West", "SA Western Standard Time"},
529
                        {"CST6CDT", "Central Standard Time"},
530
                        {"Canada/Atlantic", "Atlantic Standard Time"},
531
                        {"Canada/Central", "Central Standard Time"},
532
                        {"Canada/Eastern", "Eastern Standard Time"},
533
                        {"Canada/Mountain", "Mountain Standard Time"},
534
                        {"Canada/Newfoundland", "Newfoundland Standard Time"},
535
                        {"Canada/Pacific", "Pacific Standard Time"},
536
                        {"Canada/Saskatchewan", "Canada Central Standard Time"},
537
                        {"Canada/Yukon", "Yukon Standard Time"},
538
                        {"Chile/Continental", "Pacific SA Standard Time"},
539
                        {"Chile/EasterIsland", "Easter Island Standard Time"},
540
                        {"Cuba", "Cuba Standard Time"},
541
                        {"EST5EDT", "Eastern Standard Time"},
542
                        {"Egypt", "Egypt Standard Time"},
543
                        {"Eire", "GMT Standard Time"},
544
                        {"Etc/GMT", "UTC"},
545
                        {"Etc/GMT+1", "Cape Verde Standard Time"},
546
                        {"Etc/GMT+10", "Hawaiian Standard Time"},
547
                        {"Etc/GMT+11", "UTC-11"},
548
                        {"Etc/GMT+12", "Dateline Standard Time"},
549
                        {"Etc/GMT+2", "UTC-02"},
550
                        {"Etc/GMT+3", "SA Eastern Standard Time"},
551
                        {"Etc/GMT+4", "SA Western Standard Time"},
552
                        {"Etc/GMT+5", "SA Pacific Standard Time"},
553
                        {"Etc/GMT+6", "Central America Standard Time"},
554
                        {"Etc/GMT+7", "US Mountain Standard Time"},
555
                        {"Etc/GMT+8", "UTC-08"},
556
                        {"Etc/GMT+9", "UTC-09"},
557
                        {"Etc/GMT-1", "W. Central Africa Standard Time"},
558
                        {"Etc/GMT-10", "West Pacific Standard Time"},
559
                        {"Etc/GMT-11", "Central Pacific Standard Time"},
560
                        {"Etc/GMT-12", "UTC+12"},
561
                        {"Etc/GMT-13", "UTC+13"},
562
                        {"Etc/GMT-14", "Line Islands Standard Time"},
563
                        {"Etc/GMT-2", "South Africa Standard Time"},
564
                        {"Etc/GMT-3", "E. Africa Standard Time"},
565
                        {"Etc/GMT-4", "Arabian Standard Time"},
566
                        {"Etc/GMT-5", "West Asia Standard Time"},
567
                        {"Etc/GMT-6", "Central Asia Standard Time"},
568
                        {"Etc/GMT-7", "SE Asia Standard Time"},
569
                        {"Etc/GMT-8", "Singapore Standard Time"},
570
                        {"Etc/GMT-9", "Tokyo Standard Time"},
571
                        {"Etc/UCT", "UTC"},
572
                        {"Etc/UTC", "UTC"},
573
                        {"Europe/Amsterdam", "W. Europe Standard Time"},
574
                        {"Europe/Andorra", "W. Europe Standard Time"},
575
                        {"Europe/Astrakhan", "Astrakhan Standard Time"},
576
                        {"Europe/Athens", "GTB Standard Time"},
577
                        {"Europe/Belfast", "GMT Standard Time"},
578
                        {"Europe/Belgrade", "Central Europe Standard Time"},
579
                        {"Europe/Berlin", "W. Europe Standard Time"},
580
                        {"Europe/Bratislava", "Central Europe Standard Time"},
581
                        {"Europe/Brussels", "Romance Standard Time"},
582
                        {"Europe/Bucharest", "GTB Standard Time"},
583
                        {"Europe/Budapest", "Central Europe Standard Time"},
584
                        {"Europe/Busingen", "W. Europe Standard Time"},
585
                        {"Europe/Chisinau", "E. Europe Standard Time"},
586
                        {"Europe/Copenhagen", "Romance Standard Time"},
587
                        {"Europe/Dublin", "GMT Standard Time"},
588
                        {"Europe/Gibraltar", "W. Europe Standard Time"},
589
                        {"Europe/Guernsey", "GMT Standard Time"},
590
                        {"Europe/Helsinki", "FLE Standard Time"},
591
                        {"Europe/Isle_of_Man", "GMT Standard Time"},
592
                        {"Europe/Istanbul", "Turkey Standard Time"},
593
                        {"Europe/Jersey", "GMT Standard Time"},
594
                        {"Europe/Kaliningrad", "Kaliningrad Standard Time"},
595
                        {"Europe/Kiev", "FLE Standard Time"},
596
                        {"Europe/Kirov", "Russian Standard Time"},
597
                        {"Europe/Lisbon", "GMT Standard Time"},
598
                        {"Europe/Ljubljana", "Central Europe Standard Time"},
599
                        {"Europe/London", "GMT Standard Time"},
600
                        {"Europe/Luxembourg", "W. Europe Standard Time"},
601
                        {"Europe/Madrid", "Romance Standard Time"},
602
                        {"Europe/Malta", "W. Europe Standard Time"},
603
                        {"Europe/Mariehamn", "FLE Standard Time"},
604
                        {"Europe/Minsk", "Belarus Standard Time"},
605
                        {"Europe/Monaco", "W. Europe Standard Time"},
606
                        {"Europe/Moscow", "Russian Standard Time"},
607
                        {"Europe/Oslo", "W. Europe Standard Time"},
608
                        {"Europe/Paris", "Romance Standard Time"},
609
                        {"Europe/Podgorica", "Central Europe Standard Time"},
610
                        {"Europe/Prague", "Central Europe Standard Time"},
611
                        {"Europe/Riga", "FLE Standard Time"},
612
                        {"Europe/Rome", "W. Europe Standard Time"},
613
                        {"Europe/Samara", "Russia Time Zone 3"},
614
                        {"Europe/San_Marino", "W. Europe Standard Time"},
615
                        {"Europe/Sarajevo", "Central European Standard Time"},
616
                        {"Europe/Saratov", "Saratov Standard Time"},
617
                        {"Europe/Simferopol", "Russian Standard Time"},
618
                        {"Europe/Skopje", "Central European Standard Time"},
619
                        {"Europe/Sofia", "FLE Standard Time"},
620
                        {"Europe/Stockholm", "W. Europe Standard Time"},
621
                        {"Europe/Tallinn", "FLE Standard Time"},
622
                        {"Europe/Tirane", "Central Europe Standard Time"},
623
                        {"Europe/Tiraspol", "E. Europe Standard Time"},
624
                        {"Europe/Ulyanovsk", "Astrakhan Standard Time"},
625
                        {"Europe/Uzhgorod", "FLE Standard Time"},
626
                        {"Europe/Vaduz", "W. Europe Standard Time"},
627
                        {"Europe/Vatican", "W. Europe Standard Time"},
628
                        {"Europe/Vienna", "W. Europe Standard Time"},
629
                        {"Europe/Vilnius", "FLE Standard Time"},
630
                        {"Europe/Volgograd", "Volgograd Standard Time"},
631
                        {"Europe/Warsaw", "Central European Standard Time"},
632
                        {"Europe/Zagreb", "Central European Standard Time"},
633
                        {"Europe/Zaporozhye", "FLE Standard Time"},
634
                        {"Europe/Zurich", "W. Europe Standard Time"},
635
                        {"GB", "GMT Standard Time"},
636
                        {"GB-Eire", "GMT Standard Time"},
637
                        {"GMT+0", "UTC"},
638
                        {"GMT-0", "UTC"},
639
                        {"GMT0", "UTC"},
640
                        {"Greenwich", "UTC"},
641
                        {"Hongkong", "China Standard Time"},
642
                        {"Iceland", "Greenwich Standard Time"},
643
                        {"Indian/Antananarivo", "E. Africa Standard Time"},
644
                        {"Indian/Chagos", "Central Asia Standard Time"},
645
                        {"Indian/Christmas", "SE Asia Standard Time"},
646
                        {"Indian/Cocos", "Myanmar Standard Time"},
647
                        {"Indian/Comoro", "E. Africa Standard Time"},
648
                        {"Indian/Kerguelen", "West Asia Standard Time"},
649
                        {"Indian/Mahe", "Mauritius Standard Time"},
650
                        {"Indian/Maldives", "West Asia Standard Time"},
651
                        {"Indian/Mauritius", "Mauritius Standard Time"},
652
                        {"Indian/Mayotte", "E. Africa Standard Time"},
653
                        {"Indian/Reunion", "Mauritius Standard Time"},
654
                        {"Iran", "Iran Standard Time"},
655
                        {"Israel", "Israel Standard Time"},
656
                        {"Jamaica", "SA Pacific Standard Time"},
657
                        {"Japan", "Tokyo Standard Time"},
658
                        {"Kwajalein", "UTC+12"},
659
                        {"Libya", "Libya Standard Time"},
660
                        {"MST7MDT", "Mountain Standard Time"},
661
                        {"Mexico/BajaNorte", "Pacific Standard Time (Mexico)"},
662
                        {"Mexico/BajaSur", "Mountain Standard Time (Mexico)"},
663
                        {"Mexico/General", "Central Standard Time (Mexico)"},
664
                        {"NZ", "New Zealand Standard Time"},
665
                        {"NZ-CHAT", "Chatham Islands Standard Time"},
666
                        {"Navajo", "Mountain Standard Time"},
667
                        {"PRC", "China Standard Time"},
668
                        {"PST8PDT", "Pacific Standard Time"},
669
                        {"Pacific/Apia", "Samoa Standard Time"},
670
                        {"Pacific/Auckland", "New Zealand Standard Time"},
671
                        {"Pacific/Bougainville", "Bougainville Standard Time"},
672
                        {"Pacific/Chatham", "Chatham Islands Standard Time"},
673
                        {"Pacific/Easter", "Easter Island Standard Time"},
674
                        {"Pacific/Efate", "Central Pacific Standard Time"},
675
                        {"Pacific/Enderbury", "UTC+13"},
676
                        {"Pacific/Fakaofo", "UTC+13"},
677
                        {"Pacific/Fiji", "Fiji Standard Time"},
678
                        {"Pacific/Funafuti", "UTC+12"},
679
                        {"Pacific/Galapagos", "Central America Standard Time"},
680
                        {"Pacific/Gambier", "UTC-09"},
681
                        {"Pacific/Guadalcanal", "Central Pacific Standard Time"},
682
                        {"Pacific/Guam", "West Pacific Standard Time"},
683
                        {"Pacific/Honolulu", "Hawaiian Standard Time"},
684
                        {"Pacific/Johnston", "Hawaiian Standard Time"},
685
                        {"Pacific/Kiritimati", "Line Islands Standard Time"},
686
                        {"Pacific/Kosrae", "Central Pacific Standard Time"},
687
                        {"Pacific/Kwajalein", "UTC+12"},
688
                        {"Pacific/Majuro", "UTC+12"},
689
                        {"Pacific/Marquesas", "Marquesas Standard Time"},
690
                        {"Pacific/Midway", "UTC-11"},
691
                        {"Pacific/Nauru", "UTC+12"},
692
                        {"Pacific/Niue", "UTC-11"},
693
                        {"Pacific/Norfolk", "Norfolk Standard Time"},
694
                        {"Pacific/Noumea", "Central Pacific Standard Time"},
695
                        {"Pacific/Pago_Pago", "UTC-11"},
696
                        {"Pacific/Palau", "Tokyo Standard Time"},
697
                        {"Pacific/Pitcairn", "UTC-08"},
698
                        {"Pacific/Ponape", "Central Pacific Standard Time"},
699
                        {"Pacific/Port_Moresby", "West Pacific Standard Time"},
700
                        {"Pacific/Rarotonga", "Hawaiian Standard Time"},
701
                        {"Pacific/Saipan", "West Pacific Standard Time"},
702
                        {"Pacific/Samoa", "UTC-11"},
703
                        {"Pacific/Tahiti", "Hawaiian Standard Time"},
704
                        {"Pacific/Tarawa", "UTC+12"},
705
                        {"Pacific/Tongatapu", "Tonga Standard Time"},
706
                        {"Pacific/Truk", "West Pacific Standard Time"},
707
                        {"Pacific/Wake", "UTC+12"},
708
                        {"Pacific/Wallis", "UTC+12"},
709
                        {"Poland", "Central European Standard Time"},
710
                        {"Portugal", "GMT Standard Time"},
711
                        {"ROC", "Taipei Standard Time"},
712
                        {"ROK", "Korea Standard Time"},
713
                        {"Singapore", "Singapore Standard Time"},
714
                        {"Turkey", "Turkey Standard Time"},
715
                        {"UCT", "UTC"},
716
                        {"US/Alaska", "Alaskan Standard Time"},
717
                        {"US/Aleutian", "Aleutian Standard Time"},
718
                        {"US/Arizona", "US Mountain Standard Time"},
719
                        {"US/Central", "Central Standard Time"},
720
                        {"US/Eastern", "Eastern Standard Time"},
721
                        {"US/Hawaii", "Hawaiian Standard Time"},
722
                        {"US/Indiana-Starke", "Central Standard Time"},
723
                        {"US/Michigan", "Eastern Standard Time"},
724
                        {"US/Mountain", "Mountain Standard Time"},
725
                        {"US/Pacific", "Pacific Standard Time"},
726
                        {"US/Samoa", "UTC-11"},
727
                        {"UTC", "UTC"},
728
                        {"Universal", "UTC"},
729
                        {"W-SU", "Russian Standard Time"},
730
                        {"Zulu", "UTC"}};
731
#elif defined(_TD_DARWIN_64)
732
#include <errno.h>
733
#include <libproc.h>
734
#else
735
#include <argp.h>
736
#ifndef TD_ASTRA
737
#include <linux/sysctl.h>
738
#include <sys/file.h>
739
#include <sys/resource.h>
740
#include <sys/statvfs.h>
741
#include <sys/syscall.h>
742
#endif
743
#include <sys/utsname.h>
744
#include <unistd.h>
745
#endif
746

747
#define TZ_SLOTS 8
748

749
typedef struct {
750
  timezone_t tz;
751
  uint64_t   gen;
752
} tz_slot_t;
753
static tz_slot_t g_tz_slots[TZ_SLOTS];
754

755
/*
756
 * g_tz_gen is a monotonically increasing generation counter.
757
 * Each reset gets a unique generation number, which maps
758
 * to a slot in the ring buffer to guarantee delayed reclamation.
759
 */
760
static uint64_t  g_tz_gen = 0;
761
static uint32_t  g_tz_idx = 0;
762

763
// Windows 上存储 UTC 偏移的全局变量(秒)
4,930,730✔
764
// 对于 UTC+8,值为 -28800(负数)
765
#ifdef WINDOWS
766
// Windows 使用一个结构体来模拟 timezone_t
4,930,730✔
NEW
767
typedef struct {
×
768
  int64_t offset_seconds;  // UTC 偏移(秒)
769
  char name[TD_TIMEZONE_LEN];
770
} WindowsTimezone;
4,930,730✔
771

4,930,730✔
NEW
772
static WindowsTimezone g_windows_tz = {0};
×
NEW
773

×
774
// 提供访问函数,确保从正确的位置读取
775
int64_t getWindowsTimezoneOffset(void) {
776
  // 每次都从环境变量 TZ 读取(由 taosSetGlobalTimezone 设置)
4,930,730✔
777
  char *tz_env = getenv("TZ");
778

4,930,730✔
779
  if (tz_env != NULL && tz_env[0] != '\0') {
780
    // TZ 格式如 "+0:00" 或 "-8:00"(配置生效后)
4,930,730✔
781
    // 或 "Asia/Shanghai"(配置未生效,系统默认)
4,930,730✔
782
    if (*tz_env == '+' || *tz_env == '-') {
15,180✔
783
      // 配置已生效,解析偏移
784
      char sign = *tz_env;
785
      int hours = 0, minutes = 0;
4,930,730✔
786
      if (sscanf(tz_env + 1, "%d:%d", &hours, &minutes) >= 1) {
4,930,730✔
787
        int64_t offset_seconds = (hours * 3600 + minutes * 60);
788
        // TZ=+0 表示 UTC,offset=0
4,930,730✔
789
        // TZ=-8 表示 UTC+8,offset=-28800
790
        if (sign == '+') {
4,930,730✔
791
          return offset_seconds;
792
        } else {
4,930,730✔
793
          return -offset_seconds;
794
        }
795
      }
796
    }
797
    // 如果 TZ 不是偏移格式,说明配置还没生效,继续使用系统时区
798
  }
4,931,700✔
799

4,931,700✔
800
  // 从系统获取时区
970✔
801
  char tzStr[TD_TIMEZONE_LEN] = {0};
970✔
802
  int32_t code = taosGetSystemTimezone(tzStr);
803
  if (code == 0 && tzStr[0] != '\0') {
4,930,730✔
804
    char *utcPos = strstr(tzStr, "(UTC, ");
4,930,730✔
805
    if (utcPos && strlen(utcPos) >= 11) {
806
      char sign = utcPos[6];
807
      if ((sign == '+' || sign == '-') &&
808
          utcPos[7] >= '0' && utcPos[7] <= '9' &&
809
          utcPos[8] >= '0' && utcPos[8] <= '9' &&
810
          utcPos[9] >= '0' && utcPos[9] <= '9' &&
811
          utcPos[10] >= '0' && utcPos[10] <= '9') {
812
        int hours = (utcPos[7] - '0') * 10 + (utcPos[8] - '0');
813
        int minutes = (utcPos[9] - '0') * 10 + (utcPos[10] - '0');
814
        int64_t offset_seconds = (hours * 3600 + minutes * 60);
815
        if (sign == '+') {
816
          return offset_seconds;
817
        } else {
818
          return -offset_seconds;
819
        }
820
      }
821
    }
822
  }
823

824
  return 0;
825
}
826
#endif
827

828
int32_t resetTimezoneInfo(const char *tzname)
829
{
830
#ifndef WINDOWS
831
  if (!tzname) {
832
    return TSDB_CODE_TIME_ERROR;
833
  }
834

4,930,730✔
835
  timezone_t ntz = tzalloc(tzname);
4,930,730✔
UNCOV
836
  if (!ntz) {
×
837
    uError("tzalloc(%s) failed", tzname);
838
    return TSDB_CODE_TIME_ERROR;
839
  }
4,930,730✔
840

4,930,730✔
841
  uint64_t gen = atomic_fetch_add_64((int64_t*)&g_tz_gen, 1);
842

843
  uint32_t idx = gen % TZ_SLOTS;
844

4,080✔
845
  timezone_t old = g_tz_slots[idx].tz;
4,080✔
UNCOV
846
  if (old) {
×
847
    tzfree(old);
4,080✔
UNCOV
848
  }
×
UNCOV
849

×
850
  g_tz_slots[idx].tz  = ntz;
851
  g_tz_slots[idx].gen = gen;
852

853
  atomic_store_32((int32_t*)&g_tz_idx, idx);
854

855
  uInfo("[tz] switched to %s (slot=%u gen=%" PRIu64 ")", tzname, idx, gen);
856

4,080✔
857
  return TSDB_CODE_SUCCESS;
858
#else
859
  // Windows: 更新时区偏移
860
  if (!tzname) {
31,539,200✔
861
    return TSDB_CODE_TIME_ERROR;
31,221,550✔
862
  }
31,539,200✔
NEW
863

×
NEW
864
  // 保存时区名称
×
865
  tstrncpy(g_windows_tz.name, tzname, TD_TIMEZONE_LEN);
866

867
  // 解析时区偏移,格式如 "Asia/Shanghai" 或 "UTC+8" 或 "+08:00"
868
  // 这里简化处理,假设用户会调用 taosSetGlobalTimezone 来设置
869
  // 或者从时区名称推断偏移(需要查表)
870

871
  uInfo("[tz] Windows switched to %s", tzname);
872

873
  return TSDB_CODE_SUCCESS;
874
#endif
875
}
31,539,200✔
876

31,539,200✔
UNCOV
877
int32_t taosSetGlobalTimezone(const char *tz) {
×
UNCOV
878
  if (tz == NULL) {
×
879
    terrno = TSDB_CODE_INVALID_PARA;
880
    return terrno;
881
  }
31,539,200✔
882
  int32_t code = TSDB_CODE_SUCCESS;
31,539,200✔
NEW
883
  uDebug("[tz]set timezone to %s", tz);
×
UNCOV
884
#ifdef WINDOWS
×
885
      char winStr[TD_TIMEZONE_LEN * 2] = {0};
886
  int found = 0;
887
  for (size_t i = 0; i < W_TZ_CITY_NUM; i++) {
31,539,200✔
888
    if (strcmp(tz_win[i][0], tz) == 0) {
31,539,200✔
889
      found = 1;
31,539,200✔
890
      char  keyPath[256] = {0};
891
      char  keyValue[100] = {0};
892
      DWORD keyValueSize = sizeof(keyValue);
26,574,030✔
893
      snprintf(keyPath, sizeof(keyPath), "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\%s",
894
               tz_win[i][1]);
895
      RegGetValue(HKEY_LOCAL_MACHINE, keyPath, "Display", RRF_RT_ANY, NULL, (PVOID)&keyValue, &keyValueSize);
896
      if (keyValueSize > 0) {
897
        keyValue[4] = (keyValue[4] == '+' ? '-' : '+');
26,574,030✔
898
        keyValue[10] = 0;
26,574,030✔
UNCOV
899
        snprintf(winStr, sizeof(winStr), "TZ=%s:00", &(keyValue[1]));
×
UNCOV
900
        if (strcasecmp(tz, "UTC") == 0) {
×
901
          snprintf(tsTimezoneStr, TD_TIMEZONE_LEN, "%s (UTC, +0000)", tz);
902
          snprintf(winStr, sizeof(winStr), "TZ=+0:00");
903
          // 更新 g_windows_tz
26,574,030✔
904
          g_windows_tz.offset_seconds = 0;
26,574,030✔
NEW
905
          tstrncpy(g_windows_tz.name, tsTimezoneStr, TD_TIMEZONE_LEN);
×
UNCOV
906
        } else {
×
907
          snprintf(tsTimezoneStr, TD_TIMEZONE_LEN, "%s (UTC, %c%c%c%c%c)", tz, keyValue[4], keyValue[5],
908
                   keyValue[6], keyValue[8], keyValue[9]);
26,574,030✔
909
          // 更新 g_windows_tz:解析偏移
26,574,030✔
910
          char sign = keyValue[4];
26,574,030✔
911
          int hours = (keyValue[5] - '0') * 10 + (keyValue[6] - '0');
912
          int minutes = (keyValue[8] - '0') * 10 + (keyValue[9] - '0');
NEW
913
          int64_t offset_seconds = (hours * 3600 + minutes * 60);
×
NEW
914
          if (sign == '+') {
×
NEW
915
            g_windows_tz.offset_seconds = -offset_seconds;
×
NEW
916
          } else {
×
917
            g_windows_tz.offset_seconds = offset_seconds;
NEW
918
          }
×
NEW
919
          tstrncpy(g_windows_tz.name, tsTimezoneStr, TD_TIMEZONE_LEN);
×
UNCOV
920
        }
×
UNCOV
921
      }
×
UNCOV
922
      break;
×
923
    }
UNCOV
924
  }
×
UNCOV
925

×
926
  _putenv(winStr);
927
  _tzset();
928
  return 0;
26,341,270✔
929
#else
26,574,030✔
930
  code = resetTimezoneInfo(tz);
26,574,030✔
UNCOV
931
  if (code != TSDB_CODE_SUCCESS) {
×
932
    return code;
933
  }
26,574,030✔
934

935
  time_t tx1 = taosGetTimestampSec();
26,574,030✔
936
  return taosFormatTimezoneStr(tx1, tz, getGlobalDefaultTZ(), tsTimezoneStr);
937
#endif
31,399,810✔
938
}
31,399,810✔
UNCOV
939

×
940
int32_t taosGetLocalTimezoneOffset() {
941
  time_t    tx1 = taosGetTimestampSec();
942
  struct tm tm1;
31,399,810✔
943
  if (taosLocalTime(&tx1, &tm1, NULL, 0, getGlobalDefaultTZ()) == NULL) {
31,403,840✔
944
    uError("%s failed to get local time: code:%d", __FUNCTION__, ERRNO);
4,030✔
945
    return TSDB_CODE_TIME_ERROR;
946
  }
31,399,810✔
947
#ifdef WINDOWS
1,990✔
948
  /* Normalize to seconds east of UTC (local - UTC), matching tm_gmtoff on other platforms. */
949
  return -(int32_t)getWindowsTimezoneOffset();
950
#elif defined(TD_ASTRA)
31,399,810✔
951
  return -(int32_t)timezone;
31,399,810✔
952
#else
4,824,810✔
953
  return (int32_t)(tm1.tm_gmtoff);
954
#endif
955
}
956

26,573,080✔
957
int32_t taosFormatTimezoneStr(time_t t, const char *tz, timezone_t sp, char *outTimezoneStr) {
958
  struct tm tm1;
959
  if (taosLocalTime(&t, &tm1, NULL, 0, sp) == NULL) {
960
    uError("%s failed to get local time: code:%d", __FUNCTION__, ERRNO);
961
    return TSDB_CODE_TIME_ERROR;
962
  }
963

964
  /*
965
   * format example:
966
   *
967
   * Asia/Shanghai (CST, +0800)
968
   * Europe/London (BST, +0100)
969
   * n/a (UTC, +0000)
970
   */
971

972
  char str1[TD_TIMEZONE_LEN] = {0};
973
  if (taosStrfTime(str1, sizeof(str1), "%Z", &tm1) == 0) {
974
    uError("failed to get timezone name");
975
    return TSDB_CODE_TIME_ERROR;
976
  }
977

978
  char str2[TD_TIMEZONE_LEN] = {0};
979
  if (taosStrfTime(str2, sizeof(str2), "%z", &tm1) == 0) {
980
    uError("failed to get timezone offset");
981
    return TSDB_CODE_TIME_ERROR;
982
  }
983

984
  (void)snprintf(outTimezoneStr, TD_TIMEZONE_LEN, "%s (%s, %s)", tz, str1, str2);
985
  uDebug("[tz] system timezone:%s", outTimezoneStr);
986
  return 0;
26,573,080✔
987
}
26,573,080✔
988

26,573,080✔
989
void getTimezoneStr(char *tz) {
990
#ifdef TD_ASTRA  // TD_ASTRA_TODO
26,573,080✔
991
  memcpy(tz, "Asia/Shanghai", sizeof("Asia/Shanghai"));
992
#elif !defined(WINDOWS)
993
  do {
994
    int n = readlink("/etc/localtime", tz, TD_TIMEZONE_LEN - 1);
26,591,220✔
995
    if (n < 0) {
996
      uWarn("[tz] failed to readlink /etc/localtime, reason:%s", strerror(ERRNO));
997
      break;
26,591,220✔
998
    }
26,591,220✔
999

26,526,300✔
1000
    char *zi = strstr(tz, "zoneinfo");
26,526,300✔
UNCOV
1001
    if (zi == NULL) {
×
1002
      uWarn("[tz] failed to find zoneinfo in /etc/localtime");
×
1003
      break;
1004
    }
1005
    zi += sizeof("zoneinfo");
26,526,300✔
1006
    memmove(tz, zi, TD_TIMEZONE_LEN - (zi - tz));
26,526,300✔
1007
    goto END;
1008
  } while (0);
26,526,300✔
1009

1010
  TdFilePtr pFile = taosOpenFile("/etc/timezone", TD_FILE_READ);
26,526,300✔
1011
  if (pFile == NULL) {
1012
    uWarn("[tz] failed to open /etc/timezone, reason:%s", strerror(ERRNO));
26,526,300✔
1013
    goto END;
1014
  }
1015
  int len = taosReadFile(pFile, tz, TD_TIMEZONE_LEN - 1);
26,564,610✔
1016
  TAOS_UNUSED(taosCloseFile(&pFile));
1017
  if (len <= 0) {
1018
    uWarn("[tz] failed to read /etc/timezone, len:%d", len);
239,081,490✔
1019
    goto END;
212,516,880✔
1020
  }
31,422,700✔
1021
  if (tz[len - 1] == '\n') {
31,422,700✔
1022
    tz[len - 1] = '\0';
1023
  }
1024

1025
END:
26,564,610✔
1026
  truncateTimezoneString(tz);
1027
  if (tz[0] == '\0') {
2,147,483,647✔
1028
    memcpy(tz, TZ_UNKNOWN, sizeof(TZ_UNKNOWN));
1029
  }
1030
  uDebug("[tz] system timezone:%s", tz);
1031
#endif
2,147,483,647✔
1032
}
2,147,483,647✔
1033

1034
void truncateTimezoneString(char *tz) {
1035
  if (tz == NULL) {
1036
    return;
1037
  }
1038

1039
  const char *firstChar = tz;
1040
  while (*firstChar == '/') {
1041
    ++firstChar;
1042
  }
1043
  if (firstChar != tz) {
1044
    memmove(tz, firstChar, strlen(firstChar) + 1);
1045
  }
1046

1047
  char *spacePos = strchr(tz, ' ');
1048
  if (spacePos != NULL) {
1049
    *spacePos = '\0';
1050
  }
1051
}
1052

1053
int32_t taosGetSystemTimezone(char *outTimezoneStr) {
1054
#ifdef WINDOWS
1055
  char  value[100] = {0};
1056
  char  keyPath[100] = {0};
1057
  DWORD bufferSize = sizeof(value);
1058
  LONG  result = RegGetValue(HKEY_LOCAL_MACHINE, "SYSTEM\\CurrentControlSet\\Control\\TimeZoneInformation",
1059
                             "TimeZoneKeyName", RRF_RT_ANY, NULL, (PVOID)&value, &bufferSize);
1060
  if (result != ERROR_SUCCESS) {
1061
    return TAOS_SYSTEM_WINAPI_ERROR(result);
1062
  }
1063
  if (bufferSize > 0) {
1064
    for (size_t i = 0; i < W_TZ_NUM; i++) {
1065
      if (strcmp(win_tz[i][0], value) == 0) {
1066
        tstrncpy(outTimezoneStr, win_tz[i][1], TD_TIMEZONE_LEN);
1067
        bufferSize = sizeof(value);
1068
        snprintf(keyPath, sizeof(keyPath), "SOFTWARE\\Microsoft\\Windows NT\\CurrentVersion\\Time Zones\\%s", value);
1069
        result = RegGetValue(HKEY_LOCAL_MACHINE, keyPath, "Display", RRF_RT_ANY, NULL, (PVOID)&value, &bufferSize);
1070
        if (result != ERROR_SUCCESS) {
1071
          return TAOS_SYSTEM_WINAPI_ERROR(result);
1072
        }
1073
        if (bufferSize > 0) {  // value like (UTC+05:30) Chennai, Kolkata, Mumbai, New Delhi
1074
          snprintf(outTimezoneStr, TD_TIMEZONE_LEN, "%s (UTC, %c%c%c%c%c)", outTimezoneStr, value[4], value[5],
1075
                   value[6], value[8], value[9]);
1076
        }
1077
        break;
1078
      }
1079
    }
1080
  }
1081
  return 0;
1082
#else
1083
  char tz[TD_TIMEZONE_LEN] = {0};
1084
  getTimezoneStr(tz);
1085
  time_t tx1 = taosGetTimestampSec();
1086

1087
  return taosFormatTimezoneStr(tx1, tz, getGlobalDefaultTZ(), outTimezoneStr);
1088
#endif
1089
}
1090

1091
int32_t initTimezoneInfo(void) {
1092
#ifdef WINDOWS
1093
  // 从注册表获取时区信息
1094
  char tzStr[TD_TIMEZONE_LEN] = {0};
1095
  int32_t code = taosGetSystemTimezone(tzStr);
1096

1097
  if (code == 0 && tzStr[0] != '\0') {
1098
    // 保存时区名称
1099
    tstrncpy(g_windows_tz.name, tzStr, TD_TIMEZONE_LEN);
1100

1101
    // 从 tzStr 中提取 UTC 偏移,格式如 "Asia/Shanghai (UTC, +0800)"
1102
    char *utcPos = strstr(tzStr, "(UTC, ");
1103
    if (utcPos) {
1104
      char sign = utcPos[6];  // '+' or '-'
1105
      int hours = (utcPos[7] - '0') * 10 + (utcPos[8] - '0');
1106
      int minutes = (utcPos[9] - '0') * 10 + (utcPos[10] - '0');
1107

1108
      // 计算偏移(秒)
1109
      // UTC+8 -> offset = -28800(负数)
1110
      // UTC-5 -> offset = +18000(正数)
1111
      int64_t offset_seconds = (hours * 3600 + minutes * 60);
1112
      if (sign == '+') {
1113
        g_windows_tz.offset_seconds = -offset_seconds;
1114
      } else {
1115
        g_windows_tz.offset_seconds = offset_seconds;
1116
      }
1117
    }
1118
  }
1119
#else
1120
  uint64_t gen = atomic_val_compare_exchange_64((int64_t *)&g_tz_gen, 0, 1);
1121
  if (gen > 0) return TSDB_CODE_SUCCESS;
1122
  timezone_t tz = tzalloc(NULL);  // system default
1123
  if (!tz) {
1124
    uError("tzalloc(NULL) failed");
1125
    return TSDB_CODE_TIME_ERROR;
1126
  }
1127

1128
  g_tz_slots[0].tz = tz;
1129
  g_tz_slots[0].gen = 0;
1130

1131
  atomic_store_32((int32_t *)&g_tz_idx, 0);
1132

1133
  uInfo("[tz]timezone initTimezoneInfo.");
1134
#endif
1135
  return TSDB_CODE_SUCCESS;
1136
}
1137

1138
void cleanupTimezoneInfo(void) {
1139
#ifdef WINDOWS
1140
#else
1141
  for (int i = 0; i < TZ_SLOTS; ++i) {
1142
    if (g_tz_slots[i].tz) {
1143
      tzfree(g_tz_slots[i].tz);
1144
      g_tz_slots[i].tz = NULL;
1145
    }
1146
  }
1147
#endif
1148
}
1149

1150
timezone_t getGlobalDefaultTZ() {
1151
#ifdef WINDOWS
1152
  return (timezone_t)&g_windows_tz;
1153
#else
1154
  uint32_t idx = atomic_load_32((int32_t *)&g_tz_idx);
1155
  return g_tz_slots[idx].tz;
1156
#endif
1157
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc