dateutil

Frameworks & Libraries

Extensions to the standard Python datetime module

Latest 2.9.0.post0 · by dateutilWritten in PythonWebsitedateutil/dateutilRSS

Changelog

2.9.0.post0

Latest
Fixed 1
  • Pinned setuptools_scm to <8 to ensure the generated _version.py file is compatible with all supported versions of Python

From dateutil

Version 2.9.0.post0 (2024-03-01)

Bugfixes
  • Pinned setuptools_scm to <8, which should make the generated _version.py file compatible with all supported versions of Python.
View originalPermalink
How 2.9.0.post0 went

2.9.0

Added 1
  • Made all dateutil submodules lazily imported using PEP 562, so on Python 3.7+ direct access like dateutil.tz.gettz() works without explicitly importing dateutil.tz
Changed 1
  • Updated tzdata version to 2024a
Fixed 1
  • Removed a call to datetime.utcfromtimestamp which is deprecated as of Python 3.12

From dateutil

Version 2.9.0 (2024-02-29)

Data updates
  • Updated tzdata version to 2024a. (gh pr #1342)
Features
  • Made all dateutil submodules lazily imported using PEP 562. On Python 3.7+, things like import dateutil; dateutil.tz.gettz("America/New_York") will now work without explicitly importing dateutil.tz, with the import occurring behind the scenes on first use. The old behavior remains on Python 3.6 and earlier. Fixed by Orson Adams. (gh issue #771, gh pr #1007)
Bugfixes
  • Removed a call to datetime.utcfromtimestamp, which is deprecated as of Python 3.12. Reported by Hugo van Kemenade (gh pr #1284), fixed by Thomas Grainger (gh pr #1285).
Documentation changes
  • Added note into docs and tests where relativedelta would return last day of the month only if the same day on a different month resolves to a date that doesn't exist. Reported by @hawkEye-01 (gh issue #1167). Fixed by @Mifrill (gh pr #1168)
View originalPermalink
How 2.9.0 went

2.8.2

Changed 1
  • Updated tzdata version to 2021a
Fixed 5
  • Fixed a bug in the parser where non-ValueError exceptions would be raised during exception handling
  • Fixed the custom repr for dateutil.parser.ParserError, which was not defined due to an indentation error
  • Fixed a bug that caused b' prefixes to appear in parse_isodate exception messages
  • Make isoparse raise when trying to parse times with inconsistent use of : separator
  • Fixed tz.gettz() not returning local time when passed an empty string

From dateutil

Version 2.8.2 (2021-07-08)

Data updates
  • Updated tzdata version to 2021a. (gh pr #1128)
Bugfixes
  • Fixed a bug in the parser where non-ValueError exceptions would be raised during exception handling; this would happen, for example, if an IllegalMonthError was raised in dateutil code. Fixed by Mark Bailey. (gh issue #981, pr #987).
  • Fixed the custom repr for dateutil.parser.ParserError, which was not defined due to an indentation error. (gh issue #991, gh pr #993)
  • Fixed a bug that caused b' prefixes to appear in parse_isodate exception messages. Reported and fixed by Paul Brown (@pawl) (gh pr #1122)
  • Make isoparse raise when trying to parse times with inconsistent use of : separator. Reported and fixed by @mariocj89 (gh pr #1125).
  • Fixed tz.gettz() not returning local time when passed an empty string. Reported by @labrys (gh issues #925, #926). Fixed by @ffe4 (gh pr #1024)
Documentation changes
  • Rearranged parser documentation into "Functions", "Classes" and "Warnings and Exceptions" categories. (gh issue #992, pr #994).
  • Updated parser.parse documentation to reflect the switch from ValueError to ParserError. (gh issue #992, pr #994).
  • Fixed methods in the rrule module not being displayed in the docs. (gh pr #1025)
  • Changed some relative links in the exercise documentation to refer to the document locations in the input tree, rather than the generated HTML files in the HTML output tree (which presumably will not exist in non-HTML output formats). (gh pr #1078).
Misc
  • Moved test_imports.py, test_internals.py and test_utils.py to pytest. Reported and fixed by @jpurviance (gh pr #978)
  • Added project_urls for documentation and source. Patch by @andriyor (gh pr #975).
  • Simplified handling of bytes and bytearray in _parser._timelex. Reported and fixed by @frenzymadness (gh issue #1060).
  • Changed the tests against the upstream tz database to always generate fat binaries, since until GH-590 and GH-1059 are resolved, "slim" zic binaries will cause problems in many zones, causing the tests to fail. This also updates zoneinfo.rebuild to always generate fat binaries. (gh pr #1076).
  • Moved sdist and wheel generation to use python-build. Reported and fixed by @mariocj89 (gh pr #1133).
View originalPermalink
How 2.8.2 went

2.8.1

Changed 5
  • Updated tzdata version to 2019c
  • Parsing errors will now raise ParserError, a subclass of ValueError, which has a nicer string representation
  • Changed error message raised when passing a bytes object as the time zone name to gettz in Python 3
  • Updated compatibility logic to support a potential Python 4.0 release
  • Updated many modules to use tz.UTC in favor of tz.tzutc() internally to avoid an unnecessary function call
Fixed 3
  • Fixed a race condition in the tzoffset and tzstr strong caches on Python 2.7
  • parser.parse will now raise TypeError when tzinfos is passed a type that cannot be interpreted as a time zone
  • Fixed issue where dateutil.tz was using a backported version of contextlib.nullcontext even in Python 3.7 due to a malformed import statement

From dateutil

Version 2.8.1 (2019-11-03)

Data updates
  • Updated tzdata version to 2019c.
Bugfixes
  • Fixed a race condition in the tzoffset and tzstr "strong" caches on Python 2.7. Reported by @kainjow (gh issue #901).
  • Parsing errors will now raise ParserError, a subclass of ValueError, which has a nicer string representation. Patch by @gfyoung (gh pr #881).
  • parser.parse will now raise TypeError when tzinfos is passed a type that cannot be interpreted as a time zone. Prior to this change, it would raise an UnboundLocalError instead. Patch by @jbrockmendel (gh pr #891).
  • Changed error message raised when when passing a bytes object as the time zone name to gettz in Python 3. Reported and fixed by @labrys () (gh issue #927, gh pr #935).
  • Changed compatibility logic to support a potential Python 4.0 release. Patch by Hugo van Kemenade (gh pr #950).
  • Updated many modules to use tz.UTC in favor of tz.tzutc() internally, to avoid an unnecessary function call. (gh pr #910).
  • Fixed issue where dateutil.tz was using a backported version of contextlib.nullcontext even in Python 3.7 due to a malformed import statement. (gh pr #963).
Tests
  • Switched from using assertWarns to using pytest.warns in the test suite. (gh pr #969).
  • Fix typo in setup.cfg causing PendingDeprecationWarning to not be explicitly specified as an error in the warnings filter. (gh pr #966)
  • Fixed issue where test_tzlocal_offset_equal would fail in certain environments (such as FreeBSD) due to an invalid assumption about what time zone names are provided. Reported and fixed by Kubilay Kocak (gh issue #918, pr #928).
  • Fixed a minor bug in test_isoparser related to bytes/str handling. Fixed by @fhuang5 (gh issue #776, gh pr #879).
  • Explicitly listed all markers used in the pytest configuration. (gh pr #915)
  • Extensive improvements to the parser test suite, including the adoption of pytest-style tests and the addition of parametrization of several test cases. Patches by @jbrockmendel (gh prs #735, #890, #892, #894).
  • Added tests for tzinfos input types. Patch by @jbrockmendel (gh pr #891).
  • Fixed failure of test suite when changing the TZ variable is forbidden. Patch by @shadchin (gh pr #893).
  • Pinned all test dependencies on Python 3.3. (gh prs #934, #962)
Documentation changes
  • Fixed many misspellings, typos and styling errors in the comments and documentation. Patch by Hugo van Kemenade (gh pr #952).
Misc
  • Added Python 3.8 to the trove classifiers. (gh pr #970)
  • Moved as many keys from setup.py to setup.cfg as possible. Fixed by @FakeNameSE, @aquinlan82, @jachen20, and @gurgenz221 (gh issue #871, gh pr #880).
  • Reorganized parser methods by functionality. Patch by @jbrockmendel (gh pr #882).
  • Switched release.py over to using pep517.build for creating releases, rather than direct invocations of setup.py. Fixed by @smeng10 (gh issue #869, gh pr #875).
  • Added a "build" environment into the tox configuration, to handle dependency management when making releases. Fixed by @smeng10 (gh issue #870,r gh pr #876).
  • GH #916, GH #971
View originalPermalink
How 2.8.1 went
2.7.5

Version 2.7.5 (2018-10-27)

Data updates
  • Update tzdata to 2018g
View originalPermalink
How 2.7.5 went
2.7.4

Version 2.7.4 (2018-10-24)

Data updates
  • Updated tzdata version to 2018f.
View originalPermalink
How 2.7.4 went
2.7.3

Version 2.7.3 (2018-05-09)

Added 2
  • Added changelog to documentation
  • Added documentation for dateutil.tz.gettz
Changed 5
  • Update tzdata to 2018e
  • Added doctest examples to tzfile documentation
  • Updated the documentation for relativedelta to remove references to tuple arguments for weekday and better explain the order of operations
  • Changed order of keywords in rrule docstring
  • Changed the default theme to sphinx_rtd_theme and updated sphinx configuration
Fixed 5
  • Fixed an issue where decimal.Decimal would cast NaN or infinite value in parser.parse, which will raise decimal.Decimal-specific errors
  • Fixed a ValueError being thrown if tzinfos call explicitly returns None
  • Fixed incorrect parsing of certain dates earlier than 100 AD when represented in the form "%B.%Y.%d", e.g. "December.0031.30"
  • Fixed a bug where automatically generated DTSTART was naive even if a specified UNTIL had a time zone
  • Cleaned up malformed RST in the tz documentation

From dateutil

Data updates
  • Update tzdata to 2018e. (gh pr #710)
Bugfixes
  • Fixed an issue where decimal.Decimal would cast NaN or infinite value in a parser.parse, which will raise decimal.Decimal-specific errors. Reported and fixed by @amureki (gh issue #662, gh pr #679).
  • Fixed a ValueError being thrown if tzinfos call explicity returns None. Reported by @pganssle (gh issue #661) Fixed by @parsethis (gh pr #681)
  • Fixed incorrect parsing of certain dates earlier than 100 AD when repesented in the form "%B.%Y.%d", e.g. "December.0031.30". (gh issue #687, pr #700)
  • Fixed a bug where automatically generated DTSTART was naive even if a specified UNTIL had a time zone. Automatically generated DTSTART will now take on the timezone of an UNTIL date, if provided. Reported by @href (gh issue #652). Fixed by @absreim (gh pr #693).
Documentation changes
  • Corrected link syntax and updated URL to https for ISO year week number notation in relativedelta examples. (gh issue #670, pr #711)
  • Add doctest examples to tzfile documentation. Done by @weatherpattern and @pganssle (gh pr #671)
  • Updated the documentation for relativedelta. Removed references to tuple arguments for weekday, explained effect of weekday(_, 1) and better explained the order of operations that relativedelta applies. Fixed by @kvn219 @huangy22 and @ElliotJH (gh pr #673)
  • Added changelog to documentation. (gh issue #692, gh pr #707)
  • Changed order of keywords in rrule docstring. Reported and fixed by @rmahajan14 (gh issue #686, gh pr #695).
  • Added documentation for dateutil.tz.gettz. Reported by @pganssle (gh issue #647). Fixed by @weatherpattern (gh pr #704)
  • Cleaned up malformed RST in the tz documentation. (gh issue #702, gh pr #706)
  • Changed the default theme to sphinx_rtd_theme, and changed the sphinx configuration to go along with that. (gh pr #707)
  • Reorganized dateutil.tz documentation and fixed issue with the dateutil.tz docstring. (gh pr #714)
Misc
  • GH #674, GH #688, GH #699
View originalPermalink
How 2.7.3 went
2.7.2

Version 2.7.2 (2018-03-26)

Fixed 1
  • Fixed an issue with the setup script running in non-UTF-8 environment

From dateutil

Bugfixes
  • Fixed an issue with the setup script running in non-UTF-8 environment. Reported and fixed by @gergondet (gh pr #651)
Misc
  • GH #655
View originalPermalink
How 2.7.2 went
2.7.1

Version 2.7.1 (2018-03-24)

Changed 2
  • Updated tzdata version to 2018d
  • Improve error message when rrule's dtstart and until are not both naive or both aware
Fixed 1
  • Fixed issue where parser.parse would occasionally raise decimal.Decimal-specific error types rather than ValueError

From dateutil

Data updates
  • Updated tzdata version to 2018d.
Bugfixes
  • Fixed issue where parser.parse would occasionally raise decimal.Decimal-specific error types rather than ValueError. Reported by @amureki (gh issue #632). Fixed by @pganssle (gh pr #636).
  • Improve error message when rrule's dtstart and until are not both naive or both aware. Reported and fixed by @ryanpetrello (gh issue #633, gh pr #634)
Misc
  • GH #644, GH #648
View originalPermalink
How 2.7.1 went
2.7.0

Version 2.7.0

Added 8
  • Added __all__ variable to the root package
  • Added python_requires to setup.py so that pip will distribute the right version of dateutil
  • Added the utils submodule for miscellaneous utilities
  • Added within_delta function to utils
  • Added today function to utils
  • Added default_tzinfo function to utils
  • Added dedicated ISO 8601 parsing function isoparse
  • Add support for parsing bytearray
Changed 5
  • Updated zoneinfo file to 2018c
  • Changed licensing scheme so all new contributions are dual licensed under Apache 2.0 and BSD
  • Moved parser module into parser/_parser.py and officially deprecated the use of several private functions and classes from that module
  • Tweaked parser error message to include rejected string format
  • Started raising a warning when the parser finds a timezone string that it cannot construct a tzinfo instance for
Fixed 5
  • Fixed assertion logic in parser to support dates like '2015-15-May'
  • Fixed IndexError in parser on dates with trailing colons
  • Fixed bug where hours were not validated, leading to improper parse
  • Fixed problem parsing strings in %b-%Y-%d format
  • Fixed problem parsing strings in the %d%B%y format
Removed 2
  • Dropped support for Python 2.6
  • Dropped support for Python 3.2

From dateutil

  • Dropped support for Python 2.6 (gh pr #362 by @jdufresne)
  • Dropped support for Python 3.2 (gh pr #626)
  • Updated zoneinfo file to 2018c (gh pr #616)
  • Changed licensing scheme so all new contributions are dual licensed under Apache 2.0 and BSD. (gh pr #542, issue #496)
  • Added all variable to the root package. Reported by @tebriel (gh issue #406), fixed by @mariocj89 (gh pr #494)
  • Added python_requires to setup.py so that pip will distribute the right version of dateutil. Fixed by @jakec-github (gh issue #537, pr #552)
  • Added the utils submodule, for miscellaneous utilities.
  • Added within_delta function to utils - added by @justanr (gh issue #432, gh pr #437)
  • Added today function to utils (gh pr #474)
  • Added default_tzinfo function to utils (gh pr #475), solving an issue reported by @nealmcb (gh issue #94)
  • Added dedicated ISO 8601 parsing function isoparse (gh issue #424). Initial implementation by @pganssle in gh pr #489 and #622, with a pre-release fix by @kirit93 (gh issue #546, gh pr #573).
  • Moved parser module into parser/_parser.py and officially deprecated the use of several private functions and classes from that module. (gh pr #501, #515)
  • Tweaked parser error message to include rejected string format, added by @pbiering (gh pr #300)
  • Add support for parsing bytesarray, reported by @uckelman (gh issue #417) and fixed by @uckelman and @pganssle (gh pr #514)
  • Started raising a warning when the parser finds a timezone string that it cannot construct a tzinfo instance for (rather than succeeding with no indication of an error). Reported and fixed by @jbrockmendel (gh pr #540)
  • Dropped the use of assert in the parser. Fixed by @jbrockmendel (gh pr #502)
  • Fixed to assertion logic in parser to support dates like '2015-15-May', reported and fixed by @jbrockmendel (gh pr #409)
  • Fixed IndexError in parser on dates with trailing colons, reported and fixed by @jbrockmendel (gh pr #420)
  • Fixed bug where hours were not validated, leading to improper parse. Reported by @heappro (gh pr #353), fixed by @jbrockmendel (gh pr #482)
  • Fixed problem parsing strings in %b-%Y-%d format. Reported and fixed by @jbrockmendel (gh pr #481)
  • Fixed problem parsing strings in the %d%B%y format. Reported by @asishm (gh issue #360), fixed by @jbrockmendel (gh pr #483)
  • Fixed problem parsing certain unambiguous strings when year <99 (gh pr #510). Reported by @alexwlchan (gh issue #293).
  • Fixed issue with parsing an unambiguous string representation of an ambiguous datetime such that if possible the correct value for fold is set. Fixes issue reported by @JordonPhillips and @pganssle (gh issue #318, #320, gh pr #517)
  • Fixed issue with improper rounding of fractional components. Reported by @dddmello (gh issue #427), fixed by @m-dz (gh pr #570)
  • Performance improvement to parser from removing certain min() calls. Reported and fixed by @jbrockmendel (gh pr #589)
  • Significantly refactored parser code by @jbrockmendel (gh prs #419, #436, #490, #498, #539) and @pganssle (gh prs #435, #468)
  • Implementated of hash for relativedelta and weekday, reported and fixed by @mrigor (gh pr #389)
  • Implemented abs for relativedelta. Reported by @binnisb and @pferreir (gh issue #350, pr #472)
  • Fixed relativedelta.weeks property getter and setter to work for both negative and positive values. Reported and fixed by @souliane (gh issue #459, pr #460)
  • Fixed issue where passing whole number floats to the months or years arguments of the relativedelta constructor would lead to errors during addition. Reported by @arouanet (gh pr #411), fixed by @lkollar (gh pr #553)
  • Added a pre-built tz.UTC object representing UTC (gh pr #497)
  • Added a cache to tz.gettz so that by default it will return the same object for identical inputs. This will change the semantics of certain operations between datetimes constructed with tzinfo=tz.gettz(...). (gh pr #628)
  • Changed the behavior of tz.tzutc to return a singleton (gh pr #497, #504)
  • Changed the behavior of tz.tzoffset to return the same object when passed the same inputs, with a corresponding performance improvement (gh pr #504)
  • Changed the behavior of tz.tzstr to return the same object when passed the same inputs. (gh pr #628)
  • Added .instance alternate constructors for tz.tzoffset and tz.tzstr, to allow the construction of a new instance if desired. (gh pr #628)
  • Added the tz.gettz.nocache function to allow explicit retrieval of a new instance of the relevant tzinfo. (gh pr #628)
  • Expand definition of tz.tzlocal equality so that the local zone is allow equality with tzoffset and tzutc. (gh pr #598)
  • Deprecated the idiosyncratic tzstr format mentioned in several examples but evidently designed exclusively for dateutil, and very likely not used by any current users. (gh issue #595, gh pr #606)
  • Added the tz.resolve_imaginary function, which generates a real date from an imaginary one, if necessary. Implemented by @Cheukting (gh issue #339, gh pr #607)
  • Fixed issue where the tz.tzstr constructor would erroneously succeed if passed an invalid value for tzstr. Fixed by @pablogsal (gh issue #259, gh pr #581)
  • Fixed issue with tz.gettz for TZ variables that start with a colon. Reported and fixed by @lapointexavier (gh pr #601)
  • Added a lock to tz.tzical's cache. Reported and fixed by @Unrud (gh pr #430)
  • Fixed an issue with fold support on certain Python 3 implementations that used the pre-3.6 pure Python implementation of datetime.replace, most notably pypy3 (gh pr #446).
  • Added support for VALUE=DATE-TIME for DTSTART in rrulestr. Reported by @potuz (gh issue #401) and fixed by @Unrud (gh pr #429)
  • Started enforcing that within VTIMEZONE, the VALUE parameter can only be omitted or DATE-TIME, per RFC 5545. Reported by @Unrud (gh pr #439)
  • Added support for TZID parameter for DTSTART in rrulestr. Reported and fixed by @ryanpetrello (gh issue #614, gh pr #624)
  • Added 'RRULE:' prefix to rrule strings generated by rrule.str, in compliance with the RFC. Reported by @AndrewPashkin (gh issue #86), fixed by @jarondl and @mlorant (gh pr #450)
  • Switched to setuptools_scm for version management, automatically calculating a version number from the git metadata. Reported by @jreback (gh issue #511), implemented by @Sulley38 (gh pr #564)
  • Switched setup.py to use find_packages, and started testing against pip installed versions of dateutil in CI. Fixed issue with parser import discovered by @jreback in pandas-dev/pandas#18141. (gh issue #507, pr #509)
  • Switched test suite to using pytest (gh pr #495)
  • Switched CI over to use tox. Fixed by @gaborbernat (gh pr #549)
  • Added a test-only dependency on freezegun. (gh pr #474)
  • Reduced number of CI builds on Appveyor. Fixed by @kirit93 (gh issue #529, gh pr #579)
  • Made xfails strict by default, so that an xpass is a failure. (gh pr #567)
  • Added a documentation generation stage to tox and CI. (gh pr #568)
  • Added an explicit warning when running python setup.py explaining how to run the test suites with pytest. Fixed by @lkollar. (gh issue #544, gh pr #548)
  • Added requirements-dev.txt for test dependency management (gh pr #499, #516)
  • Fixed code coverage metrics to account for Windows builds (gh pr #526)
  • Fixed code coverage metrics to NOT count xfails. Fixed by @gaborbernat (gh issue #519, gh pr #563)
  • Style improvement to zoneinfo.tzfile that was confusing to static type checkers. Reported and fixed by @quodlibetor (gh pr #485)
  • Several unused imports were removed by @jdufresne. (gh pr #486)
  • Switched isinstance(*, collections.Callable) to callable, which is available on all supported Python versions. Implemented by @jdufresne (gh pr #612)
  • Added CONTRIBUTING.md (gh pr #533)
  • Added AUTHORS.md (gh pr #542)
  • Corrected setup.py metadata to reflect author vs. maintainer, (gh issue #477, gh pr #538)
  • Corrected README to reflect that tests are now run in pytest. Reported and fixed by @m-dz (gh issue #556, gh pr #557)
  • Updated all references to RFC 2445 (iCalendar) to point to RFC 5545. Fixed by @mariocj89 (gh issue #543, gh pr #555)
  • Corrected parse documentation to reflect proper integer offset units, reported and fixed by @abrugh (gh pr #458)
  • Fixed dangling parenthesis in tzoffset documentation (gh pr #461)
  • Started including the license file in wheels. Reported and fixed by @jdufresne (gh pr #476)
  • Indendation fixes to parser docstring by @jbrockmendel (gh pr #492)
  • Moved many examples from the "examples" documentation into their appropriate module documentation pages. Fixed by @Tomasz-Kluczkowski and @jakec-github (gh pr #558, #561)
  • Fixed documentation so that the parser.isoparse documentation displays. Fixed by @alexchamberlain (gh issue #545, gh pr #560)
  • Refactored build and release sections and added setup instructions to CONTRIBUTING. Reported and fixed by @kynan (gh pr #562)
  • Cleaned up various dead links in the documentation. (gh pr #602, #608, #618)
View originalPermalink
How 2.7.0 went
View all

Discussion

If you publish dateutil, you can claim this product by proving you administer its repository.