pyrfc3339.parser – Parse RFC 3339 timestamps

pyrfc3339.parser.parse(timestamp, utc=False, produce_naive=False)

Parse an RFC 3339-formatted timestamp and return a datetime.datetime.

If the timestamp is presented in UTC, then the tzinfo parameter of the returned datetime will be set to pytz.utc.

>>> parse('2009-01-01T10:01:02Z')
datetime.datetime(2009, 1, 1, 10, 1, 2, tzinfo=<UTC>)

Otherwise, a tzinfo instance is created with the appropriate offset, and the tzinfo parameter of the returned datetime is set to that value.

>>> parse('2009-01-01T14:01:02-04:00')
datetime.datetime(2009, 1, 1, 14, 1, 2, tzinfo=<UTC-04:00>)

However, if parse() is called with utc=True, then the returned datetime will be normalized to UTC (and its tzinfo parameter set to pytz.utc), regardless of the input timezone.

>>> parse('2009-01-01T06:01:02-04:00', utc=True)
datetime.datetime(2009, 1, 1, 10, 1, 2, tzinfo=<UTC>)

The input is strictly required to conform to RFC 3339, and appropriate exceptions are thrown for invalid input.

>>> parse('2009-01-01T06:01:02')
Traceback (most recent call last):
...
ValueError: timestamp does not conform to RFC 3339
>>> parse('2009-01-01T25:01:02Z')
Traceback (most recent call last):
...
ValueError: hour must be in 0..23