Skip to main content

tzinfo object for the local timezone

Project description

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.

Please note that if you getting a time zone called local, this is not a bug, it’s actually the main feature of tzlocal, that even if your system does NOT have a configuration file with the zoneinfo name of your time zone, it will still work.

You can also use tzlocal to get the name of your local timezone, but only if your system is configured to make that possible. tzlocal looks for the timezone name in /etc/timezone, /var/db/zoneinfo, /etc/sysconfig/clock and /etc/conf.d/clock. If your /etc/localtime is a symlink it can also extract the name from that symlink.

If you need the name of your local time zone, then please make sure your system is properly configured to allow that. If it isn’t configured, tzlocal will default to UTC.

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(2015, 4, 10, 7, 22))
>>> dt
datetime.datetime(2015, 4, 10, 7, 22, 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(2015, 4, 10, 1, 22, tzinfo=<DstTzInfo 'US/Eastern' EDT-1 day, 20:00:00 DST>)

Maintainer

Contributors

  • Marc Van Olmen

  • Benjamen Meyer

  • Manuel Ebert

  • Xiaokun Zhu

  • Cameris

  • Edward Betts

  • McK KIM

  • Cris Ewing

  • Ayala Shachar

  • Lev Maximov

  • Jakub Wilk

  • John Quarles

  • Preston Landers

  • Victor Torres

  • Jean Jordaan

  • Zackary Welch

  • Mickaël Schoentgen

  • Gabriel Corona

  • Alex Grönholm

(Sorry if I forgot someone)

License

Changes

3.0b1 (2020-09-21)

  • Dropped Python 2 support

  • Switched timezone provider from pytz to zoneinfo (PEP 615)

2.1 (2020-05-08)

  • No changes.

2.1b1 (2020-02-08)

  • The is_dst flag is wrong for Europe/Dublin on some Unix releases. I changed to another way of determining if DST is in effect or not.

  • Added support for Python 3.7 and 3.8. Dropped 3.5 although it still works.

2.0.0 (2019-07-23)

  • No differences since 2.0.0b3

Major differences since 1.5.1

  • When no time zone configuration can be find, tzlocal now return UTC. This is a major difference from 1.x, where an exception would be raised. This change is because Docker images often have no configuration at all, and the unix utilities will then default to UTC, so we follow that.

  • If tzlocal on Unix finds a timezone name in a /etc config file, then tzlocal now verifies that the timezone it fouds has the same offset as the local computer is configured with. If it doesn’t, something is configured incorrectly. (Victor Torres, regebro)

  • Get timezone via Termux getprop wrapper on Android. It’s not officially supported because we can’t test it, but at least we make an effort. (Jean Jordaan)

Minor differences and bug fixes

  • Skip comment lines when parsing /etc/timezone. (Edward Betts)

  • Don’t load timezone from current directory. (Gabriel Corona)

  • Now verifies that the config files actually contain something before reading them. (Zackary Welch, regebro)

  • Got rid of a BytesWarning (Mickaël Schoentgen)

  • Now handles if config file paths exists, but are directories.

  • Moved tests out from distributions

  • Support wheels

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)

  • 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.

Project details


Download files

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

Source Distribution

tzlocal-3.0b1.tar.gz (24.4 kB view details)

Uploaded Source

File details

Details for the file tzlocal-3.0b1.tar.gz.

File metadata

  • Download URL: tzlocal-3.0b1.tar.gz
  • Upload date:
  • Size: 24.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.2.0 requests-toolbelt/0.9.1 tqdm/4.49.0 CPython/3.8.5

File hashes

Hashes for tzlocal-3.0b1.tar.gz
Algorithm Hash digest
SHA256 efd2821b10836b046fac09c4e31e7b97f45b89e718e82b8bc18a9e424bb2f662
MD5 23edc9fcfd357c7ea7af79b75fcf9589
BLAKE2b-256 798c7d9608dd2643a144bd473405d268973ee1c67aac4c72c4d73910dc8a4754

See more details on using hashes here.

Supported by

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