Skip to main content

World timezone definitions, modern and historical

Project description

Author:

Stuart Bishop <stuart@stuartbishop.net>

Introduction

pytz brings the Olson tz database into Python. This library allows accurate and cross platform timezone calculations using Python 2.4 or higher. It also solves the issue of ambiguous times at the end of daylight saving time, which you can read more about in the Python Library Reference (datetime.tzinfo).

Almost all of the Olson timezones are supported.

Installation

This package can either be installed from a .egg file using setuptools, or from the tarball using the standard Python distutils.

If you are installing from a tarball, run the following command as an administrative user:

python setup.py install

If you are installing using setuptools, you don’t even need to download anything as the latest version will be downloaded for you from the Python package index:

easy_install --upgrade pytz

If you already have the .egg file, you can use that too:

easy_install pytz-2008g-py2.6.egg

Example & Usage

Localized times and date arithmetic

>>> from datetime import datetime, timedelta
>>> from pytz import timezone
>>> import pytz
>>> utc = pytz.utc
>>> utc.zone
'UTC'
>>> eastern = timezone('US/Eastern')
>>> eastern.zone
'US/Eastern'
>>> amsterdam = timezone('Europe/Amsterdam')
>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'

This library only supports two ways of building a localized time. The first is to use the localize() method provided by the pytz library. This is used to localize a naive datetime (datetime with no timezone information):

>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 6, 0, 0))
>>> print(loc_dt.strftime(fmt))
2002-10-27 06:00:00 EST-0500

The second way of building a localized time is by converting an existing localized time using the standard astimezone() method:

>>> ams_dt = loc_dt.astimezone(amsterdam)
>>> ams_dt.strftime(fmt)
'2002-10-27 12:00:00 CET+0100'

Unfortunately using the tzinfo argument of the standard datetime constructors ‘’does not work’’ with pytz for many timezones.

>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=amsterdam).strftime(fmt)
'2002-10-27 12:00:00 LMT+0020'

It is safe for timezones without daylight saving transitions though, such as UTC:

>>> datetime(2002, 10, 27, 12, 0, 0, tzinfo=pytz.utc).strftime(fmt)
'2002-10-27 12:00:00 UTC+0000'

The preferred way of dealing with times is to always work in UTC, converting to localtime only when generating output to be read by humans.

>>> utc_dt = datetime(2002, 10, 27, 6, 0, 0, tzinfo=utc)
>>> loc_dt = utc_dt.astimezone(eastern)
>>> loc_dt.strftime(fmt)
'2002-10-27 01:00:00 EST-0500'

This library also allows you to do date arithmetic using local times, although it is more complicated than working in UTC as you need to use the normalize() method to handle daylight saving time and other timezone transitions. In this example, loc_dt is set to the instant when daylight saving time ends in the US/Eastern timezone.

>>> before = loc_dt - timedelta(minutes=10)
>>> before.strftime(fmt)
'2002-10-27 00:50:00 EST-0500'
>>> eastern.normalize(before).strftime(fmt)
'2002-10-27 01:50:00 EDT-0400'
>>> after = eastern.normalize(before + timedelta(minutes=20))
>>> after.strftime(fmt)
'2002-10-27 01:10:00 EST-0500'

Creating local times is also tricky, and the reason why working with local times is not recommended. Unfortunately, you cannot just pass a tzinfo argument when constructing a datetime (see the next section for more details)

>>> dt = datetime(2002, 10, 27, 1, 30, 0)
>>> dt1 = eastern.localize(dt, is_dst=True)
>>> dt1.strftime(fmt)
'2002-10-27 01:30:00 EDT-0400'
>>> dt2 = eastern.localize(dt, is_dst=False)
>>> dt2.strftime(fmt)
'2002-10-27 01:30:00 EST-0500'

Converting between timezones is more easily done, using the standard astimezone method.

