PyTZ

Python Time Zone Library
Download

PyTZ Ranking & Summary

Advertisement

  • Rating:
  • License:
  • MIT/X Consortium Lic...
  • Price:
  • FREE
  • Publisher Name:
  • Stuart Bishop
  • Publisher web site:
  • http://stuartbishop.net/

PyTZ Tags


PyTZ Description

Python Time Zone Library It's a library that allows accurate and cross platform timezone calculations using Python 2.3 or higher.PyTZ brings the Olson tz database into Python. It's a library that allows accurate and cross platform timezone calculations using Python 2.3 or higher. It also solves the issue of ambiguous times at the end of daylight savings, which you can read more about in the Python Library Reference (datetime.tzinfo).Amost all (over 540) of the Olson timezones are supported .Note that this library differs from the documented Python API for tzinfo implementations; if you want to create local wallclock times you need to use the localize() method documented in this document. In addition, if you perform date arithmetic on local times that cross DST boundaries, the results may be in an incorrect timezone (ie. subtract 1 minute from 2002-10-27 1:00 EST and you get 2002-10-27 0:59 EST instead of the correct 2002-10-27 1:59 EDT). A normalize() method is provided to correct this. Unfortunatly these issues cannot be resolved without modifying the Python datetime implementation.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 installIf 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 pytzIf you already have the .egg file, you can use that too:easy_install pytz-2008g-py2.6.eggExample & Usage:>>> 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-0500The 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 AMT+0020'It is safe for timezones without daylight savings trasitions 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 savings time and other timezone transitions. In this example, loc_dt is set to the instant when daylight savings 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 localtimes 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 also needs special attention. This also needs to use the normalize method to ensure the conversion is correct.>>> 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 = au_tz.normalize(utc_dt.astimezone(au_tz))>>> au_dt.strftime(fmt)'2006-03-27 08:34:59 EST+1100'>>> utc_dt2 = utc.normalize(au_dt.astimezone(utc))>>> utc_dt2.strftime(fmt)'2006-03-26 21:34:59 UTC+0000'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 savings 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 EST+1100'>>> utc_dt2 = au_dt.astimezone(utc)>>> utc_dt2.strftime(fmt)'2006-03-26 21:34:59 UTC+0000' Requirements: · Python What's New in This Release: · This release updates Pakistan daylight savings changes for 2009.


PyTZ Related Software