__init__.py 35 KB

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