Pendulum 0.8.0 is now out.

It is mostly a deprecation notification release before the first stable release and it also improves the parsing of ISO 8601 strings.

For the full list of changes, see the Change Log

New Features

New on() and at() methods

These methods replace the with_date() and with_time() methods which are now deprecated.

>>> import pendulum
>>> from datetime import time, date

>>> dt = pendulum.now()

>>> dt.on(1975, 5, 21).at(22, 32, 5).to_datetime_string()
'1975-05-21 22:32:05'

New strict keyword argument for parse()

A new strict keyword argument has been added to parse() in order to get the exact type matching the parsed string.

>>> import pendulum

>>> pendulum.parse('2012-05-03', strict=True)
# <Date [2012-05-03]>

>>> pendulum.parse('12:04:23', strict=True)
# <Time [12:04:23]>

Ability to pass the length of the range() method

It is now possible to give the length of the gap for the range() method on the Period class.

>>> import pendulum

>>> start = pendulum.Pendulum(2000, 1, 1)
>>> end = pendulum.Pendulum(2000, 1, 10)

>>> period = pendulum.period(start, end)

>>> for dt in period.range('days', 2):
>>>     print(dt)

'2000-01-01T00:00:00+00:00'
'2000-01-03T00:00:00+00:00'
'2000-01-05T00:00:00+00:00'
'2000-01-07T00:00:00+00:00'
'2000-01-09T00:00:00+00:00'

New datetime() method on the Timezone class

You can now get a normalized datetime object directly from a Timezone by using the datetime() method:

>>> import pendulum

>>> tz = pendulum.timezone('Europe/Paris')
>>> dt = tz.datetime(2013, 3, 31, 2, 30)
>>> dt.isoformat()
'2013-03-31T03:30:00+02:00'

Changes

Improved parsing of ISO 8601 strings.

The library now supports parsing most of the ISO 8601 strings:

Datetime

String Output
20161001T143028+0530 2016-10-01T14:30:28+05:30
20161001T14 2016-10-01T14:00:00+00:00

Date

String Output
2012 2012-01-01T00:00:00+00:00
2012-05-03 2012-05-03T00:00:00+00:00
20120503 2012-05-03T00:00:00+00:00
2012-05 2012-05-01T00:00:00+00:000

Ordinal day

String Output
2012-007 2012-01-07T00:00:00+00:00
2012007 2012-01-07T00:00:00+00:00

Week number

String Output
2012-W05 2012-01-30T00:00:00+00:00
2012W05 2012-01-30T00:00:00+00:00
2012-W05-5 2012-02-03T00:00:00+00:00
2012W055 2012-02-03T00:00:00+00:00

Time

When passing only time information the date will default to today.

String Output
00:00 2016-12-17T00:00:00+00:00
12:04:23 2016-12-17T12:04:23+00:00
120423 2016-12-17T12:04:23+00:00
12:04:23.45 2016-12-17T12:04:23.450000+00:00

Deprecations

  • with_date() and with_time() are deprecated. Use on() and at() instead.
  • create_from_date() and create_from_time() are deprecated. Use create() instead.