Skip to main content

API CHANGE!

With version 3.0 of tzlocal, tzlocal no longer returned pytz objects, but zoneinfo objects, which has a different API. Since 4.0, it now restored partial compatibility for pytz users through Paul Ganssle’s pytz_deprecation_shim.

tzlocal 4.0 also adds an official function get_localzone_name() to get only the timezone name, instead of a timezone object. On unix, it can raise an error if you don’t have a timezone name configured, where get_localzone() will succeed, so only use that if you need the timezone name.

4.0 also adds way more information on what is going wrong in your configuration when the configuration files are unclear or contradictory.

Version 5.0 removes the pytz_deprecation_shim, and now only returns zoneinfo objects, like verion 3.0 did. If you need pytz objects, you have to stay on version 4.0. If there are bugs in version 4.0, I will release updates, but there will be no further functional changes on the 4.x branch.

Info

This Python module returns the IANA time zone name for your local time zone or a tzinfo object with the local timezone information, under Unix and Windows.

It requires Python 3.8 or later, and will use the backports.tzinfo package, for Python 3.8.

This module attempts to fix a glaring hole in the pytz and zoneinfo modules, 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.

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.

What it’s not for

It’s not for converting the current time between UTC and your local time. There are other, simpler ways of doing this. This is ig you need to know things like the name of the time zone, or if you need to be able to convert between your time zone and another time zone for times that are in the future or in the past.

For current time conversions to and from UTC, look in the Python time module.

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 are 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 your unix system doesn’t have a timezone configured, tzlocal will default to UTC.

Notes on Docker

It turns out that Docker images frequently have broken timezone setups. This usually resuts in a warning that the configuration is wrong, or that the timezone offset doesn’t match the found timezone.

The easiest way to fix that is to set a TZ variable in your docker setup to whatever timezone you want, which is usually the timezone your host computer has.

Usage

Load the local timezone:

>>> from tzlocal import get_localzone
>>> tz = get_localzone()
>>> tz
zoneinfo.ZoneInfo(key='Europe/Warsaw')

Create a local datetime:

>>> from datetime import datetime
>>> dt = datetime(2015, 4, 10, 7, 22, tzinfo=tz)
>>> dt
datetime.datetime(2015, 4, 10, 7, 22, tzinfo=zoneinfo.ZoneInfo(key='Europe/Warsaw'))

Lookup another timezone with zoneinfo (backports.zoneinfo on Python 3.8 or earlier):

>>> from zoneinfo import ZoneInfo
>>> eastern = ZoneInfo('US/Eastern')

Convert the datetime:

>>> dt.astimezone(eastern)
datetime.datetime(2015, 4, 10, 1, 22, tzinfo=zoneinfo.ZoneInfo(key='US/Eastern'))

If you just want the name of the local timezone, use get_localzone_name():

>>> from tzlocal import get_localzone_name
>>> get_localzone_name()
"Europe/Warsaw"

Please note that under Unix, get_localzone_name() may fail if there is no zone configured, where get_localzone() would generally succeed.

Troubleshooting

If you don’t get the result you expect, try running it with debugging turned on. Start a python interpreter that has tzlocal installed, and run the following code:

import logging
logging.basicConfig(level="DEBUG")
import tzlocal
tzlocal.get_localzone()

The output should look something like this, and this will tell you what configurations were found:

DEBUG:root:/etc/timezone found, contents:
 Europe/Warsaw

DEBUG:root:/etc/localtime found
DEBUG:root:2 found:
 {'/etc/timezone': 'Europe/Warsaw', '/etc/localtime is a symlink to': 'Europe/Warsaw'}
zoneinfo.ZoneInfo(key='Europe/Warsaw')

Development

For ease of development, there is a Makefile that will help you with basic tasks, like creating a development environment with all the necessary tools (although you need a supported Python version installed first):

$ make devenv

To run tests:

$ make test

Check the syntax:

$ make check

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

  • Julin S

  • Miroslav Šedivý

  • revansSZ

  • Sam Treweek

  • Peter Di Pasquale

  • Rongrong

(Sorry if I forgot someone)

License

Release files for tzlocal 5.2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for tzlocal 5.2
File Size Uploaded
tzlocal-5.2.tar.gz 30.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for tzlocal 5.2
File Interpreter ABI Platform
tzlocal-5.2-py3-none-any.whl Python 3 none any Details

Total release size:48.1 kB

Release files / tzlocal-5.2.tar.gz

Download URL tzlocal-5.2.tar.gz
Size 30.2 kB
Tags Source
SHA-256 checksum
How to use checksums
8d399205578f1a9342816409cc1e46a93ebd5755e39ea2d85334bea911bf0e6e
BLAKE2b-256 checksum
How to use checksums
04d3c19d65ae67636fe63953b20c2e4a8ced4497ea232c43ff8d01db16de8dc0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.12

Release files / tzlocal-5.2-py3-none-any.whl

Download URL tzlocal-5.2-py3-none-any.whl
Size 17.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
49816ef2fe65ea8ac19d19aa7a1ae0551c834303d5014c6d5a62e4cbda8047b8
BLAKE2b-256 checksum
How to use checksums
973fc4c51c55ff8487f2e6d0e618dba917e3c3ee2caae6cf0fbb59c9b1876f2e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.1 CPython/3.10.12

Release history Release notifications | RSS feed

5.4.4

2 release files

5.4.3

2 release files

5.4.2

2 release files

5.4.1

2 release files

5.4

2 release files

5.3.1

2 release files

5.3

2 release files

This release

5.2 This release

2 release files

5.1

2 release files

5.0.1

2 release files

5.0

2 release files

4.3.1

2 release files

4.3

2 release files

4.2

2 release files

4.1

2 release files

4.0.2

2 release files

4.0.1

2 release files

4.0

2 release files

3.0

2 release files

2.1

2 release files

2.0.0

2 release files

1.5.1

1 release file

1.4

1 release file

1.3.2

1 release file

1.3

1 release file

1.2.2

1 release file

1.2.1

1 release file

1.2

1 release file

1.1.3

1 release file

1.1.2

1 release file

1.1.1

1 release file

1.1

1 release file

1.0

1 release file

0.3

1 release file

0.2

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page