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 = '2026d'
26VERSION = '2026.4' # 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 Anything that is not a zone name is unknown too.
177
178 >>> try:
179 ... timezone(False)
180 ... except UnknownTimeZoneError:
181 ... print('Unknown')
182 Unknown
183
184 '''
185 if not isinstance(zone, (str, unicode, bytes)):
186 raise UnknownTimeZoneError(zone)
187
188 if zone.upper() == 'UTC':
189 return utc
190
191 try:
192 zone = ascii(zone)
193 except UnicodeEncodeError:
194 # All valid timezones are ASCII
195 raise UnknownTimeZoneError(zone)
196
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)
207
208 return _tzinfo_cache[zone]
209
210
211def _unmunge_zone(zone):
212 """Undo the time zone name munging done by older versions of pytz."""
213 return zone.replace('_plus_', '+').replace('_minus_', '-')
214
215
216_all_timezones_lower_to_standard = None
217
218
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
225
226
227ZERO = datetime.timedelta(0)
228HOUR = datetime.timedelta(hours=1)
229
230
231class UTC(BaseTzInfo):
232 """UTC
233
234 Optimized UTC implementation. It unpickles using the single module global
235 instance defined beneath this class declaration.
236 """
237 zone = "UTC"
238
239 _utcoffset = ZERO
240 _dst = ZERO
241 _tzname = zone
242
243 def fromutc(self, dt):
244 if dt.tzinfo is None:
245 return self.localize(dt)
246 return super(utc.__class__, self).fromutc(dt)
247
248 def utcoffset(self, dt):
249 return ZERO
250
251 def tzname(self, dt):
252 return "UTC"
253
254 def dst(self, dt):
255 return ZERO
256
257 def __reduce__(self):
258 return _UTC, ()
259
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)
265
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)
273
274 def __repr__(self):
275 return "<UTC>"
276
277 def __str__(self):
278 return "UTC"
279
280
281UTC = utc = UTC() # UTC is a singleton
282
283
284def _UTC():
285 """Factory function for utc unpickling.
286
287 Makes sure that unpickling a utc instance always returns the same
288 module global.
289
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.
293
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
314
315
316_UTC.__safe_for_unpickling__ = True
317
318
319def _p(*args):
320 """Factory function for unpickling pytz tzinfo instances.
321
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)
326
327
328_p.__safe_for_unpickling__ = True
329
330
331class _CountryTimezoneDict(LazyDict):
332 """Map ISO 3166 country code to a list of timezone names commonly used
333 in that country.
334
335 iso3166_code is the two letter code used to identify the country.
336
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)
341
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'
355
356 Previously, this information was exposed as a function rather than a
357 dictionary. This is still supported::
358
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]
366
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()
385
386
387country_timezones = _CountryTimezoneDict()
388
389
390class _CountryNameDict(LazyDict):
391 '''Dictionary proving ISO3166 code -> English name.
392
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()
409
410
411country_names = _CountryNameDict()
412
413
414# Time-zone info based solely on fixed offsets
415
416class _FixedOffset(BaseTzInfo):
417
418 zone = None # to match the standard pytz API
419
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)
425
426 def utcoffset(self, dt):
427 return self._utcoffset
428
429 def __reduce__(self):
430 return FixedOffset, (self._minutes, )
431
432 def dst(self, dt):
433 return ZERO
434
435 def tzname(self, dt):
436 return None
437
438 def __repr__(self):
439 return 'pytz.FixedOffset(%d)' % self._minutes
440
441 # BaseTzInfo.__str__ returns self.zone, which is None here.
442 __str__ = __repr__
443
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)
449
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)
457
458
459def FixedOffset(offset, _tzinfos={}):
460 """return a fixed-offset timezone based off a number of minutes.
461
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'
469
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'
477
478 The datetime.timedelta must be between the range of -1 and 1 day,
479 non-inclusive.
480
481 >>> FixedOffset(1440)
482 Traceback (most recent call last):
483 ...
484 ValueError: ('absolute offset is too large', 1440)
485
486 >>> FixedOffset(-1440)
487 Traceback (most recent call last):
488 ...
489 ValueError: ('absolute offset is too large', -1440)
490
491 An offset of 0 is special-cased to return UTC.
492
493 >>> FixedOffset(0) is UTC
494 True
495
496 There should always be only one instance of a FixedOffset per timedelta.
497 This should be true for multiple creation calls.
498
499 >>> FixedOffset(-330) is one
500 True
501 >>> FixedOffset(1380) is two
502 True
503
504 It should also be true for pickling.
505
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
514
515 info = _tzinfos.get(offset)
516 if info is None:
517 # We haven't seen this one before. we need to save it.
518
519 # Use setdefault to avoid a race condition and make sure we have
520 # only one
521 info = _tzinfos.setdefault(offset, _FixedOffset(offset))
522
523 return info
524
525
526FixedOffset.__safe_for_unpickling__ = True
527
528
529def _test():
530 import doctest
531 sys.path.insert(0, os.pardir)
532 import pytz
533 return doctest.testmod(pytz)
534
535
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))
1138
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)
1576
1577common_timezones_set = LazySet(common_timezones)