1'''
2datetime.tzinfo timezone definitions generated from the
3Olson timezone database:
4
5 ftp://elsie.nci.nih.gov/pub/tz*.tar.gz
6
7See the datetime section of the Python Library Reference for information
8on how to use these modules.
9'''
10
11import sys
12import datetime
13import os.path
14
15from pytz.exceptions import AmbiguousTimeError
16from pytz.exceptions import InvalidTimeError
17from pytz.exceptions import NonExistentTimeError
18from pytz.exceptions import UnknownTimeZoneError
19from pytz.lazy import LazyDict, LazyList, LazySet # noqa
20from pytz.tzinfo import unpickler, BaseTzInfo
21from pytz.tzfile import build_tzinfo
22
23
24# The IANA (nee Olson) database is updated several times a year.
25OLSON_VERSION = '2026a'
26VERSION = '2026.1.post1' # pip compatible version number.
27__version__ = VERSION
28
29OLSEN_VERSION = OLSON_VERSION # Old releases had this misspelling
30
31__all__ = [
32 'timezone', 'utc', 'country_timezones', 'country_names',
33 'AmbiguousTimeError', 'InvalidTimeError',
34 'NonExistentTimeError', 'UnknownTimeZoneError',
35 'all_timezones', 'all_timezones_set',
36 'common_timezones', 'common_timezones_set',
37 'BaseTzInfo', 'FixedOffset',
38]
39
40
41if sys.version_info[0] > 2: # Python 3.x
42
43 # Python 3.x doesn't have unicode(), making writing code
44 # for Python 2.3 and Python 3.x a pain.
45 unicode = str
46
47 def ascii(s):
48 r"""
49 >>> ascii('Hello')
50 'Hello'
51 >>> ascii('\N{TRADE MARK SIGN}') #doctest: +IGNORE_EXCEPTION_DETAIL
52 Traceback (most recent call last):
53 ...
54 UnicodeEncodeError: ...
55 """
56 if type(s) == bytes:
57 s = s.decode('ASCII')
58 else:
59 s.encode('ASCII') # Raise an exception if not ASCII
60 return s # But the string - not a byte string.
61
62else: # Python 2.x
63
64 def ascii(s):
65 r"""
66 >>> ascii('Hello')
67 'Hello'
68 >>> ascii(u'Hello')
69 'Hello'
70 >>> ascii(u'\N{TRADE MARK SIGN}') #doctest: +IGNORE_EXCEPTION_DETAIL
71 Traceback (most recent call last):
72 ...
73 UnicodeEncodeError: ...
74 """
75 return s.encode('ASCII')
76
77
78def open_resource(name):
79 """Open a resource from the zoneinfo subdir for reading.
80
81 Uses the pkg_resources module if available and no standard file
82 found at the calculated location.
83
84 It is possible to specify different location for zoneinfo
85 subdir by using the PYTZ_TZDATADIR environment variable.
86 """
87 name_parts = name.lstrip('/').split('/')
88 for part in name_parts:
89 if part == os.path.pardir or os.sep in part:
90 raise ValueError('Bad path segment: %r' % part)
91 zoneinfo_dir = os.environ.get('PYTZ_TZDATADIR', None)
92 if zoneinfo_dir is not None:
93 filename = os.path.join(zoneinfo_dir, *name_parts)
94 else:
95 filename = os.path.join(os.path.dirname(__file__),
96 'zoneinfo', *name_parts)
97 if not os.path.exists(filename):
98 # pkg_resources is deprecated, try with importlib first
99 try:
100 from importlib.resources import files
101 except ImportError:
102 files = None
103
104 if files is not None:
105 # retrieve the zoneinfo file Path object and return its file handle
106 return files(__name__).joinpath('zoneinfo', *name_parts).open('rb')
107
108 # http://bugs.launchpad.net/bugs/383171 - we avoid using this
109 # unless absolutely necessary to help when a broken version of
110 # pkg_resources is installed.
111 try:
112 from pkg_resources import resource_stream
113 except ImportError:
114 resource_stream = None
115
116 if resource_stream is not None:
117 return resource_stream(__name__, 'zoneinfo/' + name)
118 return open(filename, 'rb')
119
120
121def resource_exists(name):
122 """Return true if the given resource exists"""
123 try:
124 if os.environ.get('PYTZ_SKIPEXISTSCHECK', ''):
125 # In "standard" distributions, we can assume that
126 # all the listed timezones are present. As an
127 # import-speed optimization, you can set the
128 # PYTZ_SKIPEXISTSCHECK flag to skip checking
129 # for the presence of the resource file on disk.
130 return True
131 open_resource(name).close()
132 return True
133 except IOError:
134 return False
135
136
137_tzinfo_cache = {}
138
139
140def timezone(zone):
141 r''' Return a datetime.tzinfo implementation for the given timezone
142
143 >>> from datetime import datetime, timedelta
144 >>> utc = timezone('UTC')
145 >>> eastern = timezone('US/Eastern')
146 >>> eastern.zone
147 'US/Eastern'
148 >>> timezone(unicode('US/Eastern')) is eastern
149 True
150 >>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc)
151 >>> loc_dt = utc_dt.astimezone(eastern)
152 >>> fmt = '%Y-%m-%d %H:%M:%S %Z (%z)'
153 >>> loc_dt.strftime(fmt)
154 '2002-10-27 01:00:00 EST (-0500)'
155 >>> (loc_dt - timedelta(minutes=10)).strftime(fmt)
156 '2002-10-27 00:50:00 EST (-0500)'
157 >>> eastern.normalize(loc_dt - timedelta(minutes=10)).strftime(fmt)
158 '2002-10-27 01:50:00 EDT (-0400)'
159 >>> (loc_dt + timedelta(minutes=10)).strftime(fmt)
160 '2002-10-27 01:10:00 EST (-0500)'
161
162 Raises UnknownTimeZoneError if passed an unknown zone.
163
164 >>> try:
165 ... timezone('Asia/Shangri-La')
166 ... except UnknownTimeZoneError:
167 ... print('Unknown')
168 Unknown
169
170 >>> try:
171 ... timezone(unicode('\N{TRADE MARK SIGN}'))
172 ... except UnknownTimeZoneError:
173 ... print('Unknown')
174 Unknown
175
176 '''
177 if zone is None:
178 raise UnknownTimeZoneError(None)
179
180 if zone.upper() == 'UTC':
181 return utc
182
183 try:
184 zone = ascii(zone)
185 except UnicodeEncodeError:
186 # All valid timezones are ASCII
187 raise UnknownTimeZoneError(zone)
188
189 zone = _case_insensitive_zone_lookup(_unmunge_zone(zone))
190 if zone not in _tzinfo_cache:
191 if zone in all_timezones_set: # noqa
192 fp = open_resource(zone)
193 try:
194 _tzinfo_cache[zone] = build_tzinfo(zone, fp)
195 finally:
196 fp.close()
197 else:
198 raise UnknownTimeZoneError(zone)
199
200 return _tzinfo_cache[zone]
201
202
203def _unmunge_zone(zone):
204 """Undo the time zone name munging done by older versions of pytz."""
205 return zone.replace('_plus_', '+').replace('_minus_', '-')
206
207
208_all_timezones_lower_to_standard = None
209
210
211def _case_insensitive_zone_lookup(zone):
212 """case-insensitively matching timezone, else return zone unchanged"""
213 global _all_timezones_lower_to_standard
214 if _all_timezones_lower_to_standard is None:
215 _all_timezones_lower_to_standard = dict((tz.lower(), tz) for tz in _all_timezones_unchecked) # noqa
216 return _all_timezones_lower_to_standard.get(zone.lower()) or zone # noqa
217
218
219ZERO = datetime.timedelta(0)
220HOUR = datetime.timedelta(hours=1)
221
222
223class UTC(BaseTzInfo):
224 """UTC
225
226 Optimized UTC implementation. It unpickles using the single module global
227 instance defined beneath this class declaration.
228 """
229 zone = "UTC"
230
231 _utcoffset = ZERO
232 _dst = ZERO
233 _tzname = zone
234
235 def fromutc(self, dt):
236 if dt.tzinfo is None:
237 return self.localize(dt)
238 return super(utc.__class__, self).fromutc(dt)
239
240 def utcoffset(self, dt):
241 return ZERO
242
243 def tzname(self, dt):
244 return "UTC"
245
246 def dst(self, dt):
247 return ZERO
248
249 def __reduce__(self):
250 return _UTC, ()
251
252 def localize(self, dt, is_dst=False):
253 '''Convert naive time to local time'''
254 if dt.tzinfo is not None:
255 raise ValueError('Not naive datetime (tzinfo is already set)')
256 return dt.replace(tzinfo=self)
257
258 def normalize(self, dt, is_dst=False):
259 '''Correct the timezone information on the given datetime'''
260 if dt.tzinfo is self:
261 return dt
262 if dt.tzinfo is None:
263 raise ValueError('Naive time - no tzinfo set')
264 return dt.astimezone(self)
265
266 def __repr__(self):
267 return "<UTC>"
268
269 def __str__(self):
270 return "UTC"
271
272
273UTC = utc = UTC() # UTC is a singleton
274
275
276def _UTC():
277 """Factory function for utc unpickling.
278
279 Makes sure that unpickling a utc instance always returns the same
280 module global.
281
282 These examples belong in the UTC class above, but it is obscured; or in
283 the README.rst, but we are not depending on Python 2.4 so integrating
284 the README.rst examples with the unit tests is not trivial.
285
286 >>> import datetime, pickle
287 >>> dt = datetime.datetime(2005, 3, 1, 14, 13, 21, tzinfo=utc)
288 >>> naive = dt.replace(tzinfo=None)
289 >>> p = pickle.dumps(dt, 1)
290 >>> naive_p = pickle.dumps(naive, 1)
291 >>> len(p) - len(naive_p)
292 17
293 >>> new = pickle.loads(p)
294 >>> new == dt
295 True
296 >>> new is dt
297 False
298 >>> new.tzinfo is dt.tzinfo
299 True
300 >>> utc is UTC is timezone('UTC')
301 True
302 >>> utc is timezone('GMT')
303 False
304 """
305 return utc
306
307
308_UTC.__safe_for_unpickling__ = True
309
310
311def _p(*args):
312 """Factory function for unpickling pytz tzinfo instances.
313
314 Just a wrapper around tzinfo.unpickler to save a few bytes in each pickle
315 by shortening the path.
316 """
317 return unpickler(*args)
318
319
320_p.__safe_for_unpickling__ = True
321
322
323class _CountryTimezoneDict(LazyDict):
324 """Map ISO 3166 country code to a list of timezone names commonly used
325 in that country.
326
327 iso3166_code is the two letter code used to identify the country.
328
329 >>> def print_list(list_of_strings):
330 ... 'We use a helper so doctests work under Python 2.3 -> 3.x'
331 ... for s in list_of_strings:
332 ... print(s)
333
334 >>> print_list(country_timezones['nz'])
335 Pacific/Auckland
336 Pacific/Chatham
337 >>> print_list(country_timezones['ch'])
338 Europe/Zurich
339 >>> print_list(country_timezones['CH'])
340 Europe/Zurich
341 >>> print_list(country_timezones[unicode('ch')])
342 Europe/Zurich
343 >>> print_list(country_timezones['XXX'])
344 Traceback (most recent call last):
345 ...
346 KeyError: 'XXX'
347
348 Previously, this information was exposed as a function rather than a
349 dictionary. This is still supported::
350
351 >>> print_list(country_timezones('nz'))
352 Pacific/Auckland
353 Pacific/Chatham
354 """
355 def __call__(self, iso3166_code):
356 """Backwards compatibility."""
357 return self[iso3166_code]
358
359 def _fill(self):
360 data = {}
361 zone_tab = open_resource('zone.tab')
362 try:
363 for line in zone_tab:
364 line = line.decode('UTF-8')
365 if line.startswith('#'):
366 continue
367 code, coordinates, zone = line.split(None, 4)[:3]
368 if zone not in all_timezones_set: # noqa
369 continue
370 try:
371 data[code].append(zone)
372 except KeyError:
373 data[code] = [zone]
374 self.data = data
375 finally:
376 zone_tab.close()
377
378
379country_timezones = _CountryTimezoneDict()
380
381
382class _CountryNameDict(LazyDict):
383 '''Dictionary proving ISO3166 code -> English name.
384
385 >>> print(country_names['au'])
386 Australia
387 '''
388 def _fill(self):
389 data = {}
390 zone_tab = open_resource('iso3166.tab')
391 try:
392 for line in zone_tab.readlines():
393 line = line.decode('UTF-8')
394 if line.startswith('#'):
395 continue
396 code, name = line.split(None, 1)
397 data[code] = name.strip()
398 self.data = data
399 finally:
400 zone_tab.close()
401
402
403country_names = _CountryNameDict()
404
405
406# Time-zone info based solely on fixed offsets
407
408class _FixedOffset(datetime.tzinfo):
409
410 zone = None # to match the standard pytz API
411
412 def __init__(self, minutes):
413 if abs(minutes) >= 1440:
414 raise ValueError("absolute offset is too large", minutes)
415 self._minutes = minutes
416 self._offset = datetime.timedelta(minutes=minutes)
417
418 def utcoffset(self, dt):
419 return self._offset
420
421 def __reduce__(self):
422 return FixedOffset, (self._minutes, )
423
424 def dst(self, dt):
425 return ZERO
426
427 def tzname(self, dt):
428 return None
429
430 def __repr__(self):
431 return 'pytz.FixedOffset(%d)' % self._minutes
432
433 def localize(self, dt, is_dst=False):
434 '''Convert naive time to local time'''
435 if dt.tzinfo is not None:
436 raise ValueError('Not naive datetime (tzinfo is already set)')
437 return dt.replace(tzinfo=self)
438
439 def normalize(self, dt, is_dst=False):
440 '''Correct the timezone information on the given datetime'''
441 if dt.tzinfo is self:
442 return dt
443 if dt.tzinfo is None:
444 raise ValueError('Naive time - no tzinfo set')
445 return dt.astimezone(self)
446
447
448def FixedOffset(offset, _tzinfos={}):
449 """return a fixed-offset timezone based off a number of minutes.
450
451 >>> one = FixedOffset(-330)
452 >>> one
453 pytz.FixedOffset(-330)
454 >>> str(one.utcoffset(datetime.datetime.now()))
455 '-1 day, 18:30:00'
456 >>> str(one.dst(datetime.datetime.now()))
457 '0:00:00'
458
459 >>> two = FixedOffset(1380)
460 >>> two
461 pytz.FixedOffset(1380)
462 >>> str(two.utcoffset(datetime.datetime.now()))
463 '23:00:00'
464 >>> str(two.dst(datetime.datetime.now()))
465 '0:00:00'
466
467 The datetime.timedelta must be between the range of -1 and 1 day,
468 non-inclusive.
469
470 >>> FixedOffset(1440)
471 Traceback (most recent call last):
472 ...
473 ValueError: ('absolute offset is too large', 1440)
474
475 >>> FixedOffset(-1440)
476 Traceback (most recent call last):
477 ...
478 ValueError: ('absolute offset is too large', -1440)
479
480 An offset of 0 is special-cased to return UTC.
481
482 >>> FixedOffset(0) is UTC
483 True
484
485 There should always be only one instance of a FixedOffset per timedelta.
486 This should be true for multiple creation calls.
487
488 >>> FixedOffset(-330) is one
489 True
490 >>> FixedOffset(1380) is two
491 True
492
493 It should also be true for pickling.
494
495 >>> import pickle
496 >>> pickle.loads(pickle.dumps(one)) is one
497 True
498 >>> pickle.loads(pickle.dumps(two)) is two
499 True
500 """
501 if offset == 0:
502 return UTC
503
504 info = _tzinfos.get(offset)
505 if info is None:
506 # We haven't seen this one before. we need to save it.
507
508 # Use setdefault to avoid a race condition and make sure we have
509 # only one
510 info = _tzinfos.setdefault(offset, _FixedOffset(offset))
511
512 return info
513
514
515FixedOffset.__safe_for_unpickling__ = True
516
517
518def _test():
519 import doctest
520 sys.path.insert(0, os.pardir)
521 import pytz
522 return doctest.testmod(pytz)
523
524
525if __name__ == '__main__':
526 _test()
527_all_timezones_unchecked = \
528['Africa/Abidjan',
529 'Africa/Accra',
530 'Africa/Addis_Ababa',
531 'Africa/Algiers',
532 'Africa/Asmara',
533 'Africa/Asmera',
534 'Africa/Bamako',
535 'Africa/Bangui',
536 'Africa/Banjul',
537 'Africa/Bissau',
538 'Africa/Blantyre',
539 'Africa/Brazzaville',
540 'Africa/Bujumbura',
541 'Africa/Cairo',
542 'Africa/Casablanca',
543 'Africa/Ceuta',
544 'Africa/Conakry',
545 'Africa/Dakar',
546 'Africa/Dar_es_Salaam',
547 'Africa/Djibouti',
548 'Africa/Douala',
549 'Africa/El_Aaiun',
550 'Africa/Freetown',
551 'Africa/Gaborone',
552 'Africa/Harare',
553 'Africa/Johannesburg',
554 'Africa/Juba',
555 'Africa/Kampala',
556 'Africa/Khartoum',
557 'Africa/Kigali',
558 'Africa/Kinshasa',
559 'Africa/Lagos',
560 'Africa/Libreville',
561 'Africa/Lome',
562 'Africa/Luanda',
563 'Africa/Lubumbashi',
564 'Africa/Lusaka',
565 'Africa/Malabo',
566 'Africa/Maputo',
567 'Africa/Maseru',
568 'Africa/Mbabane',
569 'Africa/Mogadishu',
570 'Africa/Monrovia',
571 'Africa/Nairobi',
572 'Africa/Ndjamena',
573 'Africa/Niamey',
574 'Africa/Nouakchott',
575 'Africa/Ouagadougou',
576 'Africa/Porto-Novo',
577 'Africa/Sao_Tome',
578 'Africa/Timbuktu',
579 'Africa/Tripoli',
580 'Africa/Tunis',
581 'Africa/Windhoek',
582 'America/Adak',
583 'America/Anchorage',
584 'America/Anguilla',
585 'America/Antigua',
586 'America/Araguaina',
587 'America/Argentina/Buenos_Aires',
588 'America/Argentina/Catamarca',
589 'America/Argentina/ComodRivadavia',
590 'America/Argentina/Cordoba',
591 'America/Argentina/Jujuy',
592 'America/Argentina/La_Rioja',
593 'America/Argentina/Mendoza',
594 'America/Argentina/Rio_Gallegos',
595 'America/Argentina/Salta',
596 'America/Argentina/San_Juan',
597 'America/Argentina/San_Luis',
598 'America/Argentina/Tucuman',
599 'America/Argentina/Ushuaia',
600 'America/Aruba',
601 'America/Asuncion',
602 'America/Atikokan',
603 'America/Atka',
604 'America/Bahia',
605 'America/Bahia_Banderas',
606 'America/Barbados',
607 'America/Belem',
608 'America/Belize',
609 'America/Blanc-Sablon',
610 'America/Boa_Vista',
611 'America/Bogota',
612 'America/Boise',
613 'America/Buenos_Aires',
614 'America/Cambridge_Bay',
615 'America/Campo_Grande',
616 'America/Cancun',
617 'America/Caracas',
618 'America/Catamarca',
619 'America/Cayenne',
620 'America/Cayman',
621 'America/Chicago',
622 'America/Chihuahua',
623 'America/Ciudad_Juarez',
624 'America/Coral_Harbour',
625 'America/Cordoba',
626 'America/Costa_Rica',
627 'America/Coyhaique',
628 'America/Creston',
629 'America/Cuiaba',
630 'America/Curacao',
631 'America/Danmarkshavn',
632 'America/Dawson',
633 'America/Dawson_Creek',
634 'America/Denver',
635 'America/Detroit',
636 'America/Dominica',
637 'America/Edmonton',
638 'America/Eirunepe',
639 'America/El_Salvador',
640 'America/Ensenada',
641 'America/Fort_Nelson',
642 'America/Fort_Wayne',
643 'America/Fortaleza',
644 'America/Glace_Bay',
645 'America/Godthab',
646 'America/Goose_Bay',
647 'America/Grand_Turk',
648 'America/Grenada',
649 'America/Guadeloupe',
650 'America/Guatemala',
651 'America/Guayaquil',
652 'America/Guyana',
653 'America/Halifax',
654 'America/Havana',
655 'America/Hermosillo',
656 'America/Indiana/Indianapolis',
657 'America/Indiana/Knox',
658 'America/Indiana/Marengo',
659 'America/Indiana/Petersburg',
660 'America/Indiana/Tell_City',
661 'America/Indiana/Vevay',
662 'America/Indiana/Vincennes',
663 'America/Indiana/Winamac',
664 'America/Indianapolis',
665 'America/Inuvik',
666 'America/Iqaluit',
667 'America/Jamaica',
668 'America/Jujuy',
669 'America/Juneau',
670 'America/Kentucky/Louisville',
671 'America/Kentucky/Monticello',
672 'America/Knox_IN',
673 'America/Kralendijk',
674 'America/La_Paz',
675 'America/Lima',
676 'America/Los_Angeles',
677 'America/Louisville',
678 'America/Lower_Princes',
679 'America/Maceio',
680 'America/Managua',
681 'America/Manaus',
682 'America/Marigot',
683 'America/Martinique',
684 'America/Matamoros',
685 'America/Mazatlan',
686 'America/Mendoza',
687 'America/Menominee',
688 'America/Merida',
689 'America/Metlakatla',
690 'America/Mexico_City',
691 'America/Miquelon',
692 'America/Moncton',
693 'America/Monterrey',
694 'America/Montevideo',
695 'America/Montreal',
696 'America/Montserrat',
697 'America/Nassau',
698 'America/New_York',
699 'America/Nipigon',
700 'America/Nome',
701 'America/Noronha',
702 'America/North_Dakota/Beulah',
703 'America/North_Dakota/Center',
704 'America/North_Dakota/New_Salem',
705 'America/Nuuk',
706 'America/Ojinaga',
707 'America/Panama',
708 'America/Pangnirtung',
709 'America/Paramaribo',
710 'America/Phoenix',
711 'America/Port-au-Prince',
712 'America/Port_of_Spain',
713 'America/Porto_Acre',
714 'America/Porto_Velho',
715 'America/Puerto_Rico',
716 'America/Punta_Arenas',
717 'America/Rainy_River',
718 'America/Rankin_Inlet',
719 'America/Recife',
720 'America/Regina',
721 'America/Resolute',
722 'America/Rio_Branco',
723 'America/Rosario',
724 'America/Santa_Isabel',
725 'America/Santarem',
726 'America/Santiago',
727 'America/Santo_Domingo',
728 'America/Sao_Paulo',
729 'America/Scoresbysund',
730 'America/Shiprock',
731 'America/Sitka',
732 'America/St_Barthelemy',
733 'America/St_Johns',
734 'America/St_Kitts',
735 'America/St_Lucia',
736 'America/St_Thomas',
737 'America/St_Vincent',
738 'America/Swift_Current',
739 'America/Tegucigalpa',
740 'America/Thule',
741 'America/Thunder_Bay',
742 'America/Tijuana',
743 'America/Toronto',
744 'America/Tortola',
745 'America/Vancouver',
746 'America/Virgin',
747 'America/Whitehorse',
748 'America/Winnipeg',
749 'America/Yakutat',
750 'America/Yellowknife',
751 'Antarctica/Casey',
752 'Antarctica/Davis',
753 'Antarctica/DumontDUrville',
754 'Antarctica/Macquarie',
755 'Antarctica/Mawson',
756 'Antarctica/McMurdo',
757 'Antarctica/Palmer',
758 'Antarctica/Rothera',
759 'Antarctica/South_Pole',
760 'Antarctica/Syowa',
761 'Antarctica/Troll',
762 'Antarctica/Vostok',
763 'Arctic/Longyearbyen',
764 'Asia/Aden',
765 'Asia/Almaty',
766 'Asia/Amman',
767 'Asia/Anadyr',
768 'Asia/Aqtau',
769 'Asia/Aqtobe',
770 'Asia/Ashgabat',
771 'Asia/Ashkhabad',
772 'Asia/Atyrau',
773 'Asia/Baghdad',
774 'Asia/Bahrain',
775 'Asia/Baku',
776 'Asia/Bangkok',
777 'Asia/Barnaul',
778 'Asia/Beirut',
779 'Asia/Bishkek',
780 'Asia/Brunei',
781 'Asia/Calcutta',
782 'Asia/Chita',
783 'Asia/Choibalsan',
784 'Asia/Chongqing',
785 'Asia/Chungking',
786 'Asia/Colombo',
787 'Asia/Dacca',
788 'Asia/Damascus',
789 'Asia/Dhaka',
790 'Asia/Dili',
791 'Asia/Dubai',
792 'Asia/Dushanbe',
793 'Asia/Famagusta',
794 'Asia/Gaza',
795 'Asia/Harbin',
796 'Asia/Hebron',
797 'Asia/Ho_Chi_Minh',
798 'Asia/Hong_Kong',
799 'Asia/Hovd',
800 'Asia/Irkutsk',
801 'Asia/Istanbul',
802 'Asia/Jakarta',
803 'Asia/Jayapura',
804 'Asia/Jerusalem',
805 'Asia/Kabul',
806 'Asia/Kamchatka',
807 'Asia/Karachi',
808 'Asia/Kashgar',
809 'Asia/Kathmandu',
810 'Asia/Katmandu',
811 'Asia/Khandyga',
812 'Asia/Kolkata',
813 'Asia/Krasnoyarsk',
814 'Asia/Kuala_Lumpur',
815 'Asia/Kuching',
816 'Asia/Kuwait',
817 'Asia/Macao',
818 'Asia/Macau',
819 'Asia/Magadan',
820 'Asia/Makassar',
821 'Asia/Manila',
822 'Asia/Muscat',
823 'Asia/Nicosia',
824 'Asia/Novokuznetsk',
825 'Asia/Novosibirsk',
826 'Asia/Omsk',
827 'Asia/Oral',
828 'Asia/Phnom_Penh',
829 'Asia/Pontianak',
830 'Asia/Pyongyang',
831 'Asia/Qatar',
832 'Asia/Qostanay',
833 'Asia/Qyzylorda',
834 'Asia/Rangoon',
835 'Asia/Riyadh',
836 'Asia/Saigon',
837 'Asia/Sakhalin',
838 'Asia/Samarkand',
839 'Asia/Seoul',
840 'Asia/Shanghai',
841 'Asia/Singapore',
842 'Asia/Srednekolymsk',
843 'Asia/Taipei',
844 'Asia/Tashkent',
845 'Asia/Tbilisi',
846 'Asia/Tehran',
847 'Asia/Tel_Aviv',
848 'Asia/Thimbu',
849 'Asia/Thimphu',
850 'Asia/Tokyo',
851 'Asia/Tomsk',
852 'Asia/Ujung_Pandang',
853 'Asia/Ulaanbaatar',
854 'Asia/Ulan_Bator',
855 'Asia/Urumqi',
856 'Asia/Ust-Nera',
857 'Asia/Vientiane',
858 'Asia/Vladivostok',
859 'Asia/Yakutsk',
860 'Asia/Yangon',
861 'Asia/Yekaterinburg',
862 'Asia/Yerevan',
863 'Atlantic/Azores',
864 'Atlantic/Bermuda',
865 'Atlantic/Canary',
866 'Atlantic/Cape_Verde',
867 'Atlantic/Faeroe',
868 'Atlantic/Faroe',
869 'Atlantic/Jan_Mayen',
870 'Atlantic/Madeira',
871 'Atlantic/Reykjavik',
872 'Atlantic/South_Georgia',
873 'Atlantic/St_Helena',
874 'Atlantic/Stanley',
875 'Australia/ACT',
876 'Australia/Adelaide',
877 'Australia/Brisbane',
878 'Australia/Broken_Hill',
879 'Australia/Canberra',
880 'Australia/Currie',
881 'Australia/Darwin',
882 'Australia/Eucla',
883 'Australia/Hobart',
884 'Australia/LHI',
885 'Australia/Lindeman',
886 'Australia/Lord_Howe',
887 'Australia/Melbourne',
888 'Australia/NSW',
889 'Australia/North',
890 'Australia/Perth',
891 'Australia/Queensland',
892 'Australia/South',
893 'Australia/Sydney',
894 'Australia/Tasmania',
895 'Australia/Victoria',
896 'Australia/West',
897 'Australia/Yancowinna',
898 'Brazil/Acre',
899 'Brazil/DeNoronha',
900 'Brazil/East',
901 'Brazil/West',
902 'CET',
903 'CST6CDT',
904 'Canada/Atlantic',
905 'Canada/Central',
906 'Canada/Eastern',
907 'Canada/Mountain',
908 'Canada/Newfoundland',
909 'Canada/Pacific',
910 'Canada/Saskatchewan',
911 'Canada/Yukon',
912 'Chile/Continental',
913 'Chile/EasterIsland',
914 'Cuba',
915 'EET',
916 'EST',
917 'EST5EDT',
918 'Egypt',
919 'Eire',
920 'Etc/GMT',
921 'Etc/GMT+0',
922 'Etc/GMT+1',
923 'Etc/GMT+10',
924 'Etc/GMT+11',
925 'Etc/GMT+12',
926 'Etc/GMT+2',
927 'Etc/GMT+3',
928 'Etc/GMT+4',
929 'Etc/GMT+5',
930 'Etc/GMT+6',
931 'Etc/GMT+7',
932 'Etc/GMT+8',
933 'Etc/GMT+9',
934 'Etc/GMT-0',
935 'Etc/GMT-1',
936 'Etc/GMT-10',
937 'Etc/GMT-11',
938 'Etc/GMT-12',
939 'Etc/GMT-13',
940 'Etc/GMT-14',
941 'Etc/GMT-2',
942 'Etc/GMT-3',
943 'Etc/GMT-4',
944 'Etc/GMT-5',
945 'Etc/GMT-6',
946 'Etc/GMT-7',
947 'Etc/GMT-8',
948 'Etc/GMT-9',
949 'Etc/GMT0',
950 'Etc/Greenwich',
951 'Etc/UCT',
952 'Etc/UTC',
953 'Etc/Universal',
954 'Etc/Zulu',
955 'Europe/Amsterdam',
956 'Europe/Andorra',
957 'Europe/Astrakhan',
958 'Europe/Athens',
959 'Europe/Belfast',
960 'Europe/Belgrade',
961 'Europe/Berlin',
962 'Europe/Bratislava',
963 'Europe/Brussels',
964 'Europe/Bucharest',
965 'Europe/Budapest',
966 'Europe/Busingen',
967 'Europe/Chisinau',
968 'Europe/Copenhagen',
969 'Europe/Dublin',
970 'Europe/Gibraltar',
971 'Europe/Guernsey',
972 'Europe/Helsinki',
973 'Europe/Isle_of_Man',
974 'Europe/Istanbul',
975 'Europe/Jersey',
976 'Europe/Kaliningrad',
977 'Europe/Kiev',
978 'Europe/Kirov',
979 'Europe/Kyiv',
980 'Europe/Lisbon',
981 'Europe/Ljubljana',
982 'Europe/London',
983 'Europe/Luxembourg',
984 'Europe/Madrid',
985 'Europe/Malta',
986 'Europe/Mariehamn',
987 'Europe/Minsk',
988 'Europe/Monaco',
989 'Europe/Moscow',
990 'Europe/Nicosia',
991 'Europe/Oslo',
992 'Europe/Paris',
993 'Europe/Podgorica',
994 'Europe/Prague',
995 'Europe/Riga',
996 'Europe/Rome',
997 'Europe/Samara',
998 'Europe/San_Marino',
999 'Europe/Sarajevo',
1000 'Europe/Saratov',
1001 'Europe/Simferopol',
1002 'Europe/Skopje',
1003 'Europe/Sofia',
1004 'Europe/Stockholm',
1005 'Europe/Tallinn',
1006 'Europe/Tirane',
1007 'Europe/Tiraspol',
1008 'Europe/Ulyanovsk',
1009 'Europe/Uzhgorod',
1010 'Europe/Vaduz',
1011 'Europe/Vatican',
1012 'Europe/Vienna',
1013 'Europe/Vilnius',
1014 'Europe/Volgograd',
1015 'Europe/Warsaw',
1016 'Europe/Zagreb',
1017 'Europe/Zaporozhye',
1018 'Europe/Zurich',
1019 'GB',
1020 'GB-Eire',
1021 'GMT',
1022 'GMT+0',
1023 'GMT-0',
1024 'GMT0',
1025 'Greenwich',
1026 'HST',
1027 'Hongkong',
1028 'Iceland',
1029 'Indian/Antananarivo',
1030 'Indian/Chagos',
1031 'Indian/Christmas',
1032 'Indian/Cocos',
1033 'Indian/Comoro',
1034 'Indian/Kerguelen',
1035 'Indian/Mahe',
1036 'Indian/Maldives',
1037 'Indian/Mauritius',
1038 'Indian/Mayotte',
1039 'Indian/Reunion',
1040 'Iran',
1041 'Israel',
1042 'Jamaica',
1043 'Japan',
1044 'Kwajalein',
1045 'Libya',
1046 'MET',
1047 'MST',
1048 'MST7MDT',
1049 'Mexico/BajaNorte',
1050 'Mexico/BajaSur',
1051 'Mexico/General',
1052 'NZ',
1053 'NZ-CHAT',
1054 'Navajo',
1055 'PRC',
1056 'PST8PDT',
1057 'Pacific/Apia',
1058 'Pacific/Auckland',
1059 'Pacific/Bougainville',
1060 'Pacific/Chatham',
1061 'Pacific/Chuuk',
1062 'Pacific/Easter',
1063 'Pacific/Efate',
1064 'Pacific/Enderbury',
1065 'Pacific/Fakaofo',
1066 'Pacific/Fiji',
1067 'Pacific/Funafuti',
1068 'Pacific/Galapagos',
1069 'Pacific/Gambier',
1070 'Pacific/Guadalcanal',
1071 'Pacific/Guam',
1072 'Pacific/Honolulu',
1073 'Pacific/Johnston',
1074 'Pacific/Kanton',
1075 'Pacific/Kiritimati',
1076 'Pacific/Kosrae',
1077 'Pacific/Kwajalein',
1078 'Pacific/Majuro',
1079 'Pacific/Marquesas',
1080 'Pacific/Midway',
1081 'Pacific/Nauru',
1082 'Pacific/Niue',
1083 'Pacific/Norfolk',
1084 'Pacific/Noumea',
1085 'Pacific/Pago_Pago',
1086 'Pacific/Palau',
1087 'Pacific/Pitcairn',
1088 'Pacific/Pohnpei',
1089 'Pacific/Ponape',
1090 'Pacific/Port_Moresby',
1091 'Pacific/Rarotonga',
1092 'Pacific/Saipan',
1093 'Pacific/Samoa',
1094 'Pacific/Tahiti',
1095 'Pacific/Tarawa',
1096 'Pacific/Tongatapu',
1097 'Pacific/Truk',
1098 'Pacific/Wake',
1099 'Pacific/Wallis',
1100 'Pacific/Yap',
1101 'Poland',
1102 'Portugal',
1103 'ROC',
1104 'ROK',
1105 'Singapore',
1106 'Turkey',
1107 'UCT',
1108 'US/Alaska',
1109 'US/Aleutian',
1110 'US/Arizona',
1111 'US/Central',
1112 'US/East-Indiana',
1113 'US/Eastern',
1114 'US/Hawaii',
1115 'US/Indiana-Starke',
1116 'US/Michigan',
1117 'US/Mountain',
1118 'US/Pacific',
1119 'US/Samoa',
1120 'UTC',
1121 'Universal',
1122 'W-SU',
1123 'WET',
1124 'Zulu']
1125all_timezones = LazyList(
1126 tz for tz in _all_timezones_unchecked if resource_exists(tz))
1127
1128all_timezones_set = LazySet(all_timezones)
1129common_timezones = \
1130['Africa/Abidjan',
1131 'Africa/Accra',
1132 'Africa/Addis_Ababa',
1133 'Africa/Algiers',
1134 'Africa/Asmara',
1135 'Africa/Bamako',
1136 'Africa/Bangui',
1137 'Africa/Banjul',
1138 'Africa/Bissau',
1139 'Africa/Blantyre',
1140 'Africa/Brazzaville',
1141 'Africa/Bujumbura',
1142 'Africa/Cairo',
1143 'Africa/Casablanca',
1144 'Africa/Ceuta',
1145 'Africa/Conakry',
1146 'Africa/Dakar',
1147 'Africa/Dar_es_Salaam',
1148 'Africa/Djibouti',
1149 'Africa/Douala',
1150 'Africa/El_Aaiun',
1151 'Africa/Freetown',
1152 'Africa/Gaborone',
1153 'Africa/Harare',
1154 'Africa/Johannesburg',
1155 'Africa/Juba',
1156 'Africa/Kampala',
1157 'Africa/Khartoum',
1158 'Africa/Kigali',
1159 'Africa/Kinshasa',
1160 'Africa/Lagos',
1161 'Africa/Libreville',
1162 'Africa/Lome',
1163 'Africa/Luanda',
1164 'Africa/Lubumbashi',
1165 'Africa/Lusaka',
1166 'Africa/Malabo',
1167 'Africa/Maputo',
1168 'Africa/Maseru',
1169 'Africa/Mbabane',
1170 'Africa/Mogadishu',
1171 'Africa/Monrovia',
1172 'Africa/Nairobi',
1173 'Africa/Ndjamena',
1174 'Africa/Niamey',
1175 'Africa/Nouakchott',
1176 'Africa/Ouagadougou',
1177 'Africa/Porto-Novo',
1178 'Africa/Sao_Tome',
1179 'Africa/Tripoli',
1180 'Africa/Tunis',
1181 'Africa/Windhoek',
1182 'America/Adak',
1183 'America/Anchorage',
1184 'America/Anguilla',
1185 'America/Antigua',
1186 'America/Araguaina',
1187 'America/Argentina/Buenos_Aires',
1188 'America/Argentina/Catamarca',
1189 'America/Argentina/Cordoba',
1190 'America/Argentina/Jujuy',
1191 'America/Argentina/La_Rioja',
1192 'America/Argentina/Mendoza',
1193 'America/Argentina/Rio_Gallegos',
1194 'America/Argentina/Salta',
1195 'America/Argentina/San_Juan',
1196 'America/Argentina/San_Luis',
1197 'America/Argentina/Tucuman',
1198 'America/Argentina/Ushuaia',
1199 'America/Aruba',
1200 'America/Asuncion',
1201 'America/Atikokan',
1202 'America/Bahia',
1203 'America/Bahia_Banderas',
1204 'America/Barbados',
1205 'America/Belem',
1206 'America/Belize',
1207 'America/Blanc-Sablon',
1208 'America/Boa_Vista',
1209 'America/Bogota',
1210 'America/Boise',
1211 'America/Cambridge_Bay',
1212 'America/Campo_Grande',
1213 'America/Cancun',
1214 'America/Caracas',
1215 'America/Cayenne',
1216 'America/Cayman',
1217 'America/Chicago',
1218 'America/Chihuahua',
1219 'America/Ciudad_Juarez',
1220 'America/Costa_Rica',
1221 'America/Coyhaique',
1222 'America/Creston',
1223 'America/Cuiaba',
1224 'America/Curacao',
1225 'America/Danmarkshavn',
1226 'America/Dawson',
1227 'America/Dawson_Creek',
1228 'America/Denver',
1229 'America/Detroit',
1230 'America/Dominica',
1231 'America/Edmonton',
1232 'America/Eirunepe',
1233 'America/El_Salvador',
1234 'America/Fort_Nelson',
1235 'America/Fortaleza',
1236 'America/Glace_Bay',
1237 'America/Goose_Bay',
1238 'America/Grand_Turk',
1239 'America/Grenada',
1240 'America/Guadeloupe',
1241 'America/Guatemala',
1242 'America/Guayaquil',
1243 'America/Guyana',
1244 'America/Halifax',
1245 'America/Havana',
1246 'America/Hermosillo',
1247 'America/Indiana/Indianapolis',
1248 'America/Indiana/Knox',
1249 'America/Indiana/Marengo',
1250 'America/Indiana/Petersburg',
1251 'America/Indiana/Tell_City',
1252 'America/Indiana/Vevay',
1253 'America/Indiana/Vincennes',
1254 'America/Indiana/Winamac',
1255 'America/Inuvik',
1256 'America/Iqaluit',
1257 'America/Jamaica',
1258 'America/Juneau',
1259 'America/Kentucky/Louisville',
1260 'America/Kentucky/Monticello',
1261 'America/Kralendijk',
1262 'America/La_Paz',
1263 'America/Lima',
1264 'America/Los_Angeles',
1265 'America/Lower_Princes',
1266 'America/Maceio',
1267 'America/Managua',
1268 'America/Manaus',
1269 'America/Marigot',
1270 'America/Martinique',
1271 'America/Matamoros',
1272 'America/Mazatlan',
1273 'America/Menominee',
1274 'America/Merida',
1275 'America/Metlakatla',
1276 'America/Mexico_City',
1277 'America/Miquelon',
1278 'America/Moncton',
1279 'America/Monterrey',
1280 'America/Montevideo',
1281 'America/Montserrat',
1282 'America/Nassau',
1283 'America/New_York',
1284 'America/Nome',
1285 'America/Noronha',
1286 'America/North_Dakota/Beulah',
1287 'America/North_Dakota/Center',
1288 'America/North_Dakota/New_Salem',
1289 'America/Nuuk',
1290 'America/Ojinaga',
1291 'America/Panama',
1292 'America/Paramaribo',
1293 'America/Phoenix',
1294 'America/Port-au-Prince',
1295 'America/Port_of_Spain',
1296 'America/Porto_Velho',
1297 'America/Puerto_Rico',
1298 'America/Punta_Arenas',
1299 'America/Rankin_Inlet',
1300 'America/Recife',
1301 'America/Regina',
1302 'America/Resolute',
1303 'America/Rio_Branco',
1304 'America/Santarem',
1305 'America/Santiago',
1306 'America/Santo_Domingo',
1307 'America/Sao_Paulo',
1308 'America/Scoresbysund',
1309 'America/Sitka',
1310 'America/St_Barthelemy',
1311 'America/St_Johns',
1312 'America/St_Kitts',
1313 'America/St_Lucia',
1314 'America/St_Thomas',
1315 'America/St_Vincent',
1316 'America/Swift_Current',
1317 'America/Tegucigalpa',
1318 'America/Thule',
1319 'America/Tijuana',
1320 'America/Toronto',
1321 'America/Tortola',
1322 'America/Vancouver',
1323 'America/Whitehorse',
1324 'America/Winnipeg',
1325 'America/Yakutat',
1326 'Antarctica/Casey',
1327 'Antarctica/Davis',
1328 'Antarctica/DumontDUrville',
1329 'Antarctica/Macquarie',
1330 'Antarctica/Mawson',
1331 'Antarctica/McMurdo',
1332 'Antarctica/Palmer',
1333 'Antarctica/Rothera',
1334 'Antarctica/Syowa',
1335 'Antarctica/Troll',
1336 'Antarctica/Vostok',
1337 'Arctic/Longyearbyen',
1338 'Asia/Aden',
1339 'Asia/Almaty',
1340 'Asia/Amman',
1341 'Asia/Anadyr',
1342 'Asia/Aqtau',
1343 'Asia/Aqtobe',
1344 'Asia/Ashgabat',
1345 'Asia/Atyrau',
1346 'Asia/Baghdad',
1347 'Asia/Bahrain',
1348 'Asia/Baku',
1349 'Asia/Bangkok',
1350 'Asia/Barnaul',
1351 'Asia/Beirut',
1352 'Asia/Bishkek',
1353 'Asia/Brunei',
1354 'Asia/Chita',
1355 'Asia/Colombo',
1356 'Asia/Damascus',
1357 'Asia/Dhaka',
1358 'Asia/Dili',
1359 'Asia/Dubai',
1360 'Asia/Dushanbe',
1361 'Asia/Famagusta',
1362 'Asia/Gaza',
1363 'Asia/Hebron',
1364 'Asia/Ho_Chi_Minh',
1365 'Asia/Hong_Kong',
1366 'Asia/Hovd',
1367 'Asia/Irkutsk',
1368 'Asia/Jakarta',
1369 'Asia/Jayapura',
1370 'Asia/Jerusalem',
1371 'Asia/Kabul',
1372 'Asia/Kamchatka',
1373 'Asia/Karachi',
1374 'Asia/Kathmandu',
1375 'Asia/Khandyga',
1376 'Asia/Kolkata',
1377 'Asia/Krasnoyarsk',
1378 'Asia/Kuala_Lumpur',
1379 'Asia/Kuching',
1380 'Asia/Kuwait',
1381 'Asia/Macau',
1382 'Asia/Magadan',
1383 'Asia/Makassar',
1384 'Asia/Manila',
1385 'Asia/Muscat',
1386 'Asia/Nicosia',
1387 'Asia/Novokuznetsk',
1388 'Asia/Novosibirsk',
1389 'Asia/Omsk',
1390 'Asia/Oral',
1391 'Asia/Phnom_Penh',
1392 'Asia/Pontianak',
1393 'Asia/Pyongyang',
1394 'Asia/Qatar',
1395 'Asia/Qostanay',
1396 'Asia/Qyzylorda',
1397 'Asia/Riyadh',
1398 'Asia/Sakhalin',
1399 'Asia/Samarkand',
1400 'Asia/Seoul',
1401 'Asia/Shanghai',
1402 'Asia/Singapore',
1403 'Asia/Srednekolymsk',
1404 'Asia/Taipei',
1405 'Asia/Tashkent',
1406 'Asia/Tbilisi',
1407 'Asia/Tehran',
1408 'Asia/Thimphu',
1409 'Asia/Tokyo',
1410 'Asia/Tomsk',
1411 'Asia/Ulaanbaatar',
1412 'Asia/Urumqi',
1413 'Asia/Ust-Nera',
1414 'Asia/Vientiane',
1415 'Asia/Vladivostok',
1416 'Asia/Yakutsk',
1417 'Asia/Yangon',
1418 'Asia/Yekaterinburg',
1419 'Asia/Yerevan',
1420 'Atlantic/Azores',
1421 'Atlantic/Bermuda',
1422 'Atlantic/Canary',
1423 'Atlantic/Cape_Verde',
1424 'Atlantic/Faroe',
1425 'Atlantic/Madeira',
1426 'Atlantic/Reykjavik',
1427 'Atlantic/South_Georgia',
1428 'Atlantic/St_Helena',
1429 'Atlantic/Stanley',
1430 'Australia/Adelaide',
1431 'Australia/Brisbane',
1432 'Australia/Broken_Hill',
1433 'Australia/Darwin',
1434 'Australia/Eucla',
1435 'Australia/Hobart',
1436 'Australia/Lindeman',
1437 'Australia/Lord_Howe',
1438 'Australia/Melbourne',
1439 'Australia/Perth',
1440 'Australia/Sydney',
1441 'Canada/Atlantic',
1442 'Canada/Central',
1443 'Canada/Eastern',
1444 'Canada/Mountain',
1445 'Canada/Newfoundland',
1446 'Canada/Pacific',
1447 'Europe/Amsterdam',
1448 'Europe/Andorra',
1449 'Europe/Astrakhan',
1450 'Europe/Athens',
1451 'Europe/Belgrade',
1452 'Europe/Berlin',
1453 'Europe/Bratislava',
1454 'Europe/Brussels',
1455 'Europe/Bucharest',
1456 'Europe/Budapest',
1457 'Europe/Busingen',
1458 'Europe/Chisinau',
1459 'Europe/Copenhagen',
1460 'Europe/Dublin',
1461 'Europe/Gibraltar',
1462 'Europe/Guernsey',
1463 'Europe/Helsinki',
1464 'Europe/Isle_of_Man',
1465 'Europe/Istanbul',
1466 'Europe/Jersey',
1467 'Europe/Kaliningrad',
1468 'Europe/Kirov',
1469 'Europe/Kyiv',
1470 'Europe/Lisbon',
1471 'Europe/Ljubljana',
1472 'Europe/London',
1473 'Europe/Luxembourg',
1474 'Europe/Madrid',
1475 'Europe/Malta',
1476 'Europe/Mariehamn',
1477 'Europe/Minsk',
1478 'Europe/Monaco',
1479 'Europe/Moscow',
1480 'Europe/Oslo',
1481 'Europe/Paris',
1482 'Europe/Podgorica',
1483 'Europe/Prague',
1484 'Europe/Riga',
1485 'Europe/Rome',
1486 'Europe/Samara',
1487 'Europe/San_Marino',
1488 'Europe/Sarajevo',
1489 'Europe/Saratov',
1490 'Europe/Simferopol',
1491 'Europe/Skopje',
1492 'Europe/Sofia',
1493 'Europe/Stockholm',
1494 'Europe/Tallinn',
1495 'Europe/Tirane',
1496 'Europe/Ulyanovsk',
1497 'Europe/Vaduz',
1498 'Europe/Vatican',
1499 'Europe/Vienna',
1500 'Europe/Vilnius',
1501 'Europe/Volgograd',
1502 'Europe/Warsaw',
1503 'Europe/Zagreb',
1504 'Europe/Zurich',
1505 'GMT',
1506 'Indian/Antananarivo',
1507 'Indian/Chagos',
1508 'Indian/Christmas',
1509 'Indian/Cocos',
1510 'Indian/Comoro',
1511 'Indian/Kerguelen',
1512 'Indian/Mahe',
1513 'Indian/Maldives',
1514 'Indian/Mauritius',
1515 'Indian/Mayotte',
1516 'Indian/Reunion',
1517 'Pacific/Apia',
1518 'Pacific/Auckland',
1519 'Pacific/Bougainville',
1520 'Pacific/Chatham',
1521 'Pacific/Chuuk',
1522 'Pacific/Easter',
1523 'Pacific/Efate',
1524 'Pacific/Fakaofo',
1525 'Pacific/Fiji',
1526 'Pacific/Funafuti',
1527 'Pacific/Galapagos',
1528 'Pacific/Gambier',
1529 'Pacific/Guadalcanal',
1530 'Pacific/Guam',
1531 'Pacific/Honolulu',
1532 'Pacific/Kanton',
1533 'Pacific/Kiritimati',
1534 'Pacific/Kosrae',
1535 'Pacific/Kwajalein',
1536 'Pacific/Majuro',
1537 'Pacific/Marquesas',
1538 'Pacific/Midway',
1539 'Pacific/Nauru',
1540 'Pacific/Niue',
1541 'Pacific/Norfolk',
1542 'Pacific/Noumea',
1543 'Pacific/Pago_Pago',
1544 'Pacific/Palau',
1545 'Pacific/Pitcairn',
1546 'Pacific/Pohnpei',
1547 'Pacific/Port_Moresby',
1548 'Pacific/Rarotonga',
1549 'Pacific/Saipan',
1550 'Pacific/Tahiti',
1551 'Pacific/Tarawa',
1552 'Pacific/Tongatapu',
1553 'Pacific/Wake',
1554 'Pacific/Wallis',
1555 'US/Alaska',
1556 'US/Arizona',
1557 'US/Central',
1558 'US/Eastern',
1559 'US/Hawaii',
1560 'US/Mountain',
1561 'US/Pacific',
1562 'UTC']
1563common_timezones = LazyList(
1564 tz for tz in common_timezones if tz in all_timezones)
1565
1566common_timezones_set = LazySet(common_timezones)