Skip to main content
This is a pre-production deployment of Warehouse. Changes made here affect the production instance of PyPI (
Help us improve Python packaging - Donate today!

Convert a timestamp from one timezone to another

Project Description

WTF Timezones?!

I can’t convert UTC to PST in my head, and google can’t do it for me either.

Every timezone converter website is full of spam and the worst UX imaginable.

wtftz assumes you’re trying to convert a UTC timestamp

print(wtftz.convert("2012-12-10T18:31:29.214653", "pst"))
# 2012-12-10 10:31:29.214653

unless you’re not

Note the embedded timezone in this iso-formatted string.

print(wtftz.convert("2012-12-10T18:31:29.214653-08:00", "pst"))
# 2012-12-10 18:31:29.214653

wtftz knows a few common abbreviations for timezones

print(wtftz.convert("1355236920", "est"))
# 2012-12-11 01:42:00
# Sorry, Australia! EST is most commonly used for US/Eastern!

wtftz gives back tzinfo-free timestamps because python’s timezones are broken!

print(wtftz.convert(, from_tz="pst", to_tz="utc"))
# 2012-12-11 06:45:04.075608
print(wtftz.convert(, from_tz="pst", to_tz="eastern"))
# 2012-12-11 01:45:18.343536

wtftz knows that you don’t know if the current time is PST or PDT

But it does the right thing, using PST or PDT when appropriate

print(wtftz.convert(, "pst"))
# 2012-12-11 06:48:39.860947
print(wtftz.convert(, "pdt"))
# 2012-12-11 06:48:39.860947

wtftz knows that you work with systems with nonstandard timestamp formats

print(wtftz.convert('2012/10/7 12:25:46', 'pst'))
# 2012-10-07 19:25:46
print(wtftz.convert('7 October 2012 12:25:46', 'pst'))
# 2012-10-07 19:25:46

wtftz will accept proper timezone names, too

print(wtftz.convert(, "US/Pacific"))
# 2012-12-10 15:04:03.644934
print(wtftz.convert(, "America/Chicago"))
# 2012-12-10 17:04:03.650494

But it can’t handle everything

print(wtftz.convert('2012:10:7:12:25:46', 'pst'))
# ...
# ValueError: Cannot parse timestamp 2012:10:7:12:25:46

Use it from the shell!

$ date && ./wtftz "`date`" pst && ./wtftz "`date`" utc
Mon Dec 10 23:43:06 PST 2012
2012-12-10 23:43:06
2012-12-11 07:43:06
$ date +%s && ./wtftz "`date +%s`" utc
2012-12-10 23:42:27

Wtftz can also handle free text strings

print(wtftz.convert_free("1355236920 to est"))
# 2012-12-11 01:42:00
print(wtftz.convert_free("2012-12-10T18:31:29.214653-08:00 to est"))
# 2012-12-10 21:31:29.214653
print(wtftz.convert_free("2012-12-10T18:31:29.214653 from pst to est"))
# 2012-12-10 21:31:29.214653
print(wtftz.convert_free("2012-12-10T18:31:29.214653 from utc to est"))
# 2012-12-10 13:31:29.214653


wtftz is in the cheese shop, so just:

pip install wtftz


Issues and Pull Requests are welcome!

I’m looking to expand the list of common timezone names to include foreign (to me) timezones and make the free-text parser smarter.


Tests are important. Pull requests will not be accepted without them.

python -m unittest discover


This README should be updated with examples as new behavior is added. To ensure that the file is formatted correctly, please check it:

pip install docutils
pip install pygments
python --long-description | > output.html

Ensure that the file parses and looks good.

Release History

Release History

This version
History Node


History Node


History Node


History Node


History Node


History Node


History Node


Download Files

Download Files

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

File Name & Checksum SHA256 Checksum Help Version File Type Upload Date
wtftz-0.2.4-py2.7.egg (10.4 kB) Copy SHA256 Checksum SHA256 2.7 Egg Dec 26, 2012
wtftz-0.2.4.tar.gz (5.8 kB) Copy SHA256 Checksum SHA256 Source Dec 26, 2012

Supported By

WebFaction WebFaction Technical Writing Elastic Elastic Search Pingdom Pingdom Monitoring Dyn Dyn DNS Sentry Sentry Error Logging CloudAMQP CloudAMQP RabbitMQ Heroku Heroku PaaS Kabu Creative Kabu Creative UX & Design Fastly Fastly CDN DigiCert DigiCert EV Certificate Rackspace Rackspace Cloud Servers DreamHost DreamHost Log Hosting