>>> utc_dt = utc.localize(datetime.utcfromtimestamp(1143408899))
>>> utc_dt.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'
>>> au_tz = timezone('Australia/Sydney')
>>> au_dt = utc_dt.astimezone(au_tz)
>>> au_dt.strftime(fmt)
'2006-03-27 08:34:59 AEDT+1100'
>>> utc_dt2 = au_dt.astimezone(utc)
>>> utc_dt2.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'
>>> utc_dt == utc_dt2
True

You can take shortcuts when dealing with the UTC side of timezone conversions. normalize() and localize() are not really necessary when there are no daylight saving time transitions to deal with.

>>> utc_dt = datetime.utcfromtimestamp(1143408899).replace(tzinfo=utc)
>>> utc_dt.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'
>>> au_tz = timezone('Australia/Sydney')
>>> au_dt = au_tz.normalize(utc_dt.astimezone(au_tz))
>>> au_dt.strftime(fmt)
'2006-03-27 08:34:59 AEDT+1100'
>>> utc_dt2 = au_dt.astimezone(utc)
>>> utc_dt2.strftime(fmt)
'2006-03-26 21:34:59 UTC+0000'

tzinfo API

The tzinfo instances returned by the timezone() function have been extended to cope with ambiguous times by adding an is_dst parameter to the utcoffset(), dst() && tzname() methods.

>>> tz = timezone('America/St_Johns')
>>> normal = datetime(2009, 9, 1)
>>> ambiguous = datetime(2009, 10, 31, 23, 30)

The is_dst parameter is ignored for most timestamps. It is only used during DST transition ambiguous periods to resulve that ambiguity.

>>> tz.utcoffset(normal, is_dst=True)
datetime.timedelta(-1, 77400)
>>> tz.dst(normal, is_dst=True)
datetime.timedelta(0, 3600)
>>> tz.tzname(normal, is_dst=True)
'NDT'
>>> tz.utcoffset(ambiguous, is_dst=True)
datetime.timedelta(-1, 77400)
>>> tz.dst(ambiguous, is_dst=True)
datetime.timedelta(0, 3600)
>>> tz.tzname(ambiguous, is_dst=True)
'NDT'
>>> tz.utcoffset(normal, is_dst=False)
datetime.timedelta(-1, 77400)
>>> tz.dst(normal, is_dst=False)
datetime.timedelta(0, 3600)
>>> tz.tzname(normal, is_dst=False)
'NDT'
>>> tz.utcoffset(ambiguous, is_dst=False)
datetime.timedelta(-1, 73800)
>>> tz.dst(ambiguous, is_dst=False)
datetime.timedelta(0)
>>> tz.tzname(ambiguous, is_dst=False)
'NST'

If is_dst is not specified, ambiguous timestamps will raise an pytz.exceptions.AmbiguousTimeError exception.

>>> tz.utcoffset(normal)
datetime.timedelta(-1, 77400)
>>> tz.dst(normal)
datetime.timedelta(0, 3600)
>>> tz.tzname(normal)
'NDT'
>>> import pytz.exceptions
>>> try:
...     tz.utcoffset(ambiguous)
... except pytz.exceptions.AmbiguousTimeError:
...     print('pytz.exceptions.AmbiguousTimeError: %s' % ambiguous)
pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00
>>> try:
...     tz.dst(ambiguous)
... except pytz.exceptions.AmbiguousTimeError:
...     print('pytz.exceptions.AmbiguousTimeError: %s' % ambiguous)
pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00
>>> try:
...     tz.tzname(ambiguous)
... except pytz.exceptions.AmbiguousTimeError:
...     print('pytz.exceptions.AmbiguousTimeError: %s' % ambiguous)
pytz.exceptions.AmbiguousTimeError: 2009-10-31 23:30:00

Problems with Localtime

The major problem we have to deal with is that certain datetimes may occur twice in a year. For example, in the US/Eastern timezone on the last Sunday morning in October, the following sequence happens:

  • 01:00 EDT occurs

  • 1 hour later, instead of 2:00am the clock is turned back 1 hour and 01:00 happens again (this time 01:00 EST)

In fact, every instant between 01:00 and 02:00 occurs twice. This means that if you try and create a time in the ‘US/Eastern’ timezone the standard datetime syntax, there is no way to specify if you meant before of after the end-of-daylight-saving-time transition. Using the pytz custom syntax, the best you can do is make an educated guess:

>>> loc_dt = eastern.localize(datetime(2002, 10, 27, 1, 30, 00))
>>> loc_dt.strftime(fmt)
'2002-10-27 01:30:00 EST-0500'

As you can see, the system has chosen one for you and there is a 50% chance of it being out by one hour. For some applications, this does not matter. However, if you are trying to schedule meetings with people in different timezones or analyze log files it is not acceptable.

The best and simplest solution is to stick with using UTC. The pytz package encourages using UTC for internal timezone representation by including a special UTC implementation based on the standard Python reference implementation in the Python documentation.

The UTC timezone unpickles to be the same instance, and pickles to a smaller size than other pytz tzinfo instances. The UTC implementation can be obtained as pytz.utc, pytz.UTC, or pytz.timezone(‘UTC’).

>>> import pickle, pytz
>>> dt = datetime(2005, 3, 1, 14, 13, 21, tzinfo=utc)
>>> naive = dt.replace(tzinfo=None)
>>> p = pickle.dumps(dt, 1)
>>> naive_p = pickle.dumps(naive, 1)
>>> len(p) - len(naive_p)
17
>>> new = pickle.loads(p)
>>> new == dt
True
>>> new is dt
False
>>> new.tzinfo is dt.tzinfo
True
>>> pytz.utc is pytz.UTC is pytz.timezone('UTC')
True

Note that some other timezones are commonly thought of as the same (GMT, Greenwich, Universal, etc.). The definition of UTC is distinct from these other timezones, and they are not equivalent. For this reason, they will not compare the same in Python.

>>> utc == pytz.timezone('GMT')
False

See the section What is UTC, below.

If you insist on working with local times, this library provides a facility for constructing them unambiguously:

>>> loc_dt = datetime(2002, 10, 27, 1, 30, 00)
>>> est_dt = eastern.localize(loc_dt, is_dst=True)
>>> edt_dt = eastern.localize(loc_dt, is_dst=False)
>>> print(est_dt.strftime(fmt) + ' / ' + edt_dt.strftime(fmt))
2002-10-27 01:30:00 EDT-0400 / 2002-10-27 01:30:00 EST-0500

If you pass None as the is_dst flag to localize(), pytz will refuse to guess and raise exceptions if you try to build ambiguous or non-existent times.

For example, 1:30am on 27th Oct 2002 happened twice in the US/Eastern timezone when the clocks where put back at the end of Daylight Saving Time:

>>> dt = datetime(2002, 10, 27, 1, 30, 00)
>>> try:
...     eastern.localize(dt, is_dst=None)
... except pytz.exceptions.AmbiguousTimeError:
...     print('pytz.exceptions.AmbiguousTimeError: %s' % dt)
pytz.exceptions.AmbiguousTimeError: 2002-10-27 01:30:00

Similarly, 2:30am on 7th April 2002 never happened at all in the US/Eastern timezone, as the clocks where put forward at 2:00am skipping the entire hour:

>>> dt = datetime(2002, 4, 7, 2, 30, 00)
>>> try:
...     eastern.localize(dt, is_dst=None)
... except pytz.exceptions.NonExistentTimeError:
...     print('pytz.exceptions.NonExistentTimeError: %s' % dt)
pytz.exceptions.NonExistentTimeError: 2002-04-07 02:30:00

Both of these exceptions share a common base class to make error handling easier:

>>> isinstance(pytz.AmbiguousTimeError(), pytz.InvalidTimeError)
True
>>> isinstance(pytz.NonExistentTimeError(), pytz.InvalidTimeError)
True

