mirror of
https://github.com/Tautulli/Tautulli.git
synced 2025-07-13 08:42:59 -07:00
Update tzlocal to v1.5.1
This commit is contained in:
parent
f42581a5a6
commit
dee544c951
9 changed files with 447 additions and 273 deletions
142
lib/tzlocal/CHANGES.txt
Normal file
142
lib/tzlocal/CHANGES.txt
Normal file
|
@ -0,0 +1,142 @@
|
||||||
|
Changes
|
||||||
|
=======
|
||||||
|
|
||||||
|
1.5.1 (2017-12-01)
|
||||||
|
------------------
|
||||||
|
|
||||||
|
- 1.5 had a bug that slipped through testing, fixed that,
|
||||||
|
increased test coverage.
|
||||||
|
|
||||||
|
|
||||||
|
1.5 (2017-11-30)
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- No longer treats macOS as special, but as a unix.
|
||||||
|
|
||||||
|
- get_windows_info.py is renamed to update_windows_mappings.py
|
||||||
|
|
||||||
|
- Windows mappings now also contain mappings from deprecated zoneinfo names.
|
||||||
|
(Preston-Landers, regebro)
|
||||||
|
|
||||||
|
|
||||||
|
1.4 (2017-04-18)
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- I use MIT on my other projects, so relicensing.
|
||||||
|
|
||||||
|
|
||||||
|
1.4b1 (2017-04-14)
|
||||||
|
------------------
|
||||||
|
|
||||||
|
- Dropping support for Python versions nobody uses (2.5, 3.1, 3.2), adding 3.6
|
||||||
|
Python 3.1 and 3.2 still works, 2.5 has been broken for some time.
|
||||||
|
|
||||||
|
- Ayalash's OS X fix didn't work on Python 2.7, fixed that.
|
||||||
|
|
||||||
|
|
||||||
|
1.3.2 (2017-04-12)
|
||||||
|
------------------
|
||||||
|
|
||||||
|
- Ensure closing of subprocess on OS X (ayalash)
|
||||||
|
DOING: Implementing feedback on the unsubscribe button
|
||||||
|
DOING: Investigating remaining issues with DOCX export
|
||||||
|
BLOCKERS: None
|
||||||
|
|
||||||
|
- Removed unused imports (jwilk)
|
||||||
|
|
||||||
|
- Closes stdout and stderr to get rid of ResourceWarnings (johnwquarles)
|
||||||
|
|
||||||
|
- Updated Windows timezones (axil)
|
||||||
|
|
||||||
|
|
||||||
|
1.3 (2016-10-15)
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- #34: Added support for /var/db/zoneinfo
|
||||||
|
|
||||||
|
|
||||||
|
1.2.2 (2016-03-02)
|
||||||
|
------------------
|
||||||
|
|
||||||
|
- #30: Fixed a bug on OS X.
|
||||||
|
|
||||||
|
|
||||||
|
1.2.1 (2016-02-28)
|
||||||
|
------------------
|
||||||
|
|
||||||
|
- Tests failed if TZ was set in the environment. (EdwardBetts)
|
||||||
|
|
||||||
|
- Replaces os.popen() with subprocess.Popen() for OS X to
|
||||||
|
handle when systemsetup doesn't exist. (mckabi, cewing)
|
||||||
|
|
||||||
|
|
||||||
|
1.2 (2015-06-14)
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Systemd stores no time zone name, forcing us to look at the name of the file
|
||||||
|
that localtime symlinks to. (cameris)
|
||||||
|
|
||||||
|
|
||||||
|
1.1.2 (2014-10-18)
|
||||||
|
------------------
|
||||||
|
|
||||||
|
- Timezones that has 3 items did not work on Mac OS X.
|
||||||
|
(Marc Van Olmen)
|
||||||
|
|
||||||
|
- Now doesn't fail if the TZ environment variable isn't an Olsen time zone.
|
||||||
|
|
||||||
|
- Some timezones on Windows can apparently be empty (perhaps the are deleted).
|
||||||
|
Now these are ignored.
|
||||||
|
(Xiaokun Zhu)
|
||||||
|
|
||||||
|
|
||||||
|
1.1.1 (2014-01-29)
|
||||||
|
------------------
|
||||||
|
|
||||||
|
- I forgot to add Etc/UTC as an alias for Etc/GMT.
|
||||||
|
|
||||||
|
|
||||||
|
1.1 (2014-01-28)
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Adding better support for OS X.
|
||||||
|
|
||||||
|
- Added support to map from tzdata/Olsen names to Windows names.
|
||||||
|
(Thanks to Benjamen Meyer).
|
||||||
|
|
||||||
|
|
||||||
|
1.0 (2013-05-29)
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Fixed some more cases where spaces needs replacing with underscores.
|
||||||
|
|
||||||
|
- Better handling of misconfigured /etc/timezone.
|
||||||
|
|
||||||
|
- Better error message on Windows if we can't find a timezone at all.
|
||||||
|
|
||||||
|
|
||||||
|
0.3 (2012-09-13)
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Windows 7 support.
|
||||||
|
|
||||||
|
- Python 2.5 supported; because it only needed a __future__ import.
|
||||||
|
|
||||||
|
- Python 3.3 tested, it worked.
|
||||||
|
|
||||||
|
- Got rid of relative imports, because I don't actually like them,
|
||||||
|
so I don't know why I used them in the first place.
|
||||||
|
|
||||||
|
- For each Windows zone, use the default zoneinfo zone, not the last one.
|
||||||
|
|
||||||
|
|
||||||
|
0.2 (2012-09-12)
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Python 3 support.
|
||||||
|
|
||||||
|
|
||||||
|
0.1 (2012-09-11)
|
||||||
|
----------------
|
||||||
|
|
||||||
|
- Initial release.
|
|
@ -1,121 +1,19 @@
|
||||||
Creative Commons Legal Code
|
Copyright 2011-2017 Lennart Regebro
|
||||||
|
|
||||||
CC0 1.0 Universal
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
The above copyright notice and this permission notice shall be included in
|
||||||
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
all copies or substantial portions of the Software.
|
||||||
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
|
||||||
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
|
||||||
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
|
||||||
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
|
||||||
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
|
||||||
HEREUNDER.
|
|
||||||
|
|
||||||
Statement of Purpose
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
The laws of most jurisdictions throughout the world automatically confer
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
exclusive Copyright and Related Rights (defined below) upon the creator
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
and subsequent owner(s) (each and all, an "owner") of an original work of
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
authorship and/or a database (each, a "Work").
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
Certain owners wish to permanently relinquish those rights to a Work for
|
|
||||||
the purpose of contributing to a commons of creative, cultural and
|
|
||||||
scientific works ("Commons") that the public can reliably and without fear
|
|
||||||
of later claims of infringement build upon, modify, incorporate in other
|
|
||||||
works, reuse and redistribute as freely as possible in any form whatsoever
|
|
||||||
and for any purposes, including without limitation commercial purposes.
|
|
||||||
These owners may contribute to the Commons to promote the ideal of a free
|
|
||||||
culture and the further production of creative, cultural and scientific
|
|
||||||
works, or to gain reputation or greater distribution for their Work in
|
|
||||||
part through the use and efforts of others.
|
|
||||||
|
|
||||||
For these and/or other purposes and motivations, and without any
|
|
||||||
expectation of additional consideration or compensation, the person
|
|
||||||
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
|
||||||
is an owner of Copyright and Related Rights in the Work, voluntarily
|
|
||||||
elects to apply CC0 to the Work and publicly distribute the Work under its
|
|
||||||
terms, with knowledge of his or her Copyright and Related Rights in the
|
|
||||||
Work and the meaning and intended legal effect of CC0 on those rights.
|
|
||||||
|
|
||||||
1. Copyright and Related Rights. A Work made available under CC0 may be
|
|
||||||
protected by copyright and related or neighboring rights ("Copyright and
|
|
||||||
Related Rights"). Copyright and Related Rights include, but are not
|
|
||||||
limited to, the following:
|
|
||||||
|
|
||||||
i. the right to reproduce, adapt, distribute, perform, display,
|
|
||||||
communicate, and translate a Work;
|
|
||||||
ii. moral rights retained by the original author(s) and/or performer(s);
|
|
||||||
iii. publicity and privacy rights pertaining to a person's image or
|
|
||||||
likeness depicted in a Work;
|
|
||||||
iv. rights protecting against unfair competition in regards to a Work,
|
|
||||||
subject to the limitations in paragraph 4(a), below;
|
|
||||||
v. rights protecting the extraction, dissemination, use and reuse of data
|
|
||||||
in a Work;
|
|
||||||
vi. database rights (such as those arising under Directive 96/9/EC of the
|
|
||||||
European Parliament and of the Council of 11 March 1996 on the legal
|
|
||||||
protection of databases, and under any national implementation
|
|
||||||
thereof, including any amended or successor version of such
|
|
||||||
directive); and
|
|
||||||
vii. other similar, equivalent or corresponding rights throughout the
|
|
||||||
world based on applicable law or treaty, and any national
|
|
||||||
implementations thereof.
|
|
||||||
|
|
||||||
2. Waiver. To the greatest extent permitted by, but not in contravention
|
|
||||||
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
|
||||||
irrevocably and unconditionally waives, abandons, and surrenders all of
|
|
||||||
Affirmer's Copyright and Related Rights and associated claims and causes
|
|
||||||
of action, whether now known or unknown (including existing as well as
|
|
||||||
future claims and causes of action), in the Work (i) in all territories
|
|
||||||
worldwide, (ii) for the maximum duration provided by applicable law or
|
|
||||||
treaty (including future time extensions), (iii) in any current or future
|
|
||||||
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
|
||||||
including without limitation commercial, advertising or promotional
|
|
||||||
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
|
||||||
member of the public at large and to the detriment of Affirmer's heirs and
|
|
||||||
successors, fully intending that such Waiver shall not be subject to
|
|
||||||
revocation, rescission, cancellation, termination, or any other legal or
|
|
||||||
equitable action to disrupt the quiet enjoyment of the Work by the public
|
|
||||||
as contemplated by Affirmer's express Statement of Purpose.
|
|
||||||
|
|
||||||
3. Public License Fallback. Should any part of the Waiver for any reason
|
|
||||||
be judged legally invalid or ineffective under applicable law, then the
|
|
||||||
Waiver shall be preserved to the maximum extent permitted taking into
|
|
||||||
account Affirmer's express Statement of Purpose. In addition, to the
|
|
||||||
extent the Waiver is so judged Affirmer hereby grants to each affected
|
|
||||||
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
|
||||||
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
|
||||||
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
|
||||||
maximum duration provided by applicable law or treaty (including future
|
|
||||||
time extensions), (iii) in any current or future medium and for any number
|
|
||||||
of copies, and (iv) for any purpose whatsoever, including without
|
|
||||||
limitation commercial, advertising or promotional purposes (the
|
|
||||||
"License"). The License shall be deemed effective as of the date CC0 was
|
|
||||||
applied by Affirmer to the Work. Should any part of the License for any
|
|
||||||
reason be judged legally invalid or ineffective under applicable law, such
|
|
||||||
partial invalidity or ineffectiveness shall not invalidate the remainder
|
|
||||||
of the License, and in such case Affirmer hereby affirms that he or she
|
|
||||||
will not (i) exercise any of his or her remaining Copyright and Related
|
|
||||||
Rights in the Work or (ii) assert any associated claims and causes of
|
|
||||||
action with respect to the Work, in either case contrary to Affirmer's
|
|
||||||
express Statement of Purpose.
|
|
||||||
|
|
||||||
4. Limitations and Disclaimers.
|
|
||||||
|
|
||||||
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
|
||||||
surrendered, licensed or otherwise affected by this document.
|
|
||||||
b. Affirmer offers the Work as-is and makes no representations or
|
|
||||||
warranties of any kind concerning the Work, express, implied,
|
|
||||||
statutory or otherwise, including without limitation warranties of
|
|
||||||
title, merchantability, fitness for a particular purpose, non
|
|
||||||
infringement, or the absence of latent or other defects, accuracy, or
|
|
||||||
the present or absence of errors, whether or not discoverable, all to
|
|
||||||
the greatest extent permissible under applicable law.
|
|
||||||
c. Affirmer disclaims responsibility for clearing rights of other persons
|
|
||||||
that may apply to the Work or any use thereof, including without
|
|
||||||
limitation any person's Copyright and Related Rights in the Work.
|
|
||||||
Further, Affirmer disclaims responsibility for obtaining any necessary
|
|
||||||
consents, permissions or other rights required for any use of the
|
|
||||||
Work.
|
|
||||||
d. Affirmer understands and acknowledges that Creative Commons is not a
|
|
||||||
party to this document and has no duty or obligation with respect to
|
|
||||||
this CC0 or use of the Work.
|
|
||||||
|
|
|
@ -1,80 +0,0 @@
|
||||||
tzlocal
|
|
||||||
=======
|
|
||||||
|
|
||||||
This Python module returns a `tzinfo` object with the local timezone information under Unix and Win-32.
|
|
||||||
It requires `pytz`, and returns `pytz` `tzinfo` objects.
|
|
||||||
|
|
||||||
This module attempts to fix a glaring hole in `pytz`, that there is no way to
|
|
||||||
get the local timezone information, unless you know the zoneinfo name, and
|
|
||||||
under several Linux distros that's hard or impossible to figure out.
|
|
||||||
|
|
||||||
Also, with Windows different timezone system using pytz isn't of much use
|
|
||||||
unless you separately configure the zoneinfo timezone name.
|
|
||||||
|
|
||||||
With `tzlocal` you only need to call `get_localzone()` and you will get a
|
|
||||||
`tzinfo` object with the local time zone info. On some Unices you will still
|
|
||||||
not get to know what the timezone name is, but you don't need that when you
|
|
||||||
have the tzinfo file. However, if the timezone name is readily available it
|
|
||||||
will be used.
|
|
||||||
|
|
||||||
|
|
||||||
Supported systems
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
These are the systems that are in theory supported:
|
|
||||||
|
|
||||||
* Windows 2000 and later
|
|
||||||
|
|
||||||
* Any unix-like system with a /etc/localtime or /usr/local/etc/localtime
|
|
||||||
|
|
||||||
If you have one of the above systems and it does not work, it's a bug.
|
|
||||||
Please report it.
|
|
||||||
|
|
||||||
|
|
||||||
Usage
|
|
||||||
-----
|
|
||||||
|
|
||||||
Load the local timezone:
|
|
||||||
|
|
||||||
>>> from tzlocal import get_localzone
|
|
||||||
>>> tz = get_localzone()
|
|
||||||
>>> tz
|
|
||||||
<DstTzInfo 'Europe/Warsaw' WMT+1:24:00 STD>
|
|
||||||
|
|
||||||
Create a local datetime:
|
|
||||||
|
|
||||||
>>> from datetime import datetime
|
|
||||||
>>> dt = tz.localize(datetime.now())
|
|
||||||
>>> dt
|
|
||||||
datetime.datetime(2012, 9, 11, 14, 43, 42, 518871, tzinfo=<DstTzInfo 'Europe/Warsaw' CEST+2:00:00 DST>)
|
|
||||||
|
|
||||||
Lookup another timezone with `pytz`:
|
|
||||||
|
|
||||||
>>> import pytz
|
|
||||||
>>> eastern = pytz.timezone('US/Eastern')
|
|
||||||
|
|
||||||
Convert the datetime:
|
|
||||||
|
|
||||||
>>> dt.astimezone(eastern)
|
|
||||||
datetime.datetime(2012, 9, 11, 8, 43, 42, 518871, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)
|
|
||||||
|
|
||||||
|
|
||||||
Maintainer
|
|
||||||
----------
|
|
||||||
|
|
||||||
* Lennart Regebro, regebro@gmail.com
|
|
||||||
|
|
||||||
Contributors
|
|
||||||
------------
|
|
||||||
|
|
||||||
* Marc Van Olmen
|
|
||||||
* Benjamen Meyer
|
|
||||||
* Manuel Ebert
|
|
||||||
* Xiaokun Zhu
|
|
||||||
|
|
||||||
(Sorry if I forgot someone)
|
|
||||||
|
|
||||||
License
|
|
||||||
-------
|
|
||||||
|
|
||||||
* CC0 1.0 Universal http://creativecommons.org/publicdomain/zero/1.0/
|
|
|
@ -1,7 +1,5 @@
|
||||||
import sys
|
import sys
|
||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32':
|
||||||
from tzlocal.win32 import get_localzone, reload_localzone
|
from tzlocal.win32 import get_localzone, reload_localzone
|
||||||
elif 'darwin' in sys.platform:
|
|
||||||
from tzlocal.darwin import get_localzone, reload_localzone
|
|
||||||
else:
|
else:
|
||||||
from tzlocal.unix import get_localzone, reload_localzone
|
from tzlocal.unix import get_localzone, reload_localzone
|
||||||
|
|
|
@ -1,27 +0,0 @@
|
||||||
from __future__ import with_statement
|
|
||||||
import os
|
|
||||||
import pytz
|
|
||||||
|
|
||||||
_cache_tz = None
|
|
||||||
|
|
||||||
def _get_localzone():
|
|
||||||
tzname = os.popen("systemsetup -gettimezone").read().replace("Time Zone: ", "").strip()
|
|
||||||
if not tzname or tzname not in pytz.all_timezones_set:
|
|
||||||
# link will be something like /usr/share/zoneinfo/America/Los_Angeles.
|
|
||||||
link = os.readlink("/etc/localtime")
|
|
||||||
tzname = link[link.rfind("zoneinfo/") + 9:]
|
|
||||||
return pytz.timezone(tzname)
|
|
||||||
|
|
||||||
def get_localzone():
|
|
||||||
"""Get the computers configured local timezone, if any."""
|
|
||||||
global _cache_tz
|
|
||||||
if _cache_tz is None:
|
|
||||||
_cache_tz = _get_localzone()
|
|
||||||
return _cache_tz
|
|
||||||
|
|
||||||
def reload_localzone():
|
|
||||||
"""Reload the cached localzone. You need to call this if the timezone has changed."""
|
|
||||||
global _cache_tz
|
|
||||||
_cache_tz = _get_localzone()
|
|
||||||
return _cache_tz
|
|
||||||
|
|
|
@ -1,11 +1,19 @@
|
||||||
import sys
|
import mock
|
||||||
import os
|
import os
|
||||||
from datetime import datetime
|
|
||||||
import unittest
|
|
||||||
import pytz
|
import pytz
|
||||||
|
import sys
|
||||||
import tzlocal.unix
|
import tzlocal.unix
|
||||||
|
import unittest
|
||||||
|
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
class TzLocalTests(unittest.TestCase):
|
class TzLocalTests(unittest.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
if 'TZ' in os.environ:
|
||||||
|
del os.environ['TZ']
|
||||||
|
|
||||||
|
self.path = os.path.split(__file__)[0]
|
||||||
|
|
||||||
def test_env(self):
|
def test_env(self):
|
||||||
tz_harare = tzlocal.unix._tz_from_env(':Africa/Harare')
|
tz_harare = tzlocal.unix._tz_from_env(':Africa/Harare')
|
||||||
|
@ -15,8 +23,7 @@ class TzLocalTests(unittest.TestCase):
|
||||||
tz_harare = tzlocal.unix._tz_from_env('Africa/Harare')
|
tz_harare = tzlocal.unix._tz_from_env('Africa/Harare')
|
||||||
self.assertEqual(tz_harare.zone, 'Africa/Harare')
|
self.assertEqual(tz_harare.zone, 'Africa/Harare')
|
||||||
|
|
||||||
local_path = os.path.split(__file__)[0]
|
tz_local = tzlocal.unix._tz_from_env(':' + os.path.join(self.path, 'test_data', 'Harare'))
|
||||||
tz_local = tzlocal.unix._tz_from_env(':' + os.path.join(local_path, 'test_data', 'Harare'))
|
|
||||||
self.assertEqual(tz_local.zone, 'local')
|
self.assertEqual(tz_local.zone, 'local')
|
||||||
# Make sure the local timezone is the same as the Harare one above.
|
# Make sure the local timezone is the same as the Harare one above.
|
||||||
# We test this with a past date, so that we don't run into future changes
|
# We test this with a past date, so that we don't run into future changes
|
||||||
|
@ -27,31 +34,68 @@ class TzLocalTests(unittest.TestCase):
|
||||||
# Non-zoneinfo timezones are not supported in the TZ environment.
|
# Non-zoneinfo timezones are not supported in the TZ environment.
|
||||||
self.assertRaises(pytz.UnknownTimeZoneError, tzlocal.unix._tz_from_env, 'GMT+03:00')
|
self.assertRaises(pytz.UnknownTimeZoneError, tzlocal.unix._tz_from_env, 'GMT+03:00')
|
||||||
|
|
||||||
|
# Test the _try function
|
||||||
|
os.environ['TZ'] = 'Africa/Harare'
|
||||||
|
tz_harare = tzlocal.unix._try_tz_from_env()
|
||||||
|
self.assertEqual(tz_harare.zone, 'Africa/Harare')
|
||||||
|
# With a zone that doesn't exist
|
||||||
|
os.environ['TZ'] = 'Just Nonsense'
|
||||||
|
tz_harare = tzlocal.unix._try_tz_from_env()
|
||||||
|
self.assertIsNone(tz_harare)
|
||||||
|
|
||||||
|
|
||||||
def test_timezone(self):
|
def test_timezone(self):
|
||||||
# Most versions of Ubuntu
|
# Most versions of Ubuntu
|
||||||
local_path = os.path.split(__file__)[0]
|
|
||||||
tz = tzlocal.unix._get_localzone(_root=os.path.join(local_path, 'test_data', 'timezone'))
|
tz = tzlocal.unix._get_localzone(_root=os.path.join(self.path, 'test_data', 'timezone'))
|
||||||
self.assertEqual(tz.zone, 'Africa/Harare')
|
self.assertEqual(tz.zone, 'Africa/Harare')
|
||||||
|
|
||||||
def test_zone_setting(self):
|
def test_zone_setting(self):
|
||||||
# A ZONE setting in /etc/sysconfig/clock, f ex CentOS
|
# A ZONE setting in /etc/sysconfig/clock, f ex CentOS
|
||||||
local_path = os.path.split(__file__)[0]
|
|
||||||
tz = tzlocal.unix._get_localzone(_root=os.path.join(local_path, 'test_data', 'zone_setting'))
|
tz = tzlocal.unix._get_localzone(_root=os.path.join(self.path, 'test_data', 'zone_setting'))
|
||||||
self.assertEqual(tz.zone, 'Africa/Harare')
|
self.assertEqual(tz.zone, 'Africa/Harare')
|
||||||
|
|
||||||
def test_timezone_setting(self):
|
def test_timezone_setting(self):
|
||||||
# A ZONE setting in /etc/conf.d/clock, f ex Gentoo
|
# A ZONE setting in /etc/conf.d/clock, f ex Gentoo
|
||||||
local_path = os.path.split(__file__)[0]
|
|
||||||
tz = tzlocal.unix._get_localzone(_root=os.path.join(local_path, 'test_data', 'timezone_setting'))
|
tz = tzlocal.unix._get_localzone(_root=os.path.join(self.path, 'test_data', 'timezone_setting'))
|
||||||
|
self.assertEqual(tz.zone, 'Africa/Harare')
|
||||||
|
|
||||||
|
def test_symlink_localtime(self):
|
||||||
|
# A ZONE setting in the target path of a symbolic linked localtime, f ex systemd distributions
|
||||||
|
|
||||||
|
tz = tzlocal.unix._get_localzone(_root=os.path.join(self.path, 'test_data', 'symlink_localtime'))
|
||||||
|
self.assertEqual(tz.zone, 'Africa/Harare')
|
||||||
|
|
||||||
|
def test_vardbzoneinfo_setting(self):
|
||||||
|
# A ZONE setting in /etc/conf.d/clock, f ex Gentoo
|
||||||
|
|
||||||
|
tz = tzlocal.unix._get_localzone(_root=os.path.join(self.path, 'test_data', 'vardbzoneinfo'))
|
||||||
self.assertEqual(tz.zone, 'Africa/Harare')
|
self.assertEqual(tz.zone, 'Africa/Harare')
|
||||||
|
|
||||||
def test_only_localtime(self):
|
def test_only_localtime(self):
|
||||||
local_path = os.path.split(__file__)[0]
|
tz = tzlocal.unix._get_localzone(_root=os.path.join(self.path, 'test_data', 'localtime'))
|
||||||
tz = tzlocal.unix._get_localzone(_root=os.path.join(local_path, 'test_data', 'localtime'))
|
|
||||||
self.assertEqual(tz.zone, 'local')
|
self.assertEqual(tz.zone, 'local')
|
||||||
dt = datetime(2012, 1, 1, 5)
|
dt = datetime(2012, 1, 1, 5)
|
||||||
self.assertEqual(pytz.timezone('Africa/Harare').localize(dt), tz.localize(dt))
|
self.assertEqual(pytz.timezone('Africa/Harare').localize(dt), tz.localize(dt))
|
||||||
|
|
||||||
|
def test_get_reload(self):
|
||||||
|
os.environ['TZ'] = 'Africa/Harare'
|
||||||
|
tz_harare = tzlocal.unix.get_localzone()
|
||||||
|
self.assertEqual(tz_harare.zone, 'Africa/Harare')
|
||||||
|
# Changing the TZ makes no difference, because it's cached
|
||||||
|
os.environ['TZ'] = 'Africa/Johannesburg'
|
||||||
|
tz_harare = tzlocal.unix.get_localzone()
|
||||||
|
self.assertEqual(tz_harare.zone, 'Africa/Harare')
|
||||||
|
# So we reload it
|
||||||
|
tz_harare = tzlocal.unix.reload_localzone()
|
||||||
|
self.assertEqual(tz_harare.zone, 'Africa/Johannesburg')
|
||||||
|
|
||||||
|
def test_fail(self):
|
||||||
|
with self.assertRaises(pytz.exceptions.UnknownTimeZoneError):
|
||||||
|
tz = tzlocal.unix._get_localzone(_root=os.path.join(self.path, 'test_data'))
|
||||||
|
|
||||||
if sys.platform == 'win32':
|
if sys.platform == 'win32':
|
||||||
|
|
||||||
import tzlocal.win32
|
import tzlocal.win32
|
||||||
|
@ -60,5 +104,31 @@ if sys.platform == 'win32':
|
||||||
def test_win32(self):
|
def test_win32(self):
|
||||||
tzlocal.win32.get_localzone()
|
tzlocal.win32.get_localzone()
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
|
class TzWin32Tests(unittest.TestCase):
|
||||||
|
|
||||||
|
def test_win32_on_unix(self):
|
||||||
|
# Yes, winreg is all mocked out, but this test means we at least
|
||||||
|
# catch syntax errors, etc.
|
||||||
|
winreg = mock.MagicMock()
|
||||||
|
winreg.OpenKey = mock.MagicMock()
|
||||||
|
winreg.OpenKey.close = mock.MagicMock()
|
||||||
|
winreg.QueryInfoKey = mock.MagicMock(return_value=(1, 1))
|
||||||
|
winreg.EnumValue = mock.MagicMock(
|
||||||
|
return_value=('TimeZoneKeyName','Belarus Standard Time'))
|
||||||
|
winreg.EnumKey = mock.Mock(return_value='Bahia Standard Time')
|
||||||
|
sys.modules['winreg'] = winreg
|
||||||
|
import tzlocal.win32
|
||||||
|
tz = tzlocal.win32.get_localzone()
|
||||||
|
self.assertEqual(tz.zone, 'Europe/Minsk')
|
||||||
|
|
||||||
|
tzlocal.win32.valuestodict = mock.Mock(return_value={
|
||||||
|
'StandardName': 'Mocked Standard Time',
|
||||||
|
'Std': 'Mocked Standard Time',
|
||||||
|
})
|
||||||
|
tz = tzlocal.win32.reload_localzone()
|
||||||
|
self.assertEqual(tz.zone, 'America/Bahia')
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
|
|
@ -1,4 +1,3 @@
|
||||||
from __future__ import with_statement
|
|
||||||
import os
|
import os
|
||||||
import re
|
import re
|
||||||
import pytz
|
import pytz
|
||||||
|
@ -24,6 +23,16 @@ def _tz_from_env(tzenv):
|
||||||
"tzlocal() does not support non-zoneinfo timezones like %s. \n"
|
"tzlocal() does not support non-zoneinfo timezones like %s. \n"
|
||||||
"Please use a timezone in the form of Continent/City")
|
"Please use a timezone in the form of Continent/City")
|
||||||
|
|
||||||
|
|
||||||
|
def _try_tz_from_env():
|
||||||
|
tzenv = os.environ.get('TZ')
|
||||||
|
if tzenv:
|
||||||
|
try:
|
||||||
|
return _tz_from_env(tzenv)
|
||||||
|
except pytz.UnknownTimeZoneError:
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
def _get_localzone(_root='/'):
|
def _get_localzone(_root='/'):
|
||||||
"""Tries to find the local timezone configuration.
|
"""Tries to find the local timezone configuration.
|
||||||
|
|
||||||
|
@ -35,23 +44,23 @@ def _get_localzone(_root='/'):
|
||||||
beneath the _root directory. This is primarily used by the tests.
|
beneath the _root directory. This is primarily used by the tests.
|
||||||
In normal usage you call the function without parameters."""
|
In normal usage you call the function without parameters."""
|
||||||
|
|
||||||
tzenv = os.environ.get('TZ')
|
tzenv = _try_tz_from_env()
|
||||||
if tzenv:
|
if tzenv:
|
||||||
try:
|
return tzenv
|
||||||
return _tz_from_env(tzenv)
|
|
||||||
except pytz.UnknownTimeZoneError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
# Now look for distribution specific configuration files
|
# Now look for distribution specific configuration files
|
||||||
# that contain the timezone name.
|
# that contain the timezone name.
|
||||||
tzpath = os.path.join(_root, 'etc/timezone')
|
for configfile in ('etc/timezone', 'var/db/zoneinfo'):
|
||||||
if os.path.exists(tzpath):
|
tzpath = os.path.join(_root, configfile)
|
||||||
with open(tzpath, 'rb') as tzfile:
|
if os.path.exists(tzpath):
|
||||||
data = tzfile.read()
|
with open(tzpath, 'rb') as tzfile:
|
||||||
|
data = tzfile.read()
|
||||||
|
|
||||||
|
# Issue #3 was that /etc/timezone was a zoneinfo file.
|
||||||
|
# That's a misconfiguration, but we need to handle it gracefully:
|
||||||
|
if data[:5] == 'TZif2':
|
||||||
|
continue
|
||||||
|
|
||||||
# Issue #3 was that /etc/timezone was a zoneinfo file.
|
|
||||||
# That's a misconfiguration, but we need to handle it gracefully:
|
|
||||||
if data[:5] != 'TZif2':
|
|
||||||
etctz = data.strip().decode()
|
etctz = data.strip().decode()
|
||||||
# Get rid of host definitions and comments:
|
# Get rid of host definitions and comments:
|
||||||
if ' ' in etctz:
|
if ' ' in etctz:
|
||||||
|
@ -90,6 +99,20 @@ def _get_localzone(_root='/'):
|
||||||
# We found a timezone
|
# We found a timezone
|
||||||
return pytz.timezone(etctz.replace(' ', '_'))
|
return pytz.timezone(etctz.replace(' ', '_'))
|
||||||
|
|
||||||
|
# systemd distributions use symlinks that include the zone name,
|
||||||
|
# see manpage of localtime(5) and timedatectl(1)
|
||||||
|
tzpath = os.path.join(_root, 'etc/localtime')
|
||||||
|
if os.path.exists(tzpath) and os.path.islink(tzpath):
|
||||||
|
tzpath = os.path.realpath(tzpath)
|
||||||
|
start = tzpath.find("/")+1
|
||||||
|
while start is not 0:
|
||||||
|
tzpath = tzpath[start:]
|
||||||
|
try:
|
||||||
|
return pytz.timezone(tzpath)
|
||||||
|
except pytz.UnknownTimeZoneError:
|
||||||
|
pass
|
||||||
|
start = tzpath.find("/")+1
|
||||||
|
|
||||||
# No explicit setting existed. Use localtime
|
# No explicit setting existed. Use localtime
|
||||||
for filename in ('etc/localtime', 'usr/local/etc/localtime'):
|
for filename in ('etc/localtime', 'usr/local/etc/localtime'):
|
||||||
tzpath = os.path.join(_root, filename)
|
tzpath = os.path.join(_root, filename)
|
||||||
|
|
|
@ -29,6 +29,7 @@ def get_localzone_name():
|
||||||
localtz = winreg.OpenKey(handle, TZLOCALKEYNAME)
|
localtz = winreg.OpenKey(handle, TZLOCALKEYNAME)
|
||||||
keyvalues = valuestodict(localtz)
|
keyvalues = valuestodict(localtz)
|
||||||
localtz.Close()
|
localtz.Close()
|
||||||
|
|
||||||
if 'TimeZoneKeyName' in keyvalues:
|
if 'TimeZoneKeyName' in keyvalues:
|
||||||
# Windows 7 (and Vista?)
|
# Windows 7 (and Vista?)
|
||||||
|
|
||||||
|
@ -91,3 +92,4 @@ def reload_localzone():
|
||||||
"""Reload the cached localzone. You need to call this if the timezone has changed."""
|
"""Reload the cached localzone. You need to call this if the timezone has changed."""
|
||||||
global _cache_tz
|
global _cache_tz
|
||||||
_cache_tz = pytz.timezone(get_localzone_name())
|
_cache_tz = pytz.timezone(get_localzone_name())
|
||||||
|
return _cache_tz
|
||||||
|
|
|
@ -1,19 +1,24 @@
|
||||||
# This file is autogenerated by the get_windows_info.py script
|
# This file is autogenerated by the update_windows_mapping.py script
|
||||||
# Do not edit.
|
# Do not edit.
|
||||||
win_tz = {'AUS Central Standard Time': 'Australia/Darwin',
|
win_tz = {'AUS Central Standard Time': 'Australia/Darwin',
|
||||||
'AUS Eastern Standard Time': 'Australia/Sydney',
|
'AUS Eastern Standard Time': 'Australia/Sydney',
|
||||||
'Afghanistan Standard Time': 'Asia/Kabul',
|
'Afghanistan Standard Time': 'Asia/Kabul',
|
||||||
'Alaskan Standard Time': 'America/Anchorage',
|
'Alaskan Standard Time': 'America/Anchorage',
|
||||||
|
'Aleutian Standard Time': 'America/Adak',
|
||||||
|
'Altai Standard Time': 'Asia/Barnaul',
|
||||||
'Arab Standard Time': 'Asia/Riyadh',
|
'Arab Standard Time': 'Asia/Riyadh',
|
||||||
'Arabian Standard Time': 'Asia/Dubai',
|
'Arabian Standard Time': 'Asia/Dubai',
|
||||||
'Arabic Standard Time': 'Asia/Baghdad',
|
'Arabic Standard Time': 'Asia/Baghdad',
|
||||||
'Argentina Standard Time': 'America/Buenos_Aires',
|
'Argentina Standard Time': 'America/Buenos_Aires',
|
||||||
|
'Astrakhan Standard Time': 'Europe/Astrakhan',
|
||||||
'Atlantic Standard Time': 'America/Halifax',
|
'Atlantic Standard Time': 'America/Halifax',
|
||||||
|
'Aus Central W. Standard Time': 'Australia/Eucla',
|
||||||
'Azerbaijan Standard Time': 'Asia/Baku',
|
'Azerbaijan Standard Time': 'Asia/Baku',
|
||||||
'Azores Standard Time': 'Atlantic/Azores',
|
'Azores Standard Time': 'Atlantic/Azores',
|
||||||
'Bahia Standard Time': 'America/Bahia',
|
'Bahia Standard Time': 'America/Bahia',
|
||||||
'Bangladesh Standard Time': 'Asia/Dhaka',
|
'Bangladesh Standard Time': 'Asia/Dhaka',
|
||||||
'Belarus Standard Time': 'Europe/Minsk',
|
'Belarus Standard Time': 'Europe/Minsk',
|
||||||
|
'Bougainville Standard Time': 'Pacific/Bougainville',
|
||||||
'Canada Central Standard Time': 'America/Regina',
|
'Canada Central Standard Time': 'America/Regina',
|
||||||
'Cape Verde Standard Time': 'Atlantic/Cape_Verde',
|
'Cape Verde Standard Time': 'Atlantic/Cape_Verde',
|
||||||
'Caucasus Standard Time': 'Asia/Yerevan',
|
'Caucasus Standard Time': 'Asia/Yerevan',
|
||||||
|
@ -26,12 +31,17 @@ win_tz = {'AUS Central Standard Time': 'Australia/Darwin',
|
||||||
'Central Pacific Standard Time': 'Pacific/Guadalcanal',
|
'Central Pacific Standard Time': 'Pacific/Guadalcanal',
|
||||||
'Central Standard Time': 'America/Chicago',
|
'Central Standard Time': 'America/Chicago',
|
||||||
'Central Standard Time (Mexico)': 'America/Mexico_City',
|
'Central Standard Time (Mexico)': 'America/Mexico_City',
|
||||||
|
'Chatham Islands Standard Time': 'Pacific/Chatham',
|
||||||
'China Standard Time': 'Asia/Shanghai',
|
'China Standard Time': 'Asia/Shanghai',
|
||||||
|
'Cuba Standard Time': 'America/Havana',
|
||||||
'Dateline Standard Time': 'Etc/GMT+12',
|
'Dateline Standard Time': 'Etc/GMT+12',
|
||||||
'E. Africa Standard Time': 'Africa/Nairobi',
|
'E. Africa Standard Time': 'Africa/Nairobi',
|
||||||
'E. Australia Standard Time': 'Australia/Brisbane',
|
'E. Australia Standard Time': 'Australia/Brisbane',
|
||||||
|
'E. Europe Standard Time': 'Europe/Chisinau',
|
||||||
'E. South America Standard Time': 'America/Sao_Paulo',
|
'E. South America Standard Time': 'America/Sao_Paulo',
|
||||||
|
'Easter Island Standard Time': 'Pacific/Easter',
|
||||||
'Eastern Standard Time': 'America/New_York',
|
'Eastern Standard Time': 'America/New_York',
|
||||||
|
'Eastern Standard Time (Mexico)': 'America/Cancun',
|
||||||
'Egypt Standard Time': 'Africa/Cairo',
|
'Egypt Standard Time': 'Africa/Cairo',
|
||||||
'Ekaterinburg Standard Time': 'Asia/Yekaterinburg',
|
'Ekaterinburg Standard Time': 'Asia/Yekaterinburg',
|
||||||
'FLE Standard Time': 'Europe/Kiev',
|
'FLE Standard Time': 'Europe/Kiev',
|
||||||
|
@ -41,6 +51,7 @@ win_tz = {'AUS Central Standard Time': 'Australia/Darwin',
|
||||||
'Georgian Standard Time': 'Asia/Tbilisi',
|
'Georgian Standard Time': 'Asia/Tbilisi',
|
||||||
'Greenland Standard Time': 'America/Godthab',
|
'Greenland Standard Time': 'America/Godthab',
|
||||||
'Greenwich Standard Time': 'Atlantic/Reykjavik',
|
'Greenwich Standard Time': 'Atlantic/Reykjavik',
|
||||||
|
'Haiti Standard Time': 'America/Port-au-Prince',
|
||||||
'Hawaiian Standard Time': 'Pacific/Honolulu',
|
'Hawaiian Standard Time': 'Pacific/Honolulu',
|
||||||
'India Standard Time': 'Asia/Calcutta',
|
'India Standard Time': 'Asia/Calcutta',
|
||||||
'Iran Standard Time': 'Asia/Tehran',
|
'Iran Standard Time': 'Asia/Tehran',
|
||||||
|
@ -50,7 +61,10 @@ win_tz = {'AUS Central Standard Time': 'Australia/Darwin',
|
||||||
'Korea Standard Time': 'Asia/Seoul',
|
'Korea Standard Time': 'Asia/Seoul',
|
||||||
'Libya Standard Time': 'Africa/Tripoli',
|
'Libya Standard Time': 'Africa/Tripoli',
|
||||||
'Line Islands Standard Time': 'Pacific/Kiritimati',
|
'Line Islands Standard Time': 'Pacific/Kiritimati',
|
||||||
|
'Lord Howe Standard Time': 'Australia/Lord_Howe',
|
||||||
'Magadan Standard Time': 'Asia/Magadan',
|
'Magadan Standard Time': 'Asia/Magadan',
|
||||||
|
'Magallanes Standard Time': 'America/Punta_Arenas',
|
||||||
|
'Marquesas Standard Time': 'Pacific/Marquesas',
|
||||||
'Mauritius Standard Time': 'Indian/Mauritius',
|
'Mauritius Standard Time': 'Indian/Mauritius',
|
||||||
'Middle East Standard Time': 'Asia/Beirut',
|
'Middle East Standard Time': 'Asia/Beirut',
|
||||||
'Montevideo Standard Time': 'America/Montevideo',
|
'Montevideo Standard Time': 'America/Montevideo',
|
||||||
|
@ -63,11 +77,14 @@ win_tz = {'AUS Central Standard Time': 'Australia/Darwin',
|
||||||
'Nepal Standard Time': 'Asia/Katmandu',
|
'Nepal Standard Time': 'Asia/Katmandu',
|
||||||
'New Zealand Standard Time': 'Pacific/Auckland',
|
'New Zealand Standard Time': 'Pacific/Auckland',
|
||||||
'Newfoundland Standard Time': 'America/St_Johns',
|
'Newfoundland Standard Time': 'America/St_Johns',
|
||||||
|
'Norfolk Standard Time': 'Pacific/Norfolk',
|
||||||
'North Asia East Standard Time': 'Asia/Irkutsk',
|
'North Asia East Standard Time': 'Asia/Irkutsk',
|
||||||
'North Asia Standard Time': 'Asia/Krasnoyarsk',
|
'North Asia Standard Time': 'Asia/Krasnoyarsk',
|
||||||
|
'North Korea Standard Time': 'Asia/Pyongyang',
|
||||||
|
'Omsk Standard Time': 'Asia/Omsk',
|
||||||
'Pacific SA Standard Time': 'America/Santiago',
|
'Pacific SA Standard Time': 'America/Santiago',
|
||||||
'Pacific Standard Time': 'America/Los_Angeles',
|
'Pacific Standard Time': 'America/Los_Angeles',
|
||||||
'Pacific Standard Time (Mexico)': 'America/Santa_Isabel',
|
'Pacific Standard Time (Mexico)': 'America/Tijuana',
|
||||||
'Pakistan Standard Time': 'Asia/Karachi',
|
'Pakistan Standard Time': 'Asia/Karachi',
|
||||||
'Paraguay Standard Time': 'America/Asuncion',
|
'Paraguay Standard Time': 'America/Asuncion',
|
||||||
'Romance Standard Time': 'Europe/Paris',
|
'Romance Standard Time': 'Europe/Paris',
|
||||||
|
@ -79,21 +96,31 @@ win_tz = {'AUS Central Standard Time': 'Australia/Darwin',
|
||||||
'SA Pacific Standard Time': 'America/Bogota',
|
'SA Pacific Standard Time': 'America/Bogota',
|
||||||
'SA Western Standard Time': 'America/La_Paz',
|
'SA Western Standard Time': 'America/La_Paz',
|
||||||
'SE Asia Standard Time': 'Asia/Bangkok',
|
'SE Asia Standard Time': 'Asia/Bangkok',
|
||||||
|
'Saint Pierre Standard Time': 'America/Miquelon',
|
||||||
|
'Sakhalin Standard Time': 'Asia/Sakhalin',
|
||||||
'Samoa Standard Time': 'Pacific/Apia',
|
'Samoa Standard Time': 'Pacific/Apia',
|
||||||
|
'Saratov Standard Time': 'Europe/Saratov',
|
||||||
'Singapore Standard Time': 'Asia/Singapore',
|
'Singapore Standard Time': 'Asia/Singapore',
|
||||||
'South Africa Standard Time': 'Africa/Johannesburg',
|
'South Africa Standard Time': 'Africa/Johannesburg',
|
||||||
'Sri Lanka Standard Time': 'Asia/Colombo',
|
'Sri Lanka Standard Time': 'Asia/Colombo',
|
||||||
'Syria Standard Time': 'Asia/Damascus',
|
'Syria Standard Time': 'Asia/Damascus',
|
||||||
'Taipei Standard Time': 'Asia/Taipei',
|
'Taipei Standard Time': 'Asia/Taipei',
|
||||||
'Tasmania Standard Time': 'Australia/Hobart',
|
'Tasmania Standard Time': 'Australia/Hobart',
|
||||||
|
'Tocantins Standard Time': 'America/Araguaina',
|
||||||
'Tokyo Standard Time': 'Asia/Tokyo',
|
'Tokyo Standard Time': 'Asia/Tokyo',
|
||||||
|
'Tomsk Standard Time': 'Asia/Tomsk',
|
||||||
'Tonga Standard Time': 'Pacific/Tongatapu',
|
'Tonga Standard Time': 'Pacific/Tongatapu',
|
||||||
|
'Transbaikal Standard Time': 'Asia/Chita',
|
||||||
'Turkey Standard Time': 'Europe/Istanbul',
|
'Turkey Standard Time': 'Europe/Istanbul',
|
||||||
|
'Turks And Caicos Standard Time': 'America/Grand_Turk',
|
||||||
'US Eastern Standard Time': 'America/Indianapolis',
|
'US Eastern Standard Time': 'America/Indianapolis',
|
||||||
'US Mountain Standard Time': 'America/Phoenix',
|
'US Mountain Standard Time': 'America/Phoenix',
|
||||||
'UTC': 'Etc/GMT',
|
'UTC': 'Etc/GMT',
|
||||||
'UTC+12': 'Etc/GMT-12',
|
'UTC+12': 'Etc/GMT-12',
|
||||||
|
'UTC+13': 'Etc/GMT-13',
|
||||||
'UTC-02': 'Etc/GMT+2',
|
'UTC-02': 'Etc/GMT+2',
|
||||||
|
'UTC-08': 'Etc/GMT+8',
|
||||||
|
'UTC-09': 'Etc/GMT+9',
|
||||||
'UTC-11': 'Etc/GMT+11',
|
'UTC-11': 'Etc/GMT+11',
|
||||||
'Ulaanbaatar Standard Time': 'Asia/Ulaanbaatar',
|
'Ulaanbaatar Standard Time': 'Asia/Ulaanbaatar',
|
||||||
'Venezuela Standard Time': 'America/Caracas',
|
'Venezuela Standard Time': 'America/Caracas',
|
||||||
|
@ -101,7 +128,9 @@ win_tz = {'AUS Central Standard Time': 'Australia/Darwin',
|
||||||
'W. Australia Standard Time': 'Australia/Perth',
|
'W. Australia Standard Time': 'Australia/Perth',
|
||||||
'W. Central Africa Standard Time': 'Africa/Lagos',
|
'W. Central Africa Standard Time': 'Africa/Lagos',
|
||||||
'W. Europe Standard Time': 'Europe/Berlin',
|
'W. Europe Standard Time': 'Europe/Berlin',
|
||||||
|
'W. Mongolia Standard Time': 'Asia/Hovd',
|
||||||
'West Asia Standard Time': 'Asia/Tashkent',
|
'West Asia Standard Time': 'Asia/Tashkent',
|
||||||
|
'West Bank Standard Time': 'Asia/Hebron',
|
||||||
'West Pacific Standard Time': 'Pacific/Port_Moresby',
|
'West Pacific Standard Time': 'Pacific/Port_Moresby',
|
||||||
'Yakutsk Standard Time': 'Asia/Yakutsk'}
|
'Yakutsk Standard Time': 'Asia/Yakutsk'}
|
||||||
|
|
||||||
|
@ -157,13 +186,15 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'Africa/Ouagadougou': 'Greenwich Standard Time',
|
'Africa/Ouagadougou': 'Greenwich Standard Time',
|
||||||
'Africa/Porto-Novo': 'W. Central Africa Standard Time',
|
'Africa/Porto-Novo': 'W. Central Africa Standard Time',
|
||||||
'Africa/Sao_Tome': 'Greenwich Standard Time',
|
'Africa/Sao_Tome': 'Greenwich Standard Time',
|
||||||
|
'Africa/Timbuktu': 'Greenwich Standard Time',
|
||||||
'Africa/Tripoli': 'Libya Standard Time',
|
'Africa/Tripoli': 'Libya Standard Time',
|
||||||
'Africa/Tunis': 'W. Central Africa Standard Time',
|
'Africa/Tunis': 'W. Central Africa Standard Time',
|
||||||
'Africa/Windhoek': 'Namibia Standard Time',
|
'Africa/Windhoek': 'Namibia Standard Time',
|
||||||
|
'America/Adak': 'Aleutian Standard Time',
|
||||||
'America/Anchorage': 'Alaskan Standard Time',
|
'America/Anchorage': 'Alaskan Standard Time',
|
||||||
'America/Anguilla': 'SA Western Standard Time',
|
'America/Anguilla': 'SA Western Standard Time',
|
||||||
'America/Antigua': 'SA Western Standard Time',
|
'America/Antigua': 'SA Western Standard Time',
|
||||||
'America/Araguaina': 'SA Eastern Standard Time',
|
'America/Araguaina': 'Tocantins Standard Time',
|
||||||
'America/Argentina/La_Rioja': 'Argentina Standard Time',
|
'America/Argentina/La_Rioja': 'Argentina Standard Time',
|
||||||
'America/Argentina/Rio_Gallegos': 'Argentina Standard Time',
|
'America/Argentina/Rio_Gallegos': 'Argentina Standard Time',
|
||||||
'America/Argentina/Salta': 'Argentina Standard Time',
|
'America/Argentina/Salta': 'Argentina Standard Time',
|
||||||
|
@ -173,6 +204,7 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'America/Argentina/Ushuaia': 'Argentina Standard Time',
|
'America/Argentina/Ushuaia': 'Argentina Standard Time',
|
||||||
'America/Aruba': 'SA Western Standard Time',
|
'America/Aruba': 'SA Western Standard Time',
|
||||||
'America/Asuncion': 'Paraguay Standard Time',
|
'America/Asuncion': 'Paraguay Standard Time',
|
||||||
|
'America/Atka': 'Aleutian Standard Time',
|
||||||
'America/Bahia': 'Bahia Standard Time',
|
'America/Bahia': 'Bahia Standard Time',
|
||||||
'America/Bahia_Banderas': 'Central Standard Time (Mexico)',
|
'America/Bahia_Banderas': 'Central Standard Time (Mexico)',
|
||||||
'America/Barbados': 'SA Western Standard Time',
|
'America/Barbados': 'SA Western Standard Time',
|
||||||
|
@ -185,7 +217,7 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'America/Buenos_Aires': 'Argentina Standard Time',
|
'America/Buenos_Aires': 'Argentina Standard Time',
|
||||||
'America/Cambridge_Bay': 'Mountain Standard Time',
|
'America/Cambridge_Bay': 'Mountain Standard Time',
|
||||||
'America/Campo_Grande': 'Central Brazilian Standard Time',
|
'America/Campo_Grande': 'Central Brazilian Standard Time',
|
||||||
'America/Cancun': 'Central Standard Time (Mexico)',
|
'America/Cancun': 'Eastern Standard Time (Mexico)',
|
||||||
'America/Caracas': 'Venezuela Standard Time',
|
'America/Caracas': 'Venezuela Standard Time',
|
||||||
'America/Catamarca': 'Argentina Standard Time',
|
'America/Catamarca': 'Argentina Standard Time',
|
||||||
'America/Cayenne': 'SA Eastern Standard Time',
|
'America/Cayenne': 'SA Eastern Standard Time',
|
||||||
|
@ -207,18 +239,20 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'America/Edmonton': 'Mountain Standard Time',
|
'America/Edmonton': 'Mountain Standard Time',
|
||||||
'America/Eirunepe': 'SA Pacific Standard Time',
|
'America/Eirunepe': 'SA Pacific Standard Time',
|
||||||
'America/El_Salvador': 'Central America Standard Time',
|
'America/El_Salvador': 'Central America Standard Time',
|
||||||
|
'America/Ensenada': 'Pacific Standard Time (Mexico)',
|
||||||
|
'America/Fort_Nelson': 'US Mountain Standard Time',
|
||||||
'America/Fortaleza': 'SA Eastern Standard Time',
|
'America/Fortaleza': 'SA Eastern Standard Time',
|
||||||
'America/Glace_Bay': 'Atlantic Standard Time',
|
'America/Glace_Bay': 'Atlantic Standard Time',
|
||||||
'America/Godthab': 'Greenland Standard Time',
|
'America/Godthab': 'Greenland Standard Time',
|
||||||
'America/Goose_Bay': 'Atlantic Standard Time',
|
'America/Goose_Bay': 'Atlantic Standard Time',
|
||||||
'America/Grand_Turk': 'SA Western Standard Time',
|
'America/Grand_Turk': 'Turks And Caicos Standard Time',
|
||||||
'America/Grenada': 'SA Western Standard Time',
|
'America/Grenada': 'SA Western Standard Time',
|
||||||
'America/Guadeloupe': 'SA Western Standard Time',
|
'America/Guadeloupe': 'SA Western Standard Time',
|
||||||
'America/Guatemala': 'Central America Standard Time',
|
'America/Guatemala': 'Central America Standard Time',
|
||||||
'America/Guayaquil': 'SA Pacific Standard Time',
|
'America/Guayaquil': 'SA Pacific Standard Time',
|
||||||
'America/Guyana': 'SA Western Standard Time',
|
'America/Guyana': 'SA Western Standard Time',
|
||||||
'America/Halifax': 'Atlantic Standard Time',
|
'America/Halifax': 'Atlantic Standard Time',
|
||||||
'America/Havana': 'Eastern Standard Time',
|
'America/Havana': 'Cuba Standard Time',
|
||||||
'America/Hermosillo': 'US Mountain Standard Time',
|
'America/Hermosillo': 'US Mountain Standard Time',
|
||||||
'America/Indiana/Knox': 'Central Standard Time',
|
'America/Indiana/Knox': 'Central Standard Time',
|
||||||
'America/Indiana/Marengo': 'US Eastern Standard Time',
|
'America/Indiana/Marengo': 'US Eastern Standard Time',
|
||||||
|
@ -234,6 +268,7 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'America/Jujuy': 'Argentina Standard Time',
|
'America/Jujuy': 'Argentina Standard Time',
|
||||||
'America/Juneau': 'Alaskan Standard Time',
|
'America/Juneau': 'Alaskan Standard Time',
|
||||||
'America/Kentucky/Monticello': 'Eastern Standard Time',
|
'America/Kentucky/Monticello': 'Eastern Standard Time',
|
||||||
|
'America/Knox_IN': 'Central Standard Time',
|
||||||
'America/Kralendijk': 'SA Western Standard Time',
|
'America/Kralendijk': 'SA Western Standard Time',
|
||||||
'America/La_Paz': 'SA Western Standard Time',
|
'America/La_Paz': 'SA Western Standard Time',
|
||||||
'America/Lima': 'SA Pacific Standard Time',
|
'America/Lima': 'SA Pacific Standard Time',
|
||||||
|
@ -250,7 +285,9 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'America/Mendoza': 'Argentina Standard Time',
|
'America/Mendoza': 'Argentina Standard Time',
|
||||||
'America/Menominee': 'Central Standard Time',
|
'America/Menominee': 'Central Standard Time',
|
||||||
'America/Merida': 'Central Standard Time (Mexico)',
|
'America/Merida': 'Central Standard Time (Mexico)',
|
||||||
|
'America/Metlakatla': 'Alaskan Standard Time',
|
||||||
'America/Mexico_City': 'Central Standard Time (Mexico)',
|
'America/Mexico_City': 'Central Standard Time (Mexico)',
|
||||||
|
'America/Miquelon': 'Saint Pierre Standard Time',
|
||||||
'America/Moncton': 'Atlantic Standard Time',
|
'America/Moncton': 'Atlantic Standard Time',
|
||||||
'America/Monterrey': 'Central Standard Time (Mexico)',
|
'America/Monterrey': 'Central Standard Time (Mexico)',
|
||||||
'America/Montevideo': 'Montevideo Standard Time',
|
'America/Montevideo': 'Montevideo Standard Time',
|
||||||
|
@ -269,10 +306,12 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'America/Pangnirtung': 'Eastern Standard Time',
|
'America/Pangnirtung': 'Eastern Standard Time',
|
||||||
'America/Paramaribo': 'SA Eastern Standard Time',
|
'America/Paramaribo': 'SA Eastern Standard Time',
|
||||||
'America/Phoenix': 'US Mountain Standard Time',
|
'America/Phoenix': 'US Mountain Standard Time',
|
||||||
'America/Port-au-Prince': 'Eastern Standard Time',
|
'America/Port-au-Prince': 'Haiti Standard Time',
|
||||||
'America/Port_of_Spain': 'SA Western Standard Time',
|
'America/Port_of_Spain': 'SA Western Standard Time',
|
||||||
|
'America/Porto_Acre': 'SA Pacific Standard Time',
|
||||||
'America/Porto_Velho': 'SA Western Standard Time',
|
'America/Porto_Velho': 'SA Western Standard Time',
|
||||||
'America/Puerto_Rico': 'SA Western Standard Time',
|
'America/Puerto_Rico': 'SA Western Standard Time',
|
||||||
|
'America/Punta_Arenas': 'Magallanes Standard Time',
|
||||||
'America/Rainy_River': 'Central Standard Time',
|
'America/Rainy_River': 'Central Standard Time',
|
||||||
'America/Rankin_Inlet': 'Central Standard Time',
|
'America/Rankin_Inlet': 'Central Standard Time',
|
||||||
'America/Recife': 'SA Eastern Standard Time',
|
'America/Recife': 'SA Eastern Standard Time',
|
||||||
|
@ -285,6 +324,7 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'America/Santo_Domingo': 'SA Western Standard Time',
|
'America/Santo_Domingo': 'SA Western Standard Time',
|
||||||
'America/Sao_Paulo': 'E. South America Standard Time',
|
'America/Sao_Paulo': 'E. South America Standard Time',
|
||||||
'America/Scoresbysund': 'Azores Standard Time',
|
'America/Scoresbysund': 'Azores Standard Time',
|
||||||
|
'America/Shiprock': 'Mountain Standard Time',
|
||||||
'America/Sitka': 'Alaskan Standard Time',
|
'America/Sitka': 'Alaskan Standard Time',
|
||||||
'America/St_Barthelemy': 'SA Western Standard Time',
|
'America/St_Barthelemy': 'SA Western Standard Time',
|
||||||
'America/St_Johns': 'Newfoundland Standard Time',
|
'America/St_Johns': 'Newfoundland Standard Time',
|
||||||
|
@ -296,22 +336,24 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'America/Tegucigalpa': 'Central America Standard Time',
|
'America/Tegucigalpa': 'Central America Standard Time',
|
||||||
'America/Thule': 'Atlantic Standard Time',
|
'America/Thule': 'Atlantic Standard Time',
|
||||||
'America/Thunder_Bay': 'Eastern Standard Time',
|
'America/Thunder_Bay': 'Eastern Standard Time',
|
||||||
'America/Tijuana': 'Pacific Standard Time',
|
'America/Tijuana': 'Pacific Standard Time (Mexico)',
|
||||||
'America/Toronto': 'Eastern Standard Time',
|
'America/Toronto': 'Eastern Standard Time',
|
||||||
'America/Tortola': 'SA Western Standard Time',
|
'America/Tortola': 'SA Western Standard Time',
|
||||||
'America/Vancouver': 'Pacific Standard Time',
|
'America/Vancouver': 'Pacific Standard Time',
|
||||||
|
'America/Virgin': 'SA Western Standard Time',
|
||||||
'America/Whitehorse': 'Pacific Standard Time',
|
'America/Whitehorse': 'Pacific Standard Time',
|
||||||
'America/Winnipeg': 'Central Standard Time',
|
'America/Winnipeg': 'Central Standard Time',
|
||||||
'America/Yakutat': 'Alaskan Standard Time',
|
'America/Yakutat': 'Alaskan Standard Time',
|
||||||
'America/Yellowknife': 'Mountain Standard Time',
|
'America/Yellowknife': 'Mountain Standard Time',
|
||||||
'Antarctica/Casey': 'W. Australia Standard Time',
|
'Antarctica/Casey': 'Central Pacific Standard Time',
|
||||||
'Antarctica/Davis': 'SE Asia Standard Time',
|
'Antarctica/Davis': 'SE Asia Standard Time',
|
||||||
'Antarctica/DumontDUrville': 'West Pacific Standard Time',
|
'Antarctica/DumontDUrville': 'West Pacific Standard Time',
|
||||||
'Antarctica/Macquarie': 'Central Pacific Standard Time',
|
'Antarctica/Macquarie': 'Central Pacific Standard Time',
|
||||||
'Antarctica/Mawson': 'West Asia Standard Time',
|
'Antarctica/Mawson': 'West Asia Standard Time',
|
||||||
'Antarctica/McMurdo': 'New Zealand Standard Time',
|
'Antarctica/McMurdo': 'New Zealand Standard Time',
|
||||||
'Antarctica/Palmer': 'Pacific SA Standard Time',
|
'Antarctica/Palmer': 'Magallanes Standard Time',
|
||||||
'Antarctica/Rothera': 'SA Eastern Standard Time',
|
'Antarctica/Rothera': 'SA Eastern Standard Time',
|
||||||
|
'Antarctica/South_Pole': 'New Zealand Standard Time',
|
||||||
'Antarctica/Syowa': 'E. Africa Standard Time',
|
'Antarctica/Syowa': 'E. Africa Standard Time',
|
||||||
'Antarctica/Vostok': 'Central Asia Standard Time',
|
'Antarctica/Vostok': 'Central Asia Standard Time',
|
||||||
'Arctic/Longyearbyen': 'W. Europe Standard Time',
|
'Arctic/Longyearbyen': 'W. Europe Standard Time',
|
||||||
|
@ -322,24 +364,34 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'Asia/Aqtau': 'West Asia Standard Time',
|
'Asia/Aqtau': 'West Asia Standard Time',
|
||||||
'Asia/Aqtobe': 'West Asia Standard Time',
|
'Asia/Aqtobe': 'West Asia Standard Time',
|
||||||
'Asia/Ashgabat': 'West Asia Standard Time',
|
'Asia/Ashgabat': 'West Asia Standard Time',
|
||||||
|
'Asia/Ashkhabad': 'West Asia Standard Time',
|
||||||
|
'Asia/Atyrau': 'West Asia Standard Time',
|
||||||
'Asia/Baghdad': 'Arabic Standard Time',
|
'Asia/Baghdad': 'Arabic Standard Time',
|
||||||
'Asia/Bahrain': 'Arab Standard Time',
|
'Asia/Bahrain': 'Arab Standard Time',
|
||||||
'Asia/Baku': 'Azerbaijan Standard Time',
|
'Asia/Baku': 'Azerbaijan Standard Time',
|
||||||
'Asia/Bangkok': 'SE Asia Standard Time',
|
'Asia/Bangkok': 'SE Asia Standard Time',
|
||||||
|
'Asia/Barnaul': 'Altai Standard Time',
|
||||||
'Asia/Beirut': 'Middle East Standard Time',
|
'Asia/Beirut': 'Middle East Standard Time',
|
||||||
'Asia/Bishkek': 'Central Asia Standard Time',
|
'Asia/Bishkek': 'Central Asia Standard Time',
|
||||||
'Asia/Brunei': 'Singapore Standard Time',
|
'Asia/Brunei': 'Singapore Standard Time',
|
||||||
'Asia/Calcutta': 'India Standard Time',
|
'Asia/Calcutta': 'India Standard Time',
|
||||||
'Asia/Chita': 'North Asia East Standard Time',
|
'Asia/Chita': 'Transbaikal Standard Time',
|
||||||
'Asia/Choibalsan': 'Ulaanbaatar Standard Time',
|
'Asia/Choibalsan': 'Ulaanbaatar Standard Time',
|
||||||
|
'Asia/Chongqing': 'China Standard Time',
|
||||||
|
'Asia/Chungking': 'China Standard Time',
|
||||||
'Asia/Colombo': 'Sri Lanka Standard Time',
|
'Asia/Colombo': 'Sri Lanka Standard Time',
|
||||||
|
'Asia/Dacca': 'Bangladesh Standard Time',
|
||||||
'Asia/Damascus': 'Syria Standard Time',
|
'Asia/Damascus': 'Syria Standard Time',
|
||||||
'Asia/Dhaka': 'Bangladesh Standard Time',
|
'Asia/Dhaka': 'Bangladesh Standard Time',
|
||||||
'Asia/Dili': 'Tokyo Standard Time',
|
'Asia/Dili': 'Tokyo Standard Time',
|
||||||
'Asia/Dubai': 'Arabian Standard Time',
|
'Asia/Dubai': 'Arabian Standard Time',
|
||||||
'Asia/Dushanbe': 'West Asia Standard Time',
|
'Asia/Dushanbe': 'West Asia Standard Time',
|
||||||
|
'Asia/Famagusta': 'Turkey Standard Time',
|
||||||
|
'Asia/Gaza': 'West Bank Standard Time',
|
||||||
|
'Asia/Harbin': 'China Standard Time',
|
||||||
|
'Asia/Hebron': 'West Bank Standard Time',
|
||||||
'Asia/Hong_Kong': 'China Standard Time',
|
'Asia/Hong_Kong': 'China Standard Time',
|
||||||
'Asia/Hovd': 'SE Asia Standard Time',
|
'Asia/Hovd': 'W. Mongolia Standard Time',
|
||||||
'Asia/Irkutsk': 'North Asia East Standard Time',
|
'Asia/Irkutsk': 'North Asia East Standard Time',
|
||||||
'Asia/Jakarta': 'SE Asia Standard Time',
|
'Asia/Jakarta': 'SE Asia Standard Time',
|
||||||
'Asia/Jayapura': 'Tokyo Standard Time',
|
'Asia/Jayapura': 'Tokyo Standard Time',
|
||||||
|
@ -347,12 +399,14 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'Asia/Kabul': 'Afghanistan Standard Time',
|
'Asia/Kabul': 'Afghanistan Standard Time',
|
||||||
'Asia/Kamchatka': 'Russia Time Zone 11',
|
'Asia/Kamchatka': 'Russia Time Zone 11',
|
||||||
'Asia/Karachi': 'Pakistan Standard Time',
|
'Asia/Karachi': 'Pakistan Standard Time',
|
||||||
|
'Asia/Kashgar': 'Central Asia Standard Time',
|
||||||
'Asia/Katmandu': 'Nepal Standard Time',
|
'Asia/Katmandu': 'Nepal Standard Time',
|
||||||
'Asia/Khandyga': 'Yakutsk Standard Time',
|
'Asia/Khandyga': 'Yakutsk Standard Time',
|
||||||
'Asia/Krasnoyarsk': 'North Asia Standard Time',
|
'Asia/Krasnoyarsk': 'North Asia Standard Time',
|
||||||
'Asia/Kuala_Lumpur': 'Singapore Standard Time',
|
'Asia/Kuala_Lumpur': 'Singapore Standard Time',
|
||||||
'Asia/Kuching': 'Singapore Standard Time',
|
'Asia/Kuching': 'Singapore Standard Time',
|
||||||
'Asia/Kuwait': 'Arab Standard Time',
|
'Asia/Kuwait': 'Arab Standard Time',
|
||||||
|
'Asia/Macao': 'China Standard Time',
|
||||||
'Asia/Macau': 'China Standard Time',
|
'Asia/Macau': 'China Standard Time',
|
||||||
'Asia/Magadan': 'Magadan Standard Time',
|
'Asia/Magadan': 'Magadan Standard Time',
|
||||||
'Asia/Makassar': 'Singapore Standard Time',
|
'Asia/Makassar': 'Singapore Standard Time',
|
||||||
|
@ -361,17 +415,17 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'Asia/Nicosia': 'GTB Standard Time',
|
'Asia/Nicosia': 'GTB Standard Time',
|
||||||
'Asia/Novokuznetsk': 'North Asia Standard Time',
|
'Asia/Novokuznetsk': 'North Asia Standard Time',
|
||||||
'Asia/Novosibirsk': 'N. Central Asia Standard Time',
|
'Asia/Novosibirsk': 'N. Central Asia Standard Time',
|
||||||
'Asia/Omsk': 'N. Central Asia Standard Time',
|
'Asia/Omsk': 'Omsk Standard Time',
|
||||||
'Asia/Oral': 'West Asia Standard Time',
|
'Asia/Oral': 'West Asia Standard Time',
|
||||||
'Asia/Phnom_Penh': 'SE Asia Standard Time',
|
'Asia/Phnom_Penh': 'SE Asia Standard Time',
|
||||||
'Asia/Pontianak': 'SE Asia Standard Time',
|
'Asia/Pontianak': 'SE Asia Standard Time',
|
||||||
'Asia/Pyongyang': 'Korea Standard Time',
|
'Asia/Pyongyang': 'North Korea Standard Time',
|
||||||
'Asia/Qatar': 'Arab Standard Time',
|
'Asia/Qatar': 'Arab Standard Time',
|
||||||
'Asia/Qyzylorda': 'Central Asia Standard Time',
|
'Asia/Qyzylorda': 'Central Asia Standard Time',
|
||||||
'Asia/Rangoon': 'Myanmar Standard Time',
|
'Asia/Rangoon': 'Myanmar Standard Time',
|
||||||
'Asia/Riyadh': 'Arab Standard Time',
|
'Asia/Riyadh': 'Arab Standard Time',
|
||||||
'Asia/Saigon': 'SE Asia Standard Time',
|
'Asia/Saigon': 'SE Asia Standard Time',
|
||||||
'Asia/Sakhalin': 'Vladivostok Standard Time',
|
'Asia/Sakhalin': 'Sakhalin Standard Time',
|
||||||
'Asia/Samarkand': 'West Asia Standard Time',
|
'Asia/Samarkand': 'West Asia Standard Time',
|
||||||
'Asia/Seoul': 'Korea Standard Time',
|
'Asia/Seoul': 'Korea Standard Time',
|
||||||
'Asia/Shanghai': 'China Standard Time',
|
'Asia/Shanghai': 'China Standard Time',
|
||||||
|
@ -381,9 +435,14 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'Asia/Tashkent': 'West Asia Standard Time',
|
'Asia/Tashkent': 'West Asia Standard Time',
|
||||||
'Asia/Tbilisi': 'Georgian Standard Time',
|
'Asia/Tbilisi': 'Georgian Standard Time',
|
||||||
'Asia/Tehran': 'Iran Standard Time',
|
'Asia/Tehran': 'Iran Standard Time',
|
||||||
|
'Asia/Tel_Aviv': 'Israel Standard Time',
|
||||||
|
'Asia/Thimbu': 'Bangladesh Standard Time',
|
||||||
'Asia/Thimphu': 'Bangladesh Standard Time',
|
'Asia/Thimphu': 'Bangladesh Standard Time',
|
||||||
'Asia/Tokyo': 'Tokyo Standard Time',
|
'Asia/Tokyo': 'Tokyo Standard Time',
|
||||||
|
'Asia/Tomsk': 'Tomsk Standard Time',
|
||||||
|
'Asia/Ujung_Pandang': 'Singapore Standard Time',
|
||||||
'Asia/Ulaanbaatar': 'Ulaanbaatar Standard Time',
|
'Asia/Ulaanbaatar': 'Ulaanbaatar Standard Time',
|
||||||
|
'Asia/Ulan_Bator': 'Ulaanbaatar Standard Time',
|
||||||
'Asia/Urumqi': 'Central Asia Standard Time',
|
'Asia/Urumqi': 'Central Asia Standard Time',
|
||||||
'Asia/Ust-Nera': 'Vladivostok Standard Time',
|
'Asia/Ust-Nera': 'Vladivostok Standard Time',
|
||||||
'Asia/Vientiane': 'SE Asia Standard Time',
|
'Asia/Vientiane': 'SE Asia Standard Time',
|
||||||
|
@ -396,23 +455,54 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'Atlantic/Canary': 'GMT Standard Time',
|
'Atlantic/Canary': 'GMT Standard Time',
|
||||||
'Atlantic/Cape_Verde': 'Cape Verde Standard Time',
|
'Atlantic/Cape_Verde': 'Cape Verde Standard Time',
|
||||||
'Atlantic/Faeroe': 'GMT Standard Time',
|
'Atlantic/Faeroe': 'GMT Standard Time',
|
||||||
|
'Atlantic/Jan_Mayen': 'W. Europe Standard Time',
|
||||||
'Atlantic/Madeira': 'GMT Standard Time',
|
'Atlantic/Madeira': 'GMT Standard Time',
|
||||||
'Atlantic/Reykjavik': 'Greenwich Standard Time',
|
'Atlantic/Reykjavik': 'Greenwich Standard Time',
|
||||||
'Atlantic/South_Georgia': 'UTC-02',
|
'Atlantic/South_Georgia': 'UTC-02',
|
||||||
'Atlantic/St_Helena': 'Greenwich Standard Time',
|
'Atlantic/St_Helena': 'Greenwich Standard Time',
|
||||||
'Atlantic/Stanley': 'SA Eastern Standard Time',
|
'Atlantic/Stanley': 'SA Eastern Standard Time',
|
||||||
|
'Australia/ACT': 'AUS Eastern Standard Time',
|
||||||
'Australia/Adelaide': 'Cen. Australia Standard Time',
|
'Australia/Adelaide': 'Cen. Australia Standard Time',
|
||||||
'Australia/Brisbane': 'E. Australia Standard Time',
|
'Australia/Brisbane': 'E. Australia Standard Time',
|
||||||
'Australia/Broken_Hill': 'Cen. Australia Standard Time',
|
'Australia/Broken_Hill': 'Cen. Australia Standard Time',
|
||||||
|
'Australia/Canberra': 'AUS Eastern Standard Time',
|
||||||
'Australia/Currie': 'Tasmania Standard Time',
|
'Australia/Currie': 'Tasmania Standard Time',
|
||||||
'Australia/Darwin': 'AUS Central Standard Time',
|
'Australia/Darwin': 'AUS Central Standard Time',
|
||||||
|
'Australia/Eucla': 'Aus Central W. Standard Time',
|
||||||
'Australia/Hobart': 'Tasmania Standard Time',
|
'Australia/Hobart': 'Tasmania Standard Time',
|
||||||
|
'Australia/LHI': 'Lord Howe Standard Time',
|
||||||
'Australia/Lindeman': 'E. Australia Standard Time',
|
'Australia/Lindeman': 'E. Australia Standard Time',
|
||||||
|
'Australia/Lord_Howe': 'Lord Howe Standard Time',
|
||||||
'Australia/Melbourne': 'AUS Eastern Standard Time',
|
'Australia/Melbourne': 'AUS Eastern Standard Time',
|
||||||
|
'Australia/NSW': 'AUS Eastern Standard Time',
|
||||||
|
'Australia/North': 'AUS Central Standard Time',
|
||||||
'Australia/Perth': 'W. Australia Standard Time',
|
'Australia/Perth': 'W. Australia Standard Time',
|
||||||
|
'Australia/Queensland': 'E. Australia Standard Time',
|
||||||
|
'Australia/South': 'Cen. Australia Standard Time',
|
||||||
'Australia/Sydney': 'AUS Eastern Standard Time',
|
'Australia/Sydney': 'AUS Eastern Standard Time',
|
||||||
|
'Australia/Tasmania': 'Tasmania Standard Time',
|
||||||
|
'Australia/Victoria': 'AUS Eastern Standard Time',
|
||||||
|
'Australia/West': 'W. Australia Standard Time',
|
||||||
|
'Australia/Yancowinna': 'Cen. Australia Standard Time',
|
||||||
|
'Brazil/Acre': 'SA Pacific Standard Time',
|
||||||
|
'Brazil/DeNoronha': 'UTC-02',
|
||||||
|
'Brazil/East': 'E. South America Standard Time',
|
||||||
|
'Brazil/West': 'SA Western Standard Time',
|
||||||
'CST6CDT': 'Central Standard Time',
|
'CST6CDT': 'Central Standard Time',
|
||||||
|
'Canada/Atlantic': 'Atlantic Standard Time',
|
||||||
|
'Canada/Central': 'Central Standard Time',
|
||||||
|
'Canada/Eastern': 'Eastern Standard Time',
|
||||||
|
'Canada/Mountain': 'Mountain Standard Time',
|
||||||
|
'Canada/Newfoundland': 'Newfoundland Standard Time',
|
||||||
|
'Canada/Pacific': 'Pacific Standard Time',
|
||||||
|
'Canada/Saskatchewan': 'Canada Central Standard Time',
|
||||||
|
'Canada/Yukon': 'Pacific Standard Time',
|
||||||
|
'Chile/Continental': 'Pacific SA Standard Time',
|
||||||
|
'Chile/EasterIsland': 'Easter Island Standard Time',
|
||||||
|
'Cuba': 'Cuba Standard Time',
|
||||||
'EST5EDT': 'Eastern Standard Time',
|
'EST5EDT': 'Eastern Standard Time',
|
||||||
|
'Egypt': 'Egypt Standard Time',
|
||||||
|
'Eire': 'GMT Standard Time',
|
||||||
'Etc/GMT': 'UTC',
|
'Etc/GMT': 'UTC',
|
||||||
'Etc/GMT+1': 'Cape Verde Standard Time',
|
'Etc/GMT+1': 'Cape Verde Standard Time',
|
||||||
'Etc/GMT+10': 'Hawaiian Standard Time',
|
'Etc/GMT+10': 'Hawaiian Standard Time',
|
||||||
|
@ -424,11 +514,13 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'Etc/GMT+5': 'SA Pacific Standard Time',
|
'Etc/GMT+5': 'SA Pacific Standard Time',
|
||||||
'Etc/GMT+6': 'Central America Standard Time',
|
'Etc/GMT+6': 'Central America Standard Time',
|
||||||
'Etc/GMT+7': 'US Mountain Standard Time',
|
'Etc/GMT+7': 'US Mountain Standard Time',
|
||||||
|
'Etc/GMT+8': 'UTC-08',
|
||||||
|
'Etc/GMT+9': 'UTC-09',
|
||||||
'Etc/GMT-1': 'W. Central Africa Standard Time',
|
'Etc/GMT-1': 'W. Central Africa Standard Time',
|
||||||
'Etc/GMT-10': 'West Pacific Standard Time',
|
'Etc/GMT-10': 'West Pacific Standard Time',
|
||||||
'Etc/GMT-11': 'Central Pacific Standard Time',
|
'Etc/GMT-11': 'Central Pacific Standard Time',
|
||||||
'Etc/GMT-12': 'UTC+12',
|
'Etc/GMT-12': 'UTC+12',
|
||||||
'Etc/GMT-13': 'Tonga Standard Time',
|
'Etc/GMT-13': 'UTC+13',
|
||||||
'Etc/GMT-14': 'Line Islands Standard Time',
|
'Etc/GMT-14': 'Line Islands Standard Time',
|
||||||
'Etc/GMT-2': 'South Africa Standard Time',
|
'Etc/GMT-2': 'South Africa Standard Time',
|
||||||
'Etc/GMT-3': 'E. Africa Standard Time',
|
'Etc/GMT-3': 'E. Africa Standard Time',
|
||||||
|
@ -441,7 +533,9 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'Etc/UTC': 'UTC',
|
'Etc/UTC': 'UTC',
|
||||||
'Europe/Amsterdam': 'W. Europe Standard Time',
|
'Europe/Amsterdam': 'W. Europe Standard Time',
|
||||||
'Europe/Andorra': 'W. Europe Standard Time',
|
'Europe/Andorra': 'W. Europe Standard Time',
|
||||||
|
'Europe/Astrakhan': 'Astrakhan Standard Time',
|
||||||
'Europe/Athens': 'GTB Standard Time',
|
'Europe/Athens': 'GTB Standard Time',
|
||||||
|
'Europe/Belfast': 'GMT Standard Time',
|
||||||
'Europe/Belgrade': 'Central Europe Standard Time',
|
'Europe/Belgrade': 'Central Europe Standard Time',
|
||||||
'Europe/Berlin': 'W. Europe Standard Time',
|
'Europe/Berlin': 'W. Europe Standard Time',
|
||||||
'Europe/Bratislava': 'Central Europe Standard Time',
|
'Europe/Bratislava': 'Central Europe Standard Time',
|
||||||
|
@ -449,7 +543,7 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'Europe/Bucharest': 'GTB Standard Time',
|
'Europe/Bucharest': 'GTB Standard Time',
|
||||||
'Europe/Budapest': 'Central Europe Standard Time',
|
'Europe/Budapest': 'Central Europe Standard Time',
|
||||||
'Europe/Busingen': 'W. Europe Standard Time',
|
'Europe/Busingen': 'W. Europe Standard Time',
|
||||||
'Europe/Chisinau': 'GTB Standard Time',
|
'Europe/Chisinau': 'E. Europe Standard Time',
|
||||||
'Europe/Copenhagen': 'Romance Standard Time',
|
'Europe/Copenhagen': 'Romance Standard Time',
|
||||||
'Europe/Dublin': 'GMT Standard Time',
|
'Europe/Dublin': 'GMT Standard Time',
|
||||||
'Europe/Gibraltar': 'W. Europe Standard Time',
|
'Europe/Gibraltar': 'W. Europe Standard Time',
|
||||||
|
@ -460,6 +554,7 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'Europe/Jersey': 'GMT Standard Time',
|
'Europe/Jersey': 'GMT Standard Time',
|
||||||
'Europe/Kaliningrad': 'Kaliningrad Standard Time',
|
'Europe/Kaliningrad': 'Kaliningrad Standard Time',
|
||||||
'Europe/Kiev': 'FLE Standard Time',
|
'Europe/Kiev': 'FLE Standard Time',
|
||||||
|
'Europe/Kirov': 'Russian Standard Time',
|
||||||
'Europe/Lisbon': 'GMT Standard Time',
|
'Europe/Lisbon': 'GMT Standard Time',
|
||||||
'Europe/Ljubljana': 'Central Europe Standard Time',
|
'Europe/Ljubljana': 'Central Europe Standard Time',
|
||||||
'Europe/London': 'GMT Standard Time',
|
'Europe/London': 'GMT Standard Time',
|
||||||
|
@ -479,12 +574,15 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'Europe/Samara': 'Russia Time Zone 3',
|
'Europe/Samara': 'Russia Time Zone 3',
|
||||||
'Europe/San_Marino': 'W. Europe Standard Time',
|
'Europe/San_Marino': 'W. Europe Standard Time',
|
||||||
'Europe/Sarajevo': 'Central European Standard Time',
|
'Europe/Sarajevo': 'Central European Standard Time',
|
||||||
|
'Europe/Saratov': 'Saratov Standard Time',
|
||||||
'Europe/Simferopol': 'Russian Standard Time',
|
'Europe/Simferopol': 'Russian Standard Time',
|
||||||
'Europe/Skopje': 'Central European Standard Time',
|
'Europe/Skopje': 'Central European Standard Time',
|
||||||
'Europe/Sofia': 'FLE Standard Time',
|
'Europe/Sofia': 'FLE Standard Time',
|
||||||
'Europe/Stockholm': 'W. Europe Standard Time',
|
'Europe/Stockholm': 'W. Europe Standard Time',
|
||||||
'Europe/Tallinn': 'FLE Standard Time',
|
'Europe/Tallinn': 'FLE Standard Time',
|
||||||
'Europe/Tirane': 'Central Europe Standard Time',
|
'Europe/Tirane': 'Central Europe Standard Time',
|
||||||
|
'Europe/Tiraspol': 'E. Europe Standard Time',
|
||||||
|
'Europe/Ulyanovsk': 'Astrakhan Standard Time',
|
||||||
'Europe/Uzhgorod': 'FLE Standard Time',
|
'Europe/Uzhgorod': 'FLE Standard Time',
|
||||||
'Europe/Vaduz': 'W. Europe Standard Time',
|
'Europe/Vaduz': 'W. Europe Standard Time',
|
||||||
'Europe/Vatican': 'W. Europe Standard Time',
|
'Europe/Vatican': 'W. Europe Standard Time',
|
||||||
|
@ -495,6 +593,14 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'Europe/Zagreb': 'Central European Standard Time',
|
'Europe/Zagreb': 'Central European Standard Time',
|
||||||
'Europe/Zaporozhye': 'FLE Standard Time',
|
'Europe/Zaporozhye': 'FLE Standard Time',
|
||||||
'Europe/Zurich': 'W. Europe Standard Time',
|
'Europe/Zurich': 'W. Europe Standard Time',
|
||||||
|
'GB': 'GMT Standard Time',
|
||||||
|
'GB-Eire': 'GMT Standard Time',
|
||||||
|
'GMT+0': 'UTC',
|
||||||
|
'GMT-0': 'UTC',
|
||||||
|
'GMT0': 'UTC',
|
||||||
|
'Greenwich': 'UTC',
|
||||||
|
'Hongkong': 'China Standard Time',
|
||||||
|
'Iceland': 'Greenwich Standard Time',
|
||||||
'Indian/Antananarivo': 'E. Africa Standard Time',
|
'Indian/Antananarivo': 'E. Africa Standard Time',
|
||||||
'Indian/Chagos': 'Central Asia Standard Time',
|
'Indian/Chagos': 'Central Asia Standard Time',
|
||||||
'Indian/Christmas': 'SE Asia Standard Time',
|
'Indian/Christmas': 'SE Asia Standard Time',
|
||||||
|
@ -506,16 +612,33 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'Indian/Mauritius': 'Mauritius Standard Time',
|
'Indian/Mauritius': 'Mauritius Standard Time',
|
||||||
'Indian/Mayotte': 'E. Africa Standard Time',
|
'Indian/Mayotte': 'E. Africa Standard Time',
|
||||||
'Indian/Reunion': 'Mauritius Standard Time',
|
'Indian/Reunion': 'Mauritius Standard Time',
|
||||||
|
'Iran': 'Iran Standard Time',
|
||||||
|
'Israel': 'Israel Standard Time',
|
||||||
|
'Jamaica': 'SA Pacific Standard Time',
|
||||||
|
'Japan': 'Tokyo Standard Time',
|
||||||
|
'Kwajalein': 'UTC+12',
|
||||||
|
'Libya': 'Libya Standard Time',
|
||||||
'MST7MDT': 'Mountain Standard Time',
|
'MST7MDT': 'Mountain Standard Time',
|
||||||
|
'Mexico/BajaNorte': 'Pacific Standard Time (Mexico)',
|
||||||
|
'Mexico/BajaSur': 'Mountain Standard Time (Mexico)',
|
||||||
|
'Mexico/General': 'Central Standard Time (Mexico)',
|
||||||
|
'NZ': 'New Zealand Standard Time',
|
||||||
|
'NZ-CHAT': 'Chatham Islands Standard Time',
|
||||||
|
'Navajo': 'Mountain Standard Time',
|
||||||
|
'PRC': 'China Standard Time',
|
||||||
'PST8PDT': 'Pacific Standard Time',
|
'PST8PDT': 'Pacific Standard Time',
|
||||||
'Pacific/Apia': 'Samoa Standard Time',
|
'Pacific/Apia': 'Samoa Standard Time',
|
||||||
'Pacific/Auckland': 'New Zealand Standard Time',
|
'Pacific/Auckland': 'New Zealand Standard Time',
|
||||||
|
'Pacific/Bougainville': 'Bougainville Standard Time',
|
||||||
|
'Pacific/Chatham': 'Chatham Islands Standard Time',
|
||||||
|
'Pacific/Easter': 'Easter Island Standard Time',
|
||||||
'Pacific/Efate': 'Central Pacific Standard Time',
|
'Pacific/Efate': 'Central Pacific Standard Time',
|
||||||
'Pacific/Enderbury': 'Tonga Standard Time',
|
'Pacific/Enderbury': 'UTC+13',
|
||||||
'Pacific/Fakaofo': 'Tonga Standard Time',
|
'Pacific/Fakaofo': 'UTC+13',
|
||||||
'Pacific/Fiji': 'Fiji Standard Time',
|
'Pacific/Fiji': 'Fiji Standard Time',
|
||||||
'Pacific/Funafuti': 'UTC+12',
|
'Pacific/Funafuti': 'UTC+12',
|
||||||
'Pacific/Galapagos': 'Central America Standard Time',
|
'Pacific/Galapagos': 'Central America Standard Time',
|
||||||
|
'Pacific/Gambier': 'UTC-09',
|
||||||
'Pacific/Guadalcanal': 'Central Pacific Standard Time',
|
'Pacific/Guadalcanal': 'Central Pacific Standard Time',
|
||||||
'Pacific/Guam': 'West Pacific Standard Time',
|
'Pacific/Guam': 'West Pacific Standard Time',
|
||||||
'Pacific/Honolulu': 'Hawaiian Standard Time',
|
'Pacific/Honolulu': 'Hawaiian Standard Time',
|
||||||
|
@ -524,19 +647,44 @@ tz_win = {'Africa/Abidjan': 'Greenwich Standard Time',
|
||||||
'Pacific/Kosrae': 'Central Pacific Standard Time',
|
'Pacific/Kosrae': 'Central Pacific Standard Time',
|
||||||
'Pacific/Kwajalein': 'UTC+12',
|
'Pacific/Kwajalein': 'UTC+12',
|
||||||
'Pacific/Majuro': 'UTC+12',
|
'Pacific/Majuro': 'UTC+12',
|
||||||
|
'Pacific/Marquesas': 'Marquesas Standard Time',
|
||||||
'Pacific/Midway': 'UTC-11',
|
'Pacific/Midway': 'UTC-11',
|
||||||
'Pacific/Nauru': 'UTC+12',
|
'Pacific/Nauru': 'UTC+12',
|
||||||
'Pacific/Niue': 'UTC-11',
|
'Pacific/Niue': 'UTC-11',
|
||||||
|
'Pacific/Norfolk': 'Norfolk Standard Time',
|
||||||
'Pacific/Noumea': 'Central Pacific Standard Time',
|
'Pacific/Noumea': 'Central Pacific Standard Time',
|
||||||
'Pacific/Pago_Pago': 'UTC-11',
|
'Pacific/Pago_Pago': 'UTC-11',
|
||||||
'Pacific/Palau': 'Tokyo Standard Time',
|
'Pacific/Palau': 'Tokyo Standard Time',
|
||||||
|
'Pacific/Pitcairn': 'UTC-08',
|
||||||
'Pacific/Ponape': 'Central Pacific Standard Time',
|
'Pacific/Ponape': 'Central Pacific Standard Time',
|
||||||
'Pacific/Port_Moresby': 'West Pacific Standard Time',
|
'Pacific/Port_Moresby': 'West Pacific Standard Time',
|
||||||
'Pacific/Rarotonga': 'Hawaiian Standard Time',
|
'Pacific/Rarotonga': 'Hawaiian Standard Time',
|
||||||
'Pacific/Saipan': 'West Pacific Standard Time',
|
'Pacific/Saipan': 'West Pacific Standard Time',
|
||||||
|
'Pacific/Samoa': 'UTC-11',
|
||||||
'Pacific/Tahiti': 'Hawaiian Standard Time',
|
'Pacific/Tahiti': 'Hawaiian Standard Time',
|
||||||
'Pacific/Tarawa': 'UTC+12',
|
'Pacific/Tarawa': 'UTC+12',
|
||||||
'Pacific/Tongatapu': 'Tonga Standard Time',
|
'Pacific/Tongatapu': 'Tonga Standard Time',
|
||||||
'Pacific/Truk': 'West Pacific Standard Time',
|
'Pacific/Truk': 'West Pacific Standard Time',
|
||||||
'Pacific/Wake': 'UTC+12',
|
'Pacific/Wake': 'UTC+12',
|
||||||
'Pacific/Wallis': 'UTC+12'}
|
'Pacific/Wallis': 'UTC+12',
|
||||||
|
'Poland': 'Central European Standard Time',
|
||||||
|
'Portugal': 'GMT Standard Time',
|
||||||
|
'ROC': 'Taipei Standard Time',
|
||||||
|
'ROK': 'Korea Standard Time',
|
||||||
|
'Singapore': 'Singapore Standard Time',
|
||||||
|
'Turkey': 'Turkey Standard Time',
|
||||||
|
'US/Alaska': 'Alaskan Standard Time',
|
||||||
|
'US/Aleutian': 'Aleutian Standard Time',
|
||||||
|
'US/Arizona': 'US Mountain Standard Time',
|
||||||
|
'US/Central': 'Central Standard Time',
|
||||||
|
'US/Eastern': 'Eastern Standard Time',
|
||||||
|
'US/Hawaii': 'Hawaiian Standard Time',
|
||||||
|
'US/Indiana-Starke': 'Central Standard Time',
|
||||||
|
'US/Michigan': 'Eastern Standard Time',
|
||||||
|
'US/Mountain': 'Mountain Standard Time',
|
||||||
|
'US/Pacific': 'Pacific Standard Time',
|
||||||
|
'US/Samoa': 'UTC-11',
|
||||||
|
'UTC': 'UTC',
|
||||||
|
'Universal': 'UTC',
|
||||||
|
'W-SU': 'Russian Standard Time',
|
||||||
|
'Zulu': 'UTC'}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue