1Version 2.8.0 (2019-02-04) 2========================== 3 4Data updates 5------------ 6 7- Updated tzdata version to to 2018i. 8 9 10Features 11-------- 12 13- Added support for ``EXDATE`` parameters when parsing ``rrule`` strings. 14 Reported by @mlorant (gh issue #410), fixed by @nicoe (gh pr #859). 15- Added support for sub-minute time zone offsets in Python 3.6+. 16 Fixed by @cssherry (gh issue #582, pr #763) 17- Switched the ``tzoffset``, ``tzstr`` and ``gettz`` caches over to using weak 18 references, so that the cache expires when no other references to the 19 original ``tzinfo`` objects exist. This cache-expiry behavior is not 20 guaranteed in the public interface and may change in the future. To improve 21 performance in the case where transient references to the same time zones 22 are repeatedly created but no strong reference is continuously held, a 23 smaller "strong value" cache was also added. Weak value cache implemented by 24 @cs-cordero (gh pr #672, #801), strong cache added by 25 Gökçen Nurlu (gh issue #691, gh pr #761) 26 27 28Bugfixes 29-------- 30 31- Added time zone inference when initializing an ``rrule`` with a specified 32 ``UNTIL`` but without an explicitly specified ``DTSTART``; the time zone 33 of the generated ``DTSTART`` will now be taken from the ``UNTIL`` rule. 34 Reported by @href (gh issue #652). Fixed by @absreim (gh pr #693). 35- Fixed an issue where ``parser.parse`` would raise ``Decimal``-specific errors 36 instead of a standard ``ValueError`` if certain malformed values were parsed 37 (e.g. ``NaN`` or infinite values). Reported and fixed by 38 @amureki (gh issue #662, gh pr #679). 39- Fixed issue in ``parser`` where a ``tzinfos`` call explicitly returning 40 ``None`` would throw a ``ValueError``. 41 Fixed by @parsethis (gh issue #661, gh pr #681) 42- Fixed incorrect parsing of certain dates earlier than 100 AD when repesented 43 in the form "%B.%Y.%d", e.g. "December.0031.30". (gh issue #687, pr #700) 44- Add support for ISO 8601 times with comma as the decimal separator in the 45 ``dateutil.parser.isoparse`` function. (gh pr #721) 46- Changed handling of ``T24:00`` to be compliant with the standard. ``T24:00`` 47 now represents midnight on the *following* day. 48 Fixed by @cheukting (gh issue #658, gh pr #751) 49- Fixed an issue where ``isoparser.parse_isotime`` was unable to handle the 50 ``24:00`` variant representation of midnight. (gh pr #773) 51- Added support for more than 6 fractional digits in `isoparse`. 52 Reported and fixed by @jayschwa (gh issue #786, gh pr #787). 53- Added 'z' (lower case Z) as valid UTC time zone in isoparser. 54 Reported by @cjgibson (gh issue #820). Fixed by @Cheukting (gh pr #822) 55- Fixed a bug with base offset changes during DST in ``tzfile``, and refactored 56 the way base offset changes are detected. Originally reported on 57 StackOverflow by @MartinThoma. (gh issue #812, gh pr #810) 58- Fixed error condition in ``tz.gettz`` when a non-ASCII timezone is passed on 59 Windows in Python 2.7. (gh issue #802, pr #861) 60- Improved performance and inspection properties of ``tzname`` methods. 61 (gh pr #811) 62- Removed unnecessary binary_type compatibility shims. 63 Added by @jdufresne (gh pr #817) 64- Changed ``python setup.py test`` to print an error to ``stderr`` and exit 65 with 1 instead of 0. Reported and fixed by @hroncok (gh pr #814) 66- Added a ``pyproject.toml`` file with build requirements and an explicitly 67 specified build backend. (gh issue #736, gh prs #746, #863) 68 69 70Documentation changes 71--------------------- 72 73- Added documentation for the ``rrule.rrulestr`` function. 74 Fixed by @prdickson (gh issue #623, gh pr #762) 75- Added documentation for ``dateutil.tz.gettz``. 76 Fixed by @weatherpattern (gh issue #647, gh pr #704) 77- Add documentation for the ``dateutil.tz.win`` module and mocked out certain 78 Windows-specific modules so that autodoc can still be run on non-Windows 79 systems. (gh issue #442, pr #715) 80- Added changelog to documentation. (gh issue #692, gh pr #707) 81- Changed order of keywords in the ``rrule`` docstring. 82 Reported and fixed by @rmahajan14 (gh issue #686, gh pr #695). 83- Improved documentation on the use of ``until`` and ``count`` parameters in 84 ``rrule``. Fixed by @lucaferocino (gh pr #755). 85- Added an example of how to use a custom ``parserinfo`` subclass to parse 86 non-standard datetime formats in the examples documentation for ``parser``. 87 Added by @prdickson (gh #753) 88- Added doctest examples to ``tzfile`` documentation. 89 Patch by @weatherpattern (gh pr #671) 90- Updated the documentation for ``relativedelta``'s ``weekday`` arguments. 91 Fixed by @kvn219 @huangy22 and @ElliotJH (gh pr #673) 92- Improved explanation of the order that ``relativedelta`` components are 93 applied in. Fixed by @kvn219 @huangy22 and @ElliotJH (gh pr #673) 94- Expanded the description and examples in the ``relativedelta`` class. 95 Contributed by @andrewcbennett (gh pr #759) 96- Improved the contributing documentation to clarify where to put new changelog 97 files. Contributed by @andrewcbennett (gh pr #757) 98- Fixed a broken doctest in the ``relativedelta`` module. 99 Fixed by @nherriot (gh pr #758). 100- Changed the default theme to ``sphinx_rtd_theme``, and changed the sphinx 101 configuration accordingly. (gh pr #707) 102- Reorganized ``dateutil.tz`` documentation and fixed issue with the 103 ``dateutil.tz`` docstring. (gh pr #714) 104- Cleaned up malformed RST in the ``tz`` documentation. 105 (gh issue #702, gh pr #706) 106- Corrected link syntax and updated URL to https for ISO year week number 107 notation in ``relativedelta`` examples. (gh issue #670, pr #711) 108 109 110Misc 111---- 112 113- GH #674, GH #688, GH #699, GH #720, GH #723, GH #726, GH #727, GH #740, 114 GH #750, GH #760, GH #767, GH #772, GH #773, GH #780, GH #784, GH #785, 115 GH #791, GH #799, GH #813, GH #836, GH #839, GH #857 116 117 118Version 2.7.5 (2018-10-27) 119========================== 120 121Data updates 122------------ 123 124- Update tzdata to 2018g 125 126 127Version 2.7.4 (2018-10-24) 128========================== 129 130Data updates 131------------ 132 133- Updated tzdata version to 2018f. 134 135 136Version 2.7.3 (2018-05-09) 137========================== 138 139Data updates 140------------ 141 142- Update tzdata to 2018e. (gh pr #710) 143 144 145Bugfixes 146-------- 147 148- Fixed an issue where decimal.Decimal would cast `NaN` or infinite value in a 149 parser.parse, which will raise decimal.Decimal-specific errors. Reported and 150 fixed by @amureki (gh issue #662, gh pr #679). 151- Fixed a ValueError being thrown if tzinfos call explicity returns ``None``. 152 Reported by @pganssle (gh issue #661) Fixed by @parsethis (gh pr #681) 153- Fixed incorrect parsing of certain dates earlier than 100 AD when repesented 154 in the form "%B.%Y.%d", e.g. "December.0031.30". (gh issue #687, pr #700) 155- Fixed a bug where automatically generated DTSTART was naive even if a 156 specified UNTIL had a time zone. Automatically generated DTSTART will now 157 take on the timezone of an UNTIL date, if provided. Reported by @href (gh 158 issue #652). Fixed by @absreim (gh pr #693). 159 160 161Documentation changes 162--------------------- 163 164- Corrected link syntax and updated URL to https for ISO year week number 165 notation in relativedelta examples. (gh issue #670, pr #711) 166- Add doctest examples to tzfile documentation. Done by @weatherpattern and 167 @pganssle (gh pr #671) 168- Updated the documentation for relativedelta. Removed references to tuple 169 arguments for weekday, explained effect of weekday(_, 1) and better explained 170 the order of operations that relativedelta applies. Fixed by @kvn219 171 @huangy22 and @ElliotJH (gh pr #673) 172- Added changelog to documentation. (gh issue #692, gh pr #707) 173- Changed order of keywords in rrule docstring. Reported and fixed by 174 @rmahajan14 (gh issue #686, gh pr #695). 175- Added documentation for ``dateutil.tz.gettz``. Reported by @pganssle (gh 176 issue #647). Fixed by @weatherpattern (gh pr #704) 177- Cleaned up malformed RST in the ``tz`` documentation. (gh issue #702, gh pr 178 #706) 179- Changed the default theme to sphinx_rtd_theme, and changed the sphinx 180 configuration to go along with that. (gh pr #707) 181- Reorganized ``dateutil.tz`` documentation and fixed issue with the 182 ``dateutil.tz`` docstring. (gh pr #714) 183 184 185Misc 186---- 187 188- GH #674, GH #688, GH #699 189 190 191Version 2.7.2 (2018-03-26) 192========================== 193 194Bugfixes 195-------- 196 197- Fixed an issue with the setup script running in non-UTF-8 environment. 198 Reported and fixed by @gergondet (gh pr #651) 199 200 201Misc 202---- 203 204- GH #655 205 206 207Version 2.7.1 (2018-03-24) 208=========================== 209 210Data updates 211------------ 212 213- Updated tzdata version to 2018d. 214 215 216Bugfixes 217-------- 218 219- Fixed issue where parser.parse would occasionally raise 220 decimal.Decimal-specific error types rather than ValueError. Reported by 221 @amureki (gh issue #632). Fixed by @pganssle (gh pr #636). 222- Improve error message when rrule's dtstart and until are not both naive or 223 both aware. Reported and fixed by @ryanpetrello (gh issue #633, gh pr #634) 224 225 226Misc 227---- 228 229- GH #644, GH #648 230 231 232Version 2.7.0 233============= 234- Dropped support for Python 2.6 (gh pr #362 by @jdufresne) 235- Dropped support for Python 3.2 (gh pr #626) 236- Updated zoneinfo file to 2018c (gh pr #616) 237- Changed licensing scheme so all new contributions are dual licensed under 238 Apache 2.0 and BSD. (gh pr #542, issue #496) 239- Added __all__ variable to the root package. Reported by @tebriel 240 (gh issue #406), fixed by @mariocj89 (gh pr #494) 241- Added python_requires to setup.py so that pip will distribute the right 242 version of dateutil. Fixed by @jakec-github (gh issue #537, pr #552) 243- Added the utils submodule, for miscellaneous utilities. 244- Added within_delta function to utils - added by @justanr (gh issue #432, 245 gh pr #437) 246- Added today function to utils (gh pr #474) 247- Added default_tzinfo function to utils (gh pr #475), solving an issue 248 reported by @nealmcb (gh issue #94) 249- Added dedicated ISO 8601 parsing function isoparse (gh issue #424). 250 Initial implementation by @pganssle in gh pr #489 and #622, with a 251 pre-release fix by @kirit93 (gh issue #546, gh pr #573). 252- Moved parser module into parser/_parser.py and officially deprecated the use 253 of several private functions and classes from that module. (gh pr #501, #515) 254- Tweaked parser error message to include rejected string format, added by 255 @pbiering (gh pr #300) 256- Add support for parsing bytesarray, reported by @uckelman (gh issue #417) and 257 fixed by @uckelman and @pganssle (gh pr #514) 258- Started raising a warning when the parser finds a timezone string that it 259 cannot construct a tzinfo instance for (rather than succeeding with no 260 indication of an error). Reported and fixed by @jbrockmendel (gh pr #540) 261- Dropped the use of assert in the parser. Fixed by @jbrockmendel (gh pr #502) 262- Fixed to assertion logic in parser to support dates like '2015-15-May', 263 reported and fixed by @jbrockmendel (gh pr #409) 264- Fixed IndexError in parser on dates with trailing colons, reported and fixed 265 by @jbrockmendel (gh pr #420) 266- Fixed bug where hours were not validated, leading to improper parse. Reported 267 by @heappro (gh pr #353), fixed by @jbrockmendel (gh pr #482) 268- Fixed problem parsing strings in %b-%Y-%d format. Reported and fixed by 269 @jbrockmendel (gh pr #481) 270- Fixed problem parsing strings in the %d%B%y format. Reported by @asishm 271 (gh issue #360), fixed by @jbrockmendel (gh pr #483) 272- Fixed problem parsing certain unambiguous strings when year <99 (gh pr #510). 273 Reported by @alexwlchan (gh issue #293). 274- Fixed issue with parsing an unambiguous string representation of an ambiguous 275 datetime such that if possible the correct value for fold is set. Fixes 276 issue reported by @JordonPhillips and @pganssle (gh issue #318, #320, 277 gh pr #517) 278- Fixed issue with improper rounding of fractional components. Reported by 279 @dddmello (gh issue #427), fixed by @m-dz (gh pr #570) 280- Performance improvement to parser from removing certain min() calls. Reported 281 and fixed by @jbrockmendel (gh pr #589) 282- Significantly refactored parser code by @jbrockmendel (gh prs #419, #436, 283 #490, #498, #539) and @pganssle (gh prs #435, #468) 284- Implementated of __hash__ for relativedelta and weekday, reported and fixed 285 by @mrigor (gh pr #389) 286- Implemented __abs__ for relativedelta. Reported by @binnisb and @pferreir 287 (gh issue #350, pr #472) 288- Fixed relativedelta.weeks property getter and setter to work for both 289 negative and positive values. Reported and fixed by @souliane (gh issue #459, 290 pr #460) 291- Fixed issue where passing whole number floats to the months or years 292 arguments of the relativedelta constructor would lead to errors during 293 addition. Reported by @arouanet (gh pr #411), fixed by @lkollar (gh pr #553) 294- Added a pre-built tz.UTC object representing UTC (gh pr #497) 295- Added a cache to tz.gettz so that by default it will return the same object 296 for identical inputs. This will change the semantics of certain operations 297 between datetimes constructed with tzinfo=tz.gettz(...). (gh pr #628) 298- Changed the behavior of tz.tzutc to return a singleton (gh pr #497, #504) 299- Changed the behavior of tz.tzoffset to return the same object when passed the 300 same inputs, with a corresponding performance improvement (gh pr #504) 301- Changed the behavior of tz.tzstr to return the same object when passed the 302 same inputs. (gh pr #628) 303- Added .instance alternate constructors for tz.tzoffset and tz.tzstr, to 304 allow the construction of a new instance if desired. (gh pr #628) 305- Added the tz.gettz.nocache function to allow explicit retrieval of a new 306 instance of the relevant tzinfo. (gh pr #628) 307- Expand definition of tz.tzlocal equality so that the local zone is allow 308 equality with tzoffset and tzutc. (gh pr #598) 309- Deprecated the idiosyncratic tzstr format mentioned in several examples but 310 evidently designed exclusively for dateutil, and very likely not used by 311 any current users. (gh issue #595, gh pr #606) 312- Added the tz.resolve_imaginary function, which generates a real date from 313 an imaginary one, if necessary. Implemented by @Cheukting (gh issue #339, 314 gh pr #607) 315- Fixed issue where the tz.tzstr constructor would erroneously succeed if 316 passed an invalid value for tzstr. Fixed by @pablogsal (gh issue #259, 317 gh pr #581) 318- Fixed issue with tz.gettz for TZ variables that start with a colon. Reported 319 and fixed by @lapointexavier (gh pr #601) 320- Added a lock to tz.tzical's cache. Reported and fixed by @Unrud (gh pr #430) 321- Fixed an issue with fold support on certain Python 3 implementations that 322 used the pre-3.6 pure Python implementation of datetime.replace, most 323 notably pypy3 (gh pr #446). 324- Added support for VALUE=DATE-TIME for DTSTART in rrulestr. Reported by @potuz 325 (gh issue #401) and fixed by @Unrud (gh pr #429) 326- Started enforcing that within VTIMEZONE, the VALUE parameter can only be 327 omitted or DATE-TIME, per RFC 5545. Reported by @Unrud (gh pr #439) 328- Added support for TZID parameter for DTSTART in rrulestr. Reported and 329 fixed by @ryanpetrello (gh issue #614, gh pr #624) 330- Added 'RRULE:' prefix to rrule strings generated by rrule.__str__, in 331 compliance with the RFC. Reported by @AndrewPashkin (gh issue #86), fixed by 332 @jarondl and @mlorant (gh pr #450) 333- Switched to setuptools_scm for version management, automatically calculating 334 a version number from the git metadata. Reported by @jreback (gh issue #511), 335 implemented by @Sulley38 (gh pr #564) 336- Switched setup.py to use find_packages, and started testing against pip 337 installed versions of dateutil in CI. Fixed issue with parser import 338 discovered by @jreback in pandas-dev/pandas#18141. (gh issue #507, pr #509) 339- Switched test suite to using pytest (gh pr #495) 340- Switched CI over to use tox. Fixed by @gaborbernat (gh pr #549) 341- Added a test-only dependency on freezegun. (gh pr #474) 342- Reduced number of CI builds on Appveyor. Fixed by @kirit93 (gh issue #529, 343 gh pr #579) 344- Made xfails strict by default, so that an xpass is a failure. (gh pr #567) 345- Added a documentation generation stage to tox and CI. (gh pr #568) 346- Added an explicit warning when running python setup.py explaining how to run 347 the test suites with pytest. Fixed by @lkollar. (gh issue #544, gh pr #548) 348- Added requirements-dev.txt for test dependency management (gh pr #499, #516) 349- Fixed code coverage metrics to account for Windows builds (gh pr #526) 350- Fixed code coverage metrics to NOT count xfails. Fixed by @gaborbernat 351 (gh issue #519, gh pr #563) 352- Style improvement to zoneinfo.tzfile that was confusing to static type 353 checkers. Reported and fixed by @quodlibetor (gh pr #485) 354- Several unused imports were removed by @jdufresne. (gh pr #486) 355- Switched ``isinstance(*, collections.Callable)`` to callable, which is available 356 on all supported Python versions. Implemented by @jdufresne (gh pr #612) 357- Added CONTRIBUTING.md (gh pr #533) 358- Added AUTHORS.md (gh pr #542) 359- Corrected setup.py metadata to reflect author vs. maintainer, (gh issue #477, 360 gh pr #538) 361- Corrected README to reflect that tests are now run in pytest. Reported and 362 fixed by @m-dz (gh issue #556, gh pr #557) 363- Updated all references to RFC 2445 (iCalendar) to point to RFC 5545. Fixed 364 by @mariocj89 (gh issue #543, gh pr #555) 365- Corrected parse documentation to reflect proper integer offset units, 366 reported and fixed by @abrugh (gh pr #458) 367- Fixed dangling parenthesis in tzoffset documentation (gh pr #461) 368- Started including the license file in wheels. Reported and fixed by 369 @jdufresne (gh pr #476) 370- Indendation fixes to parser docstring by @jbrockmendel (gh pr #492) 371- Moved many examples from the "examples" documentation into their appropriate 372 module documentation pages. Fixed by @Tomasz-Kluczkowski and @jakec-github 373 (gh pr #558, #561) 374- Fixed documentation so that the parser.isoparse documentation displays. 375 Fixed by @alexchamberlain (gh issue #545, gh pr #560) 376- Refactored build and release sections and added setup instructions to 377 CONTRIBUTING. Reported and fixed by @kynan (gh pr #562) 378- Cleaned up various dead links in the documentation. (gh pr #602, #608, #618) 379 380Version 2.6.1 381============= 382- Updated zoneinfo file to 2017b. (gh pr #395) 383- Added Python 3.6 to CI testing (gh pr #365) 384- Removed duplicate test name that was preventing a test from being run. 385 Reported and fixed by @jdufresne (gh pr #371) 386- Fixed testing of folds and gaps, particularly on Windows (gh pr #392) 387- Fixed deprecated escape characters in regular expressions. Reported by 388 @nascheme and @thierryba (gh issue #361), fixed by @thierryba (gh pr #358) 389- Many PEP8 style violations and other code smells were fixed by @jdufresne 390 (gh prs #358, #363, #364, #366, #367, #368, #372, #374, #379, #380, #398) 391- Improved performance of tzutc and tzoffset objects. (gh pr #391) 392- Fixed issue with several time zone classes around DST transitions in any 393 zones with +0 standard offset (e.g. Europe/London) (gh issue #321, pr #390) 394- Fixed issue with fuzzy parsing where tokens similar to AM/PM that are in the 395 end skipped were dropped in the fuzzy_with_tokens list. Reported and fixed 396 by @jbrockmendel (gh pr #332). 397- Fixed issue with parsing dates of the form X m YY. Reported by @jbrockmendel. 398 (gh issue #333, pr #393) 399- Added support for parser weekdays with less than 3 characters. Reported by 400 @arcadefoam (gh issue #343), fixed by @jonemo (gh pr #382) 401- Fixed issue with the addition and subtraction of certain relativedeltas. 402 Reported and fixed by @kootenpv (gh issue #346, pr #347) 403- Fixed issue where the COUNT parameter of rrules was ignored if 0. Fixed by 404 @mshenfield (gh pr #330), reported by @vaultah (gh issue #329). 405- Updated documentation to include the new tz methods. (gh pr #324) 406- Update documentation to reflect that the parser can raise TypeError, reported 407 and fixed by @tomchuk (gh issue #336, pr #337) 408- Fixed an incorrect year in a parser doctest. Fixed by @xlotlu (gh pr #357) 409- Moved version information into _version.py and set up the versions more 410 granularly. 411 412Version 2.6.0 413============= 414- Added PEP-495-compatible methods to address ambiguous and imaginary dates in 415 time zones in a backwards-compatible way. Ambiguous dates and times can now 416 be safely represented by all dateutil time zones. Many thanks to Alexander 417 Belopolski (@abalkin) and Tim Peters @tim-one for their inputs on how to 418 address this. Original issues reported by Yupeng and @zed (lP: 1390262, 419 gh issues #57, #112, #249, #284, #286, prs #127, #225, #248, #264, #302). 420- Added new methods for working with ambiguous and imaginary dates to the tz 421 module. datetime_ambiguous() determines if a datetime is ambiguous for a given 422 zone and datetime_exists() determines if a datetime exists in a given zone. 423 This works for all fold-aware datetimes, not just those provided by dateutil. 424 (gh issue #253, gh pr #302) 425- Fixed an issue where dst() in Portugal in 1996 was returning the wrong value 426 in tz.tzfile objects. Reported by @abalkin (gh issue #128, pr #225) 427- Fixed an issue where zoneinfo.ZoneInfoFile errors were not being properly 428 deep-copied. (gh issue #226, pr #225) 429- Refactored tzwin and tzrange as a subclass of a common class, tzrangebase, as 430 there was substantial overlapping functionality. As part of this change, 431 tzrange and tzstr now expose a transitions() function, which returns the 432 DST on and off transitions for a given year. (gh issue #260, pr #302) 433- Deprecated zoneinfo.gettz() due to confusion with tz.gettz(), in favor of 434 get() method of zoneinfo.ZoneInfoFile objects. (gh issue #11, pr #310) 435- For non-character, non-stream arguments, parser.parse now raises TypeError 436 instead of AttributeError. (gh issues #171, #269, pr #247) 437- Fixed an issue where tzfile objects were not properly handling dst() and 438 tzname() when attached to datetime.time objects. Reported by @ovacephaloid. 439 (gh issue #292, pr #309) 440- /usr/share/lib/zoneinfo was added to TZPATHS for compatibility with Solaris 441 systems. Reported by @dhduvall (gh issue #276, pr #307) 442- tzoffset and tzrange objects now accept either a number of seconds or a 443 datetime.timedelta() object wherever previously only a number of seconds was 444 allowed. (gh pr #264, #277) 445- datetime.timedelta objects can now be added to relativedelta objects. Reported 446 and added by Alec Nikolas Reiter (@justanr) (gh issue #282, pr #283 447- Refactored relativedelta.weekday and rrule.weekday into a common base class 448 to reduce code duplication. (gh issue #140, pr #311) 449- An issue where the WKST parameter was improperly rendering in str(rrule) was 450 reported and fixed by Daniel LePage (@dplepage). (gh issue #262, pr #263) 451- A replace() method has been added to rrule objects by @jendas1, which creates 452 new rrule with modified attributes, analogous to datetime.replace (gh pr #167) 453- Made some significant performance improvements to rrule objects in Python 2.x 454 (gh pr #245) 455- All classes defining equality functions now return NotImplemented when 456 compared to unsupported classes, rather than raising TypeError, to allow other 457 classes to provide fallback support. (gh pr #236) 458- Several classes have been marked as explicitly unhashable to maintain 459 identical behavior between Python 2 and 3. Submitted by Roy Williams 460 (@rowillia) (gh pr #296) 461- Trailing whitespace in easter.py has been removed. Submitted by @OmgImAlexis 462 (gh pr #299) 463- Windows-only batch files in build scripts had line endings switched to CRLF. 464 (gh pr #237) 465- @adamchainz updated the documentation links to reflect that the canonical 466 location for readthedocs links is now at .io, not .org. (gh pr #272) 467- Made some changes to the CI and codecov to test against newer versions of 468 Python and pypy, and to adjust the code coverage requirements. For the moment, 469 full pypy3 compatibility is not supported until a new release is available, 470 due to upstream bugs in the old version affecting PEP-495 support. 471 (gh prs #265, #266, #304, #308) 472- The full PGP signing key fingerprint was added to the README.md in favor of 473 the previously used long-id. Reported by @valholl (gh issue #287, pr #304) 474- Updated zoneinfo to 2016i. (gh issue #298, gh pr #306) 475 476 477Version 2.5.3 478============= 479- Updated zoneinfo to 2016d 480- Fixed parser bug where unambiguous datetimes fail to parse when dayfirst is 481 set to true. (gh issue #233, pr #234) 482- Bug in zoneinfo file on platforms such as Google App Engine which do not 483 do not allow importing of subprocess.check_call was reported and fixed by 484 @savraj (gh issue #239, gh pr #240) 485- Fixed incorrect version in documentation (gh issue #235, pr #243) 486 487Version 2.5.2 488============= 489- Updated zoneinfo to 2016c 490- Fixed parser bug where yearfirst and dayfirst parameters were not being 491 respected when no separator was present. (gh issue #81 and #217, pr #229) 492 493Version 2.5.1 494============= 495- Updated zoneinfo to 2016b 496- Changed MANIFEST.in to explicitly include test suite in source distributions, 497 with help from @koobs (gh issue #193, pr #194, #201, #221) 498- Explicitly set all line-endings to LF, except for the NEWS file, on a 499 per-repository basis (gh pr #218) 500- Fixed an issue with improper caching behavior in rruleset objects (gh issue 501 #104, pr #207) 502- Changed to an explicit error when rrulestr strings contain a missing BYDAY 503 (gh issue #162, pr #211) 504- tzfile now correctly handles files containing leapcnt (although the leapcnt 505 information is not actually used). Contributed by @hjoukl (gh issue #146, pr 506 #147) 507- Fixed recursive import issue with tz module (gh pr #204) 508- Added compatibility between tzwin objects and datetime.time objects (gh issue 509 #216, gh pr #219) 510- Refactored monolithic test suite by module (gh issue #61, pr #200 and #206) 511- Improved test coverage in the relativedelta module (gh pr #215) 512- Adjusted documentation to reflect possibly counter-intuitive properties of 513 RFC-5545-compliant rrules, and other documentation improvements in the rrule 514 module (gh issue #105, gh issue #149 - pointer to the solution by @phep, 515 pr #213). 516 517 518Version 2.5.0 519============= 520- Updated zoneinfo to 2016a 521- zoneinfo_metadata file version increased to 2.0 - the updated updatezinfo.py 522 script will work with older zoneinfo_metadata.json files, but new metadata 523 files will not work with older updatezinfo.py versions. Additionally, we have 524 started hosting our own mirror of the Olson databases on a github pages 525 site (https://dateutil.github.io/tzdata/) (gh pr #183) 526- dateutil zoneinfo tarballs now contain the full zoneinfo_metadata file used 527 to generate them. (gh issue #27, gh pr #85) 528- relativedelta can now be safely subclassed without derived objects reverting 529 to base relativedelta objects as a result of arithmetic operations. 530 (lp:1010199, gh issue #44, pr #49) 531- relativedelta 'weeks' parameter can now be set and retrieved as a property of 532 relativedelta instances. (lp: 727525, gh issue #45, pr #49) 533- relativedelta now explicitly supports fractional relative weeks, days, hours, 534 minutes and seconds. Fractional values in absolute parameters (year, day, etc) 535 are now deprecated. (gh issue #40, pr #190) 536- relativedelta objects previously did not use microseconds to determine of two 537 relativedelta objects were equal. This oversight has been corrected. 538 Contributed by @elprans (gh pr #113) 539- rrule now has an xafter() method for retrieving multiple recurrences after a 540 specified date. (gh pr #38) 541- str(rrule) now returns an RFC2445-compliant rrule string, contributed by 542 @schinckel and @armicron (lp:1406305, gh issue #47, prs #50, #62 and #160) 543- rrule performance under certain conditions has been significantly improved 544 thanks to a patch contributed by @dekoza, based on an article by Brian Beck 545 (@exogen) (gh pr #136) 546- The use of both the 'until' and 'count' parameters is now deprecated as 547 inconsistent with RFC2445 (gh pr #62, #185) 548- Parsing an empty string will now raise a ValueError, rather than returning the 549 datetime passed to the 'default' parameter. (gh issue #78, pr #187) 550- tzwinlocal objects now have a meaningful repr() and str() implementation 551 (gh issue #148, prs #184 and #186) 552- Added equality logic for tzwin and tzwinlocal objects. (gh issue #151, 553 pr #180, #184) 554- Added some flexibility in subclassing timelex, and switched the default 555 behavior over to using string methods rather than comparing against a fixed 556 list. (gh pr #122, #139) 557- An issue causing tzstr() to crash on Python 2.x was fixed. (lp: 1331576, 558 gh issue #51, pr #55) 559- An issue with string encoding causing exceptions under certain circumstances 560 when tzname() is called was fixed. (gh issue #60, #74, pr #75) 561- Parser issue where calling parse() on dates with no day specified when the 562 day of the month in the default datetime (which is "today" if unspecified) is 563 greater than the number of days in the parsed month was fixed (this issue 564 tended to crop up between the 29th and 31st of the month, for obvious reasons) 565 (canonical gh issue #25, pr #30, #191) 566- Fixed parser issue causing fuzzy_with_tokens to raise an unexpected exception 567 in certain circumstances. Contributed by @MichaelAquilina (gh pr #91) 568- Fixed parser issue where years > 100 AD were incorrectly parsed. Contributed 569 by @Bachmann1234 (gh pr #130) 570- Fixed parser issue where commas were not a valid separator between seconds 571 and microseconds, preventing parsing of ISO 8601 dates. Contributed by 572 @ryanss (gh issue #28, pr #106) 573- Fixed issue with tzwin encoding in locales with non-Latin alphabets 574 (gh issue #92, pr #98) 575- Fixed an issue where tzwin was not being properly imported on Windows. 576 Contributed by @labrys. (gh pr #134) 577- Fixed a problem causing issues importing zoneinfo in certain circumstances. 578 Issue and solution contributed by @alexxv (gh issue #97, pr #99) 579- Fixed an issue where dateutil timezones were not compatible with basic time 580 objects. One of many, many timezone related issues contributed and tested by 581 @labrys. (gh issue #132, pr #181) 582- Fixed issue where tzwinlocal had an invalid utcoffset. (gh issue #135, 583 pr #141, #142) 584- Fixed issue with tzwin and tzwinlocal where DST transitions were incorrectly 585 parsed from the registry. (gh issue #143, pr #178) 586- updatezinfo.py no longer suppresses certain OSErrors. Contributed by @bjamesv 587 (gh pr #164) 588- An issue that arose when timezone locale changes during runtime has been 589 fixed by @carlosxl and @mjschultz (gh issue #100, prs #107, #109) 590- Python 3.5 was added to the supported platforms in the metadata (@tacaswell 591 gh pr #159) and the test suites (@moreati gh pr #117). 592- An issue with tox failing without unittest2 installed in Python 2.6 was fixed 593 by @moreati (gh pr #115) 594- Several deprecated functions were replaced in the tests by @moreati 595 (gh pr #116) 596- Improved the logic in Travis and Appveyor to alleviate issues where builds 597 were failing due to connection issues when downloading the IANA timezone 598 files. In addition to adding our own mirror for the files (gh pr #183), the 599 download is now retried a number of times (with a delay) (gh pr #177) 600- Many failing doctests were fixed by @moreati. (gh pr #120) 601- Many fixes to the documentation (gh pr #103, gh pr #87 from @radarhere, 602 gh pr #154 from @gpoesia, gh pr #156 from @awsum, gh pr #168 from @ja8zyjits) 603- Added a code coverage tool to the CI to help improve the library. (gh pr #182) 604- We now have a mailing list - dateutil@python.org, graciously hosted by 605 Python.org. 606 607 608Version 2.4.2 609============= 610- Updated zoneinfo to 2015b. 611- Fixed issue with parsing of tzstr on Python 2.7.x; tzstr will now be decoded 612 if not a unicode type. gh #51 (lp:1331576), gh pr #55. 613- Fix a parser issue where AM and PM tokens were showing up in fuzzy date 614 stamps, triggering inappropriate errors. gh #56 (lp: 1428895), gh pr #63. 615- Missing function "setcachesize" removed from zoneinfo __all__ list by @ryanss, 616 fixing an issue with wildcard imports of dateutil.zoneinfo. (gh pr #66). 617- (PyPI only) Fix an issue with source distributions not including the test 618 suite. 619 620 621Version 2.4.1 622============= 623 624- Added explicit check for valid hours if AM/PM is specified in parser. 625 (gh pr #22, issue #21) 626- Fix bug in rrule introduced in 2.4.0 where byweekday parameter was not 627 handled properly. (gh pr #35, issue #34) 628- Fix error where parser allowed some invalid dates, overwriting existing hours 629 with the last 2-digit number in the string. (gh pr #32, issue #31) 630- Fix and add test for Python 2.x compatibility with boolean checking of 631 relativedelta objects. Implemented by @nimasmi (gh pr #43) and Cédric Krier 632 (lp: 1035038) 633- Replaced parse() calls with explicit datetime objects in unit tests unrelated 634 to parser. (gh pr #36) 635- Changed private _byxxx from sets to sorted tuples and fixed one currently 636 unreachable bug in _construct_byset. (gh pr #54) 637- Additional documentation for parser (gh pr #29, #33, #41) and rrule. 638- Formatting fixes to documentation of rrule and README.rst. 639- Updated zoneinfo to 2015a. 640 641Version 2.4.0 642============= 643 644- Fix an issue with relativedelta and freezegun (lp:1374022) 645- Fix tzinfo in windows for timezones without dst (lp:1010050, gh #2) 646- Ignore missing timezones in windows like in POSIX 647- Fix minimal version requirement for six (gh #6) 648- Many rrule changes and fixes by @pganssle (gh pull requests #13 #14 #17), 649 including defusing some infinite loops (gh #4) 650 651Version 2.3 652=========== 653 654- Cleanup directory structure, moved test.py to dateutil/tests/test.py 655 656- Changed many aspects of dealing with the zone info file. Instead of a cache, 657 all the zones are loaded to memory, but symbolic links are loaded only once, 658 so not much memory is used. 659 660- The package is now zip-safe, and universal-wheelable, thanks to changes in 661 the handling of the zoneinfo file. 662 663- Fixed tzwin silently not imported on windows python2 664 665- New maintainer, together with new hosting: GitHub, Travis, Read-The-Docs 666 667Version 2.2 668=========== 669 670- Updated zoneinfo to 2013h 671 672- fuzzy_with_tokens parse addon from Christopher Corley 673 674- Bug with LANG=C fixed by Mike Gilbert 675 676Version 2.1 677=========== 678 679- New maintainer 680 681- Dateutil now works on Python 2.6, 2.7 and 3.2 from same codebase (with six) 682 683- #704047: Ismael Carnales' patch for a new time format 684 685- Small bug fixes, thanks for reporters! 686 687 688Version 2.0 689=========== 690 691- Ported to Python 3, by Brian Jones. If you need dateutil for Python 2.X, 692 please continue using the 1.X series. 693 694- There's no such thing as a "PSF License". This source code is now 695 made available under the Simplified BSD license. See LICENSE for 696 details. 697 698Version 1.5 699=========== 700 701- As reported by Mathieu Bridon, rrules were matching the bysecond rules 702 incorrectly against byminute in some circumstances when the SECONDLY 703 frequency was in use, due to a copy & paste bug. The problem has been 704 unittested and corrected. 705 706- Adam Ryan reported a problem in the relativedelta implementation which 707 affected the yearday parameter in the month of January specifically. 708 This has been unittested and fixed. 709 710- Updated timezone information. 711 712 713Version 1.4.1 714============= 715 716- Updated timezone information. 717 718 719Version 1.4 720=========== 721 722- Fixed another parser precision problem on conversion of decimal seconds 723 to microseconds, as reported by Erik Brown. Now these issues are gone 724 for real since it's not using floating point arithmetic anymore. 725 726- Fixed case where tzrange.utcoffset and tzrange.dst() might fail due 727 to a date being used where a datetime was expected (reported and fixed 728 by Lennart Regebro). 729 730- Prevent tzstr from introducing daylight timings in strings that didn't 731 specify them (reported by Lennart Regebro). 732 733- Calls like gettz("GMT+3") and gettz("UTC-2") will now return the 734 expected values, instead of the TZ variable behavior. 735 736- Fixed DST signal handling in zoneinfo files. Reported by 737 Nicholas F. Fabry and John-Mark Gurney. 738 739 740Version 1.3 741=========== 742 743- Fixed precision problem on conversion of decimal seconds to 744 microseconds, as reported by Skip Montanaro. 745 746- Fixed bug in constructor of parser, and converted parser classes to 747 new-style classes. Original report and patch by Michael Elsdörfer. 748 749- Initialize tzid and comps in tz.py, to prevent the code from ever 750 raising a NameError (even with broken files). Johan Dahlin suggested 751 the fix after a pyflakes run. 752 753- Version is now published in dateutil.__version__, as requested 754 by Darren Dale. 755 756- All code is compatible with new-style division. 757 758 759Version 1.2 760=========== 761 762- Now tzfile will round timezones to full-minutes if necessary, 763 since Python's datetime doesn't support sub-minute offsets. 764 Thanks to Ilpo Nyyssönen for reporting the issue. 765 766- Removed bare string exceptions, as reported and fixed by 767 Wilfredo Sánchez Vega. 768 769- Fix bug in leap count parsing (reported and fixed by Eugene Oden). 770 771 772Version 1.1 773=========== 774 775- Fixed rrule byyearday handling. Abramo Bagnara pointed out that 776 RFC2445 allows negative numbers. 777 778- Fixed --prefix handling in setup.py (by Sidnei da Silva). 779 780- Now tz.gettz() returns a tzlocal instance when not given any 781 arguments and no other timezone information is found. 782 783- Updating timezone information to version 2005q. 784 785 786Version 1.0 787=========== 788 789- Fixed parsing of XXhXXm formatted time after day/month/year 790 has been parsed. 791 792- Added patch by Jeffrey Harris optimizing rrule.__contains__. 793 794 795Version 0.9 796=========== 797 798- Fixed pickling of timezone types, as reported by 799 Andreas Köhler. 800 801- Implemented internal timezone information with binary 802 timezone files. datautil.tz.gettz() function will now 803 try to use the system timezone files, and fallback to 804 the internal versions. It's also possible to ask for 805 the internal versions directly by using 806 dateutil.zoneinfo.gettz(). 807 808- New tzwin timezone type, allowing access to Windows 809 internal timezones (contributed by Jeffrey Harris). 810 811- Fixed parsing of unicode date strings. 812 813- Accept parserinfo instances as the parser constructor 814 parameter, besides parserinfo (sub)classes. 815 816- Changed weekday to spell the not-set n value as None 817 instead of 0. 818 819- Fixed other reported bugs. 820 821 822Version 0.5 823=========== 824 825- Removed ``FREQ_`` prefix from rrule frequency constants 826 WARNING: this breaks compatibility with previous versions. 827 828- Fixed rrule.between() for cases where "after" is achieved 829 before even starting, as reported by Andreas Köhler. 830 831- Fixed two digit zero-year parsing (such as 31-Dec-00), as 832 reported by Jim Abramson, and included test case for this. 833 834- Sort exdate and rdate before iterating over them, so that 835 it's not necessary to sort them before adding to the rruleset, 836 as reported by Nicholas Piper. 837