technology from back to front

RFC3339: Simple, canonical date parsing and formatting for Python

As part of a customer project some years ago, we wrote an [implementation]( of the interesting parts of RFC [3339]( for Python. The abstract for the RFC says

> This document defines a date and time format for use in Internet
> protocols that is a profile of the ISO 8601 standard for
> representation of dates and times using the Gregorian calendar.

We needed to be able to robustly transfer timestamps between languages (Javascript and Python, chiefly) without getting tangled up in timezone troubles or complex ambiguous parsing problems.

Our code provides

* simple, standard, robust, cross-language (e.g. Javascript) format for parsing and printing time stamps
* a standard no-frills “UTC” `tzinfo` class and singleton instance
* a standard no-frills fixed-offset `tzinfo` class
* other utilities for helping write robust timezone-aware time manipulation code


These examples are taken from the doctests/docstrings in the module source itself. See the module documentation for many more informative examples.

Parsing a timestamp, with timezone support and timestamp equivalence:

>>> midnightUTC = parse_datetime(“2008-08-24T00:00:00Z”)
>>> oneamBST = parse_datetime(“2008-08-24T01:00:00+01:00″)
>>> midnightUTC == oneamBST

Printing a timestamp:

>>> oneamBST.isoformat()
>>> parse_datetime(“2008-08-24T00:00:00.123Z”).isoformat()

Downloading the code

The code is [available on github]( It’s [MIT-licensed](

* Browse the code [here](
* Download a [tarball]( of the latest code

You can also install the module directly from github using `pip`:

pip install -e git://

  1. Have you considered TAI64[1]?

  2. TAI64 is fine, but not supported natively by Javascript (unlike the RFC3339 profile of ISO8601). It’s also not so human readable.


× 6 = eighteen

2000-14 LShift Ltd, 1st Floor, Hoxton Point, 6 Rufus Street, London, N1 6PE, UK+44 (0)20 7729 7060   Contact us