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