The new major version of Pendulum is finally out!
A lot has been modified, both internally and public API wise, and as such this version is not backwards compatible with the 1.x branch.
It tries to be closer to the standard library than previous versions. An example of this is
that the constructor no longer accept anything else than
tzinfo objects. This is why as of this version
datetime() helper must always be preferred over the standard constructor.
months support for durations
Durations (previously intervals) now support specifying
>>> import pendulum >>> dur = pendulum.duration(years=2, months=3) >>> dt = pendulum.datetime(2015, 3, 14) >>> dt2 = dt + dur >>> print(dt2) '2017-06-14T00:00:00+00:00'
To maintain compatibility, native methods and properties will make approximations when years and months have been specified:
>>> dur.days 820 >>> dur.total_seconds() 70848000.0
Support for ISO 8601 duration and interval parsing
Pendulum now support parsing ISO 8601 duration and interval strings.
>>> import pendulum >>> pendulum.parse('P1Y2M10DT2H30M') Duration(years=1, months=2, weeks=1, days=3, hours=2, minutes=30) >>> pendulum.parse('2007-03-01T13:00:00Z/2008-05-11T15:30:00Z') <Period ['2007-03-01T13:00:00+00:00' -> '2008-05-11T15:30:00+00:00']> >>> pendulum.parse('2008-05-11T15:30:00Z/P1Y2M10DT2H30M') <Period ['2008-05-11T15:30:00+00:00' -> '2009-07-21T18:00:00+00:00']> >>> pendulum.parse('P1Y2M10DT2H30M/2008-05-11T15:30:00Z') <Period ['2007-03-01T13:00:00+00:00' -> '2008-05-11T15:30:00+00:00']>
Support for POSIX TZ specification for timezones
Pendulum now supports the POSIX TZ specification in tzinfo files to determine the DST transitions beyond the year 2038.
Let's take an example. In Pendulum v1, datetimes beyond year 2038 would take the DST information of the last transition.
>>> import pendulum >>> dt = pendulum.datetime(2134, 3, 28, 2, 30, tz='Europe/Paris') >>> print(dt) '2134-03-28T02:30:00+01:00'
Now, it will return the proper DST information.
>>> import pendulum >>> dt = pendulum.datetime(2134, 3, 28, 2, 30, tz='Europe/Paris') >>> print(dt) '2134-03-28T03:30:00+02:00'
Class names changes
Pendulum class has been renamed to
Interval class has been renamed to
create() has been removed
create() helper has been removed in favor of
Keywords changes for
strict keyword in
parse(), which initially controlled the type returned
by the helper and since replaced by the
exact keyword, now control the strictness of accepted strings.
strict=True means that
pendulum will not fallback on the
dateutil parser if it's
unable to recognize the string.
from_format() now only support one formatter
The previously named
alternative formatter is now the only one supported
>>> import pendulum >>> dt = pendulum.datetime(1975, 12, 25, 14, 15, 16) >>> dt.format('YYYY-MM-DD HH:mm:ss') '1975-12-25 14:15:16' >>> dt = pendulum.from_format('1975-05-21 22', 'YYYY-MM-DD HH') >>> print(dt) '1975-05-21T22:00:00+00:00'
at() now supports setting partial time
at() method now supports setting partial time.
>>> import pendulum >>> dt = pendulum.datetime(2018, 1, 15) >>> print(dt.at(10)) '2018-01-15T10:00:00+00:00' >>> print(dt.at(11, 30)) '2018-01-15T11:30:00+00:00'
diff_for_humans() method now returns
a few seconds when the difference in
seconds is less than a threshold.
>>> import pendulum >>> pendulum.now().diff_for_humans() 'a few seconds ago'
is_dstare now methods rather than properties (
- Changed the
reprof most common objects.
- Improved performances of the
set_to_string_format()/reset_to_string_format()methods have been removed.
xrange()method of the
Periodclass and made
- New locale system which uses CLDR data for most of the translations.