3.2.0 - 2026-01-30
- Dropped support for PyPy below PyPy3.11 #937
- Optimize usage of
re.methods #741 - Fixed
pendulum.parsenot being marked as exported #693 - Fixed
pendulum.parse('now', tz='...')ignoring the timezone #701 - Use
pathlibto read Unix TZ data #742 - Fixed
Intervaldeepcopying #850 - Fixed typo in
end_of('century')docs #910 - Bumped PyO3 to 0.27 #922
- Fixed incorrect date offset calculation in Rust extensions #918
- Changed locales and
pytestto be lazy loaded #926 - Fixed error of
Durationdeepcopy not including weeks #933 - Fixed empty
Durations not being an error in Python ISO8601 parser implementation #903 - Fixed parsing invalid interval string #860
- Fixed pluralization bug in
Duration.in_words()#826
- Added HI (Hindi) locale #902
- Removed dependency on
pytz#911
3.1.0 - 2025-04-19
- Added support for Python 3.13 #871
- Removed support for Python 3.8 #863
- Fixed pure Python wheels support #889
- Fixed
pendulum.tz.timezones()to use system tzdata #801 - Fixed spelling of Kyiv #885
- Fixed
DeprecationWarningfromutcfromtimestamp#887 - Fixed parsing of invalid intervals #843
- Added UA (Ukraine) locale #793
- Added BG (Bulgarian) locale #812
- Fixed KO (Korean) translations for
beforeandafter#858
3.0.0 - 2023-12-16
- Relaxed dependency constraints. #760
- The testing helpers are now optional and must be opted-in via the
testextra. #778
- Removed remaining mentions of periods instead of intervals. #757
- Fixed the behavior of the
week_of_monthproperty for edge cases in January and December. #774 - Fixed the handling of the
foldattribute when deep-copying aDateTimeinstance. #776 - Fixed errors where hours and days were not handled properly when adding durations. #775
- Fixed errors where hours and days were not handled properly when adding durations. #775
3.0.0b1 - 2023-10-01
- Made
instance()support all native types (date, time, datetime). #732
- Dropped support for Python 3.7. #734
- Rewrote extensions in Rust. #721
- Made day of week convention more consistent across the codebase. #731
- Fixed datetime string representation to match the native library. #733
- Fixed issues on some system when retrieving the local timezone. #733
- Fixed DST handling in
start_of()/end_of()methods. #713
3.0.0a1 - 2022-11-23
- Added new testing helpers to time travel. #626
- Dropped support for Python 2.7, 3.5 and 3.6. #569
- The
Timezoneclass now relies on the nativezoneinfo.ZoneInfoclass. #569 - Renamed the
Periodclass toInterval. #676 - Renamed the
periodhelper tointerval. #676 - Removed existing testing helpers:
test()andset_test_now(). #626
- Added the
sklocale. #575 - Added the
jalocale. #610 - Added the
helocale. #585 - Added the
svlocale. #562
2.1.1 - 2020-07-13
- Fixed errors where invalid timezones were matched in
from_format()(#374). - Fixed errors when subtracting negative timedeltas (#419).
- Fixed errors in total units computation for durations with years and months (#482).
- Fixed an error where the
foldattribute was overridden when usingreplace()(#414). - Fixed an error where
now()was not returning the correct result on DST transitions (#483). - Fixed inconsistent typing annotation for the
parse()function (#452).
- Added the
pllocale (#459).
2.1.0 - 2020-03-07
- Added better typing and PEP-561 compliance (#320).
- Added the
is_anniversary()method as an alias ofis_birthday()(#298).
- Dropped support for Python 3.4.
is_utc()will now returnTruefor any datetime with an offset of 0, similar to the behavior in the1.*versions (#295)Duration.in_words()will now return0 millisecondsfor empty durations.
- Fixed various issues with timezone transitions for some edge cases (#321, (#350)).
- Fixed out of bound detection for
nth_of("month")(#357). - Fixed an error where extra text was accepted in
from_format()(#372). - Fixed a recursion error when adding time to a
DateTimewith a fixed timezone (#431). - Fixed errors where
Periodinstances were not properly compared to other classes, especiallytimedeltainstances (#427). - Fixed deprecation warnings due to internal regexps (#427).
- Fixed an error where the
test()helper would not unset the test instance when an exception was raised (#445). - Fixed an error where the
week_of_monthattribute was not returning the correct value (#446). - Fixed an error in the way the
ZISO-8601 UTC designator was not parsed as UTC (#448).
- Added the
nllocale. - Added the
itlocale. - Added the
idlocale. - Added the
nblocale. - Added the
nnlocale.
2.0.5 - 2019-07-03
- Fixed ISO week dates not being parsed properly in
from_format(). - Fixed loading of some timezones with empty posix spec.
- Fixed deprecation warnings.
- Added RU locale.
2.0.4 - 2018-10-30
- Fixed
from_format()not recognizing input strings when the specified pattern had escaped elements. - Fixed missing
xtoken for string formatting. - Fixed reading timezone files.
- Added support for parsing padded 2-digit days of the month with
from_format() - Fixed
from_format()trying to parse escaped tokens. - Fixed the
ztoken timezone parsing infrom_format()to allow underscores. - Fixed C extensions build errors.
- Fixed
agecalculation for future dates.
2.0.3 - 2018-07-30
- Fixed handling of
pytztimezones. - Fixed some formatter's tokens handling.
- Fixed errors on some systems when retrieving timezone from localtime files.
- Fixed
diffmethods. - Fixed
closest()/farthest()methods.
2.0.2 - 2018-05-29
- Fixed the
weeksproperty for negativePeriodinstances. - Fixed
start_of()methods not setting microseconds to 0. - Fixed errors on some systems when retrieving timezone from clock files.
- Fixed parsing of partial time.
- Fixed parsing not raising an error for week 53 for ordinary years.
- Fixed string formatting not supporting
strftimeformat.
2.0.1 - 2018-05-10
- Fixed behavior of the
YYtoken infrom_format(). - Fixed errors on some systems when retrieving timezone from clock files.
2.0.0 - 2018-05-08
- Added years and months support to durations.
- Added the
test_local_timezone()andset_local_timezone()helpers to ease testing. - Added support of ISO 8601 duration parsing.
- Added support of ISO 8601 interval parsing.
- Added a
local()helper. - Added a
naive()helper and anaive()method. - Added support for POSIX specification to extend timezones DST transitions.
Pendulumclass has been renamed toDateTime.Intervalclass has been renamed toDuration.- Changed and improved the timezone system.
- Removed the
create()helper. - Removed the
utcnow()helper. strictkeyword argument forparsehas been renamed toexact.at()now supports setting partial time.local,utcandis_dstare now methods rather than properties (is_local(),is_utc(),is_dst()).- Changed the
reprof most common objects. - Made the
strictkeyword argument forparsefalse by default, which means it will not fallback on thedateutilparser. - Improved performances of the
precise_diff()helper. - The
alternativeformatter is now the default one. set_to_string_format()/reset_to_string_format()methods have been removed.from_format()now uses the alternative formatter tokens.- Removed
xrange()method of thePeriodclass and maderange()a generator. - New locale system which uses CLDR data for most of the translations.
diff_for_humans()now returnsa few secondswhere appropriate.- Removed
Period.intersect().