A special case is where countries change their timezone definitions with no daylight savings time switch. For example, in 1915 Warsaw switched from Warsaw time to Central European time with no daylight savings transition. So at the stroke of midnight on August 5th 1915 the clocks were wound back 24 minutes creating an ambiguous time period that cannot be specified without referring to the timezone abbreviation or the actual UTC offset. In this case midnight happened twice, neither time during a daylight saving time period. pytz handles this transition by treating the ambiguous period before the switch as daylight savings time, and the ambiguous period after as standard time.

>>> warsaw = pytz.timezone('Europe/Warsaw')
>>> amb_dt1 = warsaw.localize(datetime(1915, 8, 4, 23, 59, 59), is_dst=True)
>>> amb_dt1.strftime(fmt)
'1915-08-04 23:59:59 WMT+0124'
>>> amb_dt2 = warsaw.localize(datetime(1915, 8, 4, 23, 59, 59), is_dst=False)
>>> amb_dt2.strftime(fmt)
'1915-08-04 23:59:59 CET+0100'
>>> switch_dt = warsaw.localize(datetime(1915, 8, 5, 00, 00, 00), is_dst=False)
>>> switch_dt.strftime(fmt)
'1915-08-05 00:00:00 CET+0100'
>>> str(switch_dt - amb_dt1)
'0:24:01'
>>> str(switch_dt - amb_dt2)
'0:00:01'

The best way of creating a time during an ambiguous time period is by converting from another timezone such as UTC:

>>> utc_dt = datetime(1915, 8, 4, 22, 36, tzinfo=pytz.utc)
>>> utc_dt.astimezone(warsaw).strftime(fmt)
'1915-08-04 23:36:00 CET+0100'

The standard Python way of handling all these ambiguities is not to handle them, such as demonstrated in this example using the US/Eastern timezone definition from the Python documentation (Note that this implementation only works for dates between 1987 and 2006 - it is included for tests only!):

>>> from pytz.reference import Eastern # pytz.reference only for tests
>>> dt = datetime(2002, 10, 27, 0, 30, tzinfo=Eastern)
>>> str(dt)
'2002-10-27 00:30:00-04:00'
>>> str(dt + timedelta(hours=1))
'2002-10-27 01:30:00-05:00'
>>> str(dt + timedelta(hours=2))
'2002-10-27 02:30:00-05:00'
>>> str(dt + timedelta(hours=3))
'2002-10-27 03:30:00-05:00'

Notice the first two results? At first glance you might think they are correct, but taking the UTC offset into account you find that they are actually two hours appart instead of the 1 hour we asked for.

>>> from pytz.reference import UTC # pytz.reference only for tests
>>> str(dt.astimezone(UTC))
'2002-10-27 04:30:00+00:00'
>>> str((dt + timedelta(hours=1)).astimezone(UTC))
'2002-10-27 06:30:00+00:00'

Country Information

A mechanism is provided to access the timezones commonly in use for a particular country, looked up using the ISO 3166 country code. It returns a list of strings that can be used to retrieve the relevant tzinfo instance using pytz.timezone():

>>> print(' '.join(pytz.country_timezones['nz']))
Pacific/Auckland Pacific/Chatham

The Olson database comes with a ISO 3166 country code to English country name mapping that pytz exposes as a dictionary:

>>> print(pytz.country_names['nz'])
New Zealand

What is UTC

‘UTC’ is Coordinated Universal Time. It is a successor to, but distinct from, Greenwich Mean Time (GMT) and the various definitions of Universal Time. UTC is now the worldwide standard for regulating clocks and time measurement.

All other timezones are defined relative to UTC, and include offsets like UTC+0800 - hours to add or subtract from UTC to derive the local time. No daylight saving time occurs in UTC, making it a useful timezone to perform date arithmetic without worrying about the confusion and ambiguities caused by daylight saving time transitions, your country changing its timezone, or mobile computers that roam through multiple timezones.

Helpers

There are two lists of timezones provided.

all_timezones is the exhaustive list of the timezone names that can be used.

>>> from pytz import all_timezones
>>> len(all_timezones) >= 500
True
>>> 'Etc/Greenwich' in all_timezones
True

common_timezones is a list of useful, current timezones. It doesn’t contain deprecated zones or historical zones, except for a few I’ve deemed in common usage, such as US/Eastern (open a bug report if you think other timezones are deserving of being included here). It is also a sequence of strings.

>>> from pytz import common_timezones
>>> len(common_timezones) < len(all_timezones)
True
>>> 'Etc/Greenwich' in common_timezones
False
>>> 'Australia/Melbourne' in common_timezones
True
>>> 'US/Eastern' in common_timezones
True
>>> 'Canada/Eastern' in common_timezones
True
>>> 'US/Pacific-New' in all_timezones
True
>>> 'US/Pacific-New' in common_timezones
False

Both common_timezones and all_timezones are alphabetically sorted:

>>> common_timezones_dupe = common_timezones[:]
>>> common_timezones_dupe.sort()
>>> common_timezones == common_timezones_dupe
True
>>> all_timezones_dupe = all_timezones[:]
>>> all_timezones_dupe.sort()
>>> all_timezones == all_timezones_dupe
True

all_timezones and common_timezones are also available as sets.

>>> from pytz import all_timezones_set, common_timezones_set
>>> 'US/Eastern' in all_timezones_set
True
>>> 'US/Eastern' in common_timezones_set
True
>>> 'Australia/Victoria' in common_timezones_set
False

You can also retrieve lists of timezones used by particular countries using the country_timezones() function. It requires an ISO-3166 two letter country code.

>>> from pytz import country_timezones
>>> print(' '.join(country_timezones('ch')))
Europe/Zurich
>>> print(' '.join(country_timezones('CH')))
Europe/Zurich

Internationalization - i18n/l10n

Pytz is an interface to the IANA database, which uses ASCII names. The Unicode Consortium’s Unicode Locales (CLDR) project provides translations. Thomas Khyn’s l18n package can be used to access these translations from Python.

License

MIT license.

This code is also available as part of Zope 3 under the Zope Public License, Version 2.1 (ZPL).

I’m happy to relicense this code if necessary for inclusion in other open source projects.

Latest Versions

This package will be updated after releases of the Olson timezone database. The latest version can be downloaded from the Python Package Index. The code that is used to generate this distribution is hosted on launchpad.net and available using git:

git clone https://git.launchpad.net/pytz

A mirror on github is also available at https://github.com/stub42/pytz

Announcements of new releases are made on Launchpad, and the Atom feed hosted there.

Bugs, Feature Requests & Patches

Bugs can be reported using Launchpad.

Issues & Limitations

  • Offsets from UTC are rounded to the nearest whole minute, so timezones such as Europe/Amsterdam pre 1937 will be up to 30 seconds out. This is a limitation of the Python datetime library.

  • If you think a timezone definition is incorrect, I probably can’t fix it. pytz is a direct translation of the Olson timezone database, and changes to the timezone definitions need to be made to this source. If you find errors they should be reported to the time zone mailing list, linked from http://www.iana.org/time-zones.

Further Reading

More info than you want to know about timezones: http://www.twinsun.com/tz/tz-link.htm

Contact

Stuart Bishop <stuart@stuartbishop.net>

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

pytz-2016.6.zip (498.3 kB view details)

Uploaded Source

pytz-2016.6.tar.gz (286.8 kB view details)

Uploaded Source

pytz-2016.6.tar.bz2 (172.0 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pytz-2016.6-py3.5.egg (482.6 kB view details)

Uploaded Egg

pytz-2016.6-py3.4.egg (482.6 kB view details)

Uploaded Egg

pytz-2016.6-py3.3.egg (482.9 kB view details)

Uploaded Egg

pytz-2016.6-py3.2.egg (482.1 kB view details)

Uploaded Egg

pytz-2016.6-py3.1.egg (481.9 kB view details)

Uploaded Egg

pytz-2016.6-py2.py3-none-any.whl (481.2 kB view details)

Uploaded Python 2Python 3

pytz-2016.6-py2.7.egg (481.9 kB view details)

Uploaded Egg

pytz-2016.6-py2.6.egg (482.1 kB view details)

Uploaded Egg

pytz-2016.6-py2.5.egg (482.1 kB view details)

Uploaded Egg

pytz-2016.6-py2.4.egg (482.6 kB view details)

Uploaded Egg

File details

Details for the file pytz-2016.6.zip.

File metadata

  • Download URL: pytz-2016.6.zip
  • Upload date:
  • Size: 498.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pytz-2016.6.zip
Algorithm Hash digest
SHA256 0ca2c5966a10e8044db98bac372ed238f323d8d526bbd9a601c3520b98a4bbd3
MD5 3cd3174b46e2b6e12ed79484527142a0
BLAKE2b-256 d71fb43aad922994f2dcf3131e717a5f7b4c65372beab41a8e3d6fac245aa5ed

See more details on using hashes here.

File details

Details for the file pytz-2016.6.tar.gz.

File metadata

  • Download URL: pytz-2016.6.tar.gz
  • Upload date:
  • Size: 286.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pytz-2016.6.tar.gz
Algorithm Hash digest
SHA256 51ee2cbb7309df4c2f7c1d2c418aeb869ad48928ed590da7689c034dda7c912f
MD5 c4eb36245805ab8a5f65f1e543cec9e8
BLAKE2b-256 866c8cc20a029dd7a197488e47c8b2996b5047708493640fbdbc32f7c5c23304

See more details on using hashes here.

File details

Details for the file pytz-2016.6.tar.bz2.

File metadata

  • Download URL: pytz-2016.6.tar.bz2
  • Upload date:
  • Size: 172.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pytz-2016.6.tar.bz2
Algorithm Hash digest
SHA256 1ce2d13b6503a7260c950a25fa6d26ba8d4da1a7077e062aa9e82c74949aaf4b
MD5 68dc588d4d9bde0d37c76e2d63a4ef6f
BLAKE2b-256 3619a6288b77ecd3bcdc0186e7b943ffbbe19f39fa533b1af26e21e848bfd03f

See more details on using hashes here.

File details

Details for the file pytz-2016.6-py3.5.egg.

File metadata

  • Download URL: pytz-2016.6-py3.5.egg
  • Upload date:
  • Size: 482.6 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pytz-2016.6-py3.5.egg
Algorithm Hash digest
SHA256 b1f51ed44fe5c25f088bc8c7c189060dc1258b157b5bb6d46d08cc033fca6d1a
MD5 f4baa486caf3440e153ca90c36fcaa15
BLAKE2b-256 ea1308a75b237266fa30fc860aa904cf564b0ac32ec8dd6cca2e0dff17a3d177

See more details on using hashes here.

File details

Details for the file pytz-2016.6-py3.4.egg.

File metadata

  • Download URL: pytz-2016.6-py3.4.egg
  • Upload date:
  • Size: 482.6 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pytz-2016.6-py3.4.egg
Algorithm Hash digest
SHA256 4e9d04cb71d5db26123a1602eb402dab9a7b3686e2786d1e170858e31b59850f
MD5 4ecd27f4b379ba6d69f6a846c2a30a1d
BLAKE2b-256 43cc1fd72b1fb40f1981c11ac2d00048df7d43042ec72c4319d8a9cfcc8bcb54

See more details on using hashes here.

File details

Details for the file pytz-2016.6-py3.3.egg.

File metadata

  • Download URL: pytz-2016.6-py3.3.egg
  • Upload date:
  • Size: 482.9 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pytz-2016.6-py3.3.egg
Algorithm Hash digest
SHA256 de72bec3c2f2c86bea4c0c83a921031613976b05ff7f14e1bae1149f177b7746
MD5 b71af8113bf2bac87e16a90127f621e5
BLAKE2b-256 b4641d34c4652fc45fa85120fc5cc4448dccf576d60202870b29fcf4d012daa7

See more details on using hashes here.

File details

Details for the file pytz-2016.6-py3.2.egg.

File metadata

  • Download URL: pytz-2016.6-py3.2.egg
  • Upload date:
  • Size: 482.1 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pytz-2016.6-py3.2.egg
Algorithm Hash digest
SHA256 7dd7accd1690ed32fbd90ad9d273c84e8e09178cdc190b195347d27daebd40df
MD5 4f3f66b5f40875885ec07bc3282e01d5
BLAKE2b-256 492fc810405da94b53cc0000512073e495cdb022265a9b18fae916a0181bc875

See more details on using hashes here.

File details

Details for the file pytz-2016.6-py3.1.egg.

File metadata

  • Download URL: pytz-2016.6-py3.1.egg
  • Upload date:
  • Size: 481.9 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pytz-2016.6-py3.1.egg
Algorithm Hash digest
SHA256 58f594447ca62397c7be6c40fc9406c1d60836cb40974f279058062e58752cea
MD5 c63294ad9953cf3632b8bf45478d3e58
BLAKE2b-256 d8f04a9d1b7f8716e0a283aec4d8423d6217a6e0c70668a460aaa39d80634ba4

See more details on using hashes here.

File details

Details for the file pytz-2016.6-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for pytz-2016.6-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 62fd4e22635f609cf1f5da3037612214758ff5f510f4e877ec31d3bbbb995802
MD5 6782c7bff7ce1359008b2c3acaaa0453
BLAKE2b-256 ae5736d3c91c5b83117cfebd6a02016bb8203c368b1d1031211dc61b249a5792

See more details on using hashes here.

File details

Details for the file pytz-2016.6-py2.7.egg.

File metadata

  • Download URL: pytz-2016.6-py2.7.egg
  • Upload date:
  • Size: 481.9 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pytz-2016.6-py2.7.egg
Algorithm Hash digest
SHA256 937f30580a1ef85c28fea2672871c2e3df9a22fb9070bc77c20d26ab99ea6369
MD5 77e029feade563ff151afe21de0c7bd0
BLAKE2b-256 93c31927a393a8e5e22ae9c38d893cc829e5a4df4c63ac283fcdb6c863159371

See more details on using hashes here.

File details

Details for the file pytz-2016.6-py2.6.egg.

File metadata

  • Download URL: pytz-2016.6-py2.6.egg
  • Upload date:
  • Size: 482.1 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pytz-2016.6-py2.6.egg
Algorithm Hash digest
SHA256 8eba058ab00830a8e3c0a8b81fe5d7b367f0fd18277c94afc9d674a99eae5d42
MD5 879e7e70c41a13e2008db6c2e2f5d402
BLAKE2b-256 b9f36ccc7575ba89b3ce1ee34fe49ac2b6f4de6401cc3e1ebe9d4897bd2f9004

See more details on using hashes here.

File details

Details for the file pytz-2016.6-py2.5.egg.

File metadata

  • Download URL: pytz-2016.6-py2.5.egg
  • Upload date:
  • Size: 482.1 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pytz-2016.6-py2.5.egg
Algorithm Hash digest
SHA256 35b5a38d6ffda82220a9e6b97b7b7162887b2d7ff82a1b601979e60d13062718
MD5 0b3e0b0c8f92bd54fd482a81ef8b7d23
BLAKE2b-256 05f5657679753d87e43542abfed7ee46c772333cbec8a12fa869c88e63ac257d

See more details on using hashes here.

File details

Details for the file pytz-2016.6-py2.4.egg.

File metadata

  • Download URL: pytz-2016.6-py2.4.egg
  • Upload date:
  • Size: 482.6 kB
  • Tags: Egg
  • Uploaded using Trusted Publishing? No

File hashes

Hashes for pytz-2016.6-py2.4.egg
Algorithm Hash digest
SHA256 f25c9941d5e80865bfab0f49627e7e199e81ac2f47497b19bebb498dc494b7c9
MD5 ab3b3d100406ab54fc869e2304cfc483
BLAKE2b-256 324878bcfd34df5de16a335ba00cd0d7cf816c9e34ce1f38469e9414eff4534d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page