Version 2.8.0 (2019-02-04)
==========================

Data updates
------------

- Updated tzdata version to to 2018i.


Features
--------

- Added support for ``EXDATE`` parameters when parsing ``rrule`` strings.
  Reported by @mlorant (gh issue #410), fixed by @nicoe (gh pr #859).
- Added support for sub-minute time zone offsets in Python 3.6+.
  Fixed by @cssherry (gh issue #582, pr #763)
- Switched the ``tzoffset``, ``tzstr`` and ``gettz`` caches over to using weak
  references, so that the cache expires when no other references to the
  original ``tzinfo`` objects exist. This cache-expiry behavior is not
  guaranteed in the public interface and may change in the future. To improve
  performance in the case where transient references to the same time zones
  are repeatedly created but no strong reference is continuously held, a
  smaller "strong value" cache was also added. Weak value cache implemented by
  @cs-cordero (gh pr #672, #801), strong cache added by
  Gökçen Nurlu (gh issue #691, gh pr #761)


Bugfixes
--------

- Added time zone inference when initializing an ``rrule`` with a specified
  ``UNTIL`` but without an explicitly specified ``DTSTART``; the time zone
  of the generated ``DTSTART`` will now be taken from the ``UNTIL`` rule.
  Reported by @href (gh issue #652). Fixed by @absreim (gh pr #693).
- Fixed an issue where ``parser.parse`` would raise ``Decimal``-specific errors
  instead of a standard ``ValueError`` if certain malformed values were parsed
  (e.g. ``NaN`` or infinite values). Reported and fixed by
  @amureki (gh issue #662, gh pr #679).
- Fixed issue in ``parser`` where a ``tzinfos`` call explicitly returning
  ``None`` would throw a ``ValueError``.
  Fixed by @parsethis (gh issue #661, 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)
- Add support for ISO 8601 times with comma as the decimal separator in the
  ``dateutil.parser.isoparse`` function. (gh pr #721)
- Changed handling of ``T24:00`` to be compliant with the standard. ``T24:00``
  now represents midnight on the *following* day.
  Fixed by @cheukting (gh issue #658, gh pr #751)
- Fixed an issue where ``isoparser.parse_isotime`` was unable to handle the
  ``24:00`` variant representation of midnight. (gh pr #773)
- Added support for more than 6 fractional digits in `isoparse`.
  Reported and fixed by @jayschwa (gh issue #786, gh pr #787).
- Added 'z' (lower case Z) as valid UTC time zone in isoparser.
  Reported by @cjgibson (gh issue #820). Fixed by @Cheukting (gh pr #822)
- Fixed a bug with base offset changes during DST in ``tzfile``, and refactored
  the way base offset changes are detected. Originally reported on
  StackOverflow by @MartinThoma. (gh issue #812, gh pr #810)
- Fixed error condition in ``tz.gettz`` when a non-ASCII timezone is passed on
  Windows in Python 2.7. (gh issue #802, pr #861)
- Improved performance and inspection properties of ``tzname`` methods.
  (gh pr #811)
- Removed unnecessary binary_type compatibility shims.
  Added by @jdufresne (gh pr #817)
- Changed ``python setup.py test`` to print an error to ``stderr`` and exit
  with 1 instead of 0. Reported and fixed by @hroncok (gh pr #814)
- Added a ``pyproject.toml`` file with build requirements and an explicitly
  specified build backend. (gh issue #736, gh prs #746, #863)


Documentation changes
---------------------

- Added documentation for the ``rrule.rrulestr`` function.
  Fixed by @prdickson (gh issue #623, gh pr #762)
- Added documentation for ``dateutil.tz.gettz``.
  Fixed by @weatherpattern (gh issue #647, gh pr #704)
- Add documentation for the ``dateutil.tz.win`` module and mocked out certain
  Windows-specific modules so that autodoc can still be run on non-Windows
  systems. (gh issue #442, pr #715)
- Added changelog to documentation. (gh issue #692, gh pr #707)
- Changed order of keywords in the ``rrule`` docstring.
  Reported and fixed by @rmahajan14 (gh issue #686, gh pr #695).
- Improved documentation on the use of ``until`` and ``count`` parameters in
  ``rrule``. Fixed by @lucaferocino (gh pr #755).
- Added an example of how to use a custom ``parserinfo`` subclass to parse
  non-standard datetime formats in the examples documentation for ``parser``.
  Added by @prdickson (gh #753)
- Added doctest examples to ``tzfile`` documentation.
  Patch by @weatherpattern (gh pr #671)
- Updated the documentation for ``relativedelta``'s ``weekday`` arguments.
  Fixed by @kvn219 @huangy22 and @ElliotJH (gh pr #673)
- Improved explanation of the order that ``relativedelta`` components are
  applied in. Fixed by @kvn219 @huangy22 and @ElliotJH (gh pr #673)
- Expanded the description and examples in the ``relativedelta`` class.
  Contributed by @andrewcbennett (gh pr #759)
- Improved the contributing documentation to clarify where to put new changelog
  files. Contributed by @andrewcbennett (gh pr #757)
- Fixed a broken doctest in the ``relativedelta`` module.
  Fixed by @nherriot (gh pr #758).
- Changed the default theme to ``sphinx_rtd_theme``, and changed the sphinx
  configuration accordingly. (gh pr #707)
- Reorganized ``dateutil.tz`` documentation and fixed issue with the
  ``dateutil.tz`` docstring. (gh pr #714)
- Cleaned up malformed RST in the ``tz`` documentation.
  (gh issue #702, gh pr #706)
- Corrected link syntax and updated URL to https for ISO year week number
  notation in ``relativedelta`` examples. (gh issue #670, pr #711)


Misc
----

- GH #674, GH #688, GH #699, GH #720, GH #723, GH #726, GH #727, GH #740,
  GH #750, GH #760, GH #767, GH #772, GH #773, GH #780, GH #784, GH #785,
  GH #791, GH #799, GH #813, GH #836, GH #839, GH #857


Version 2.7.5 (2018-10-27)
==========================

Data updates
------------

- Update tzdata to 2018g


Version 2.7.4 (2018-10-24)
==========================

Data updates
------------

- Updated tzdata version to 2018f.


Version 2.7.3 (2018-05-09)
==========================

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


Version 2.7.2 (2018-03-26)
==========================

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


Version 2.7.1 (2018-03-24)
===========================

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


Version 2.7.0
=============
- 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)

Version 2.6.1
=============
- Updated zoneinfo file to 2017b. (gh pr #395)
- Added Python 3.6 to CI testing (gh pr #365)
- Removed duplicate test name that was preventing a test from being run.
  Reported and fixed by @jdufresne (gh pr #371)
- Fixed testing of folds and gaps, particularly on Windows (gh pr #392)
- Fixed deprecated escape characters in regular expressions. Reported by
  @nascheme and @thierryba (gh issue #361), fixed by @thierryba (gh pr #358)
- Many PEP8 style violations and other code smells were fixed by @jdufresne
  (gh prs #358, #363, #364, #366, #367, #368, #372, #374, #379, #380, #398)
- Improved performance of tzutc and tzoffset objects. (gh pr #391)
- Fixed issue with several time zone classes around DST transitions in any
  zones with +0 standard offset (e.g. Europe/London) (gh issue #321, pr #390)
- Fixed issue with fuzzy parsing where tokens similar to AM/PM that are in the
  end skipped were dropped in the fuzzy_with_tokens list. Reported and fixed
  by @jbrockmendel (gh pr #332).
- Fixed issue with parsing dates of the form X m YY. Reported by @jbrockmendel.
  (gh issue #333, pr #393)
- Added support for parser weekdays with less than 3 characters. Reported by
  @arcadefoam (gh issue #343), fixed by @jonemo (gh pr #382)
- Fixed issue with the addition and subtraction of certain relativedeltas.
  Reported and fixed by @kootenpv (gh issue #346, pr #347)
- Fixed issue where the COUNT parameter of rrules was ignored if 0. Fixed by
  @mshenfield (gh pr #330), reported by @vaultah (gh issue #329).
- Updated documentation to include the new tz methods. (gh pr #324)
- Update documentation to reflect that the parser can raise TypeError, reported
  and fixed by @tomchuk (gh issue #336, pr #337)
- Fixed an incorrect year in a parser doctest. Fixed by @xlotlu (gh pr #357)
- Moved version information into _version.py and set up the versions more
  granularly.

Version 2.6.0
=============
- Added PEP-495-compatible methods to address ambiguous and imaginary dates in
  time zones in a backwards-compatible way. Ambiguous dates and times can now
  be safely represented by all dateutil time zones. Many thanks to Alexander
  Belopolski (@abalkin) and Tim Peters @tim-one for their inputs on how to
  address this. Original issues reported by Yupeng and @zed (lP: 1390262,
  gh issues #57, #112, #249, #284, #286, prs #127, #225, #248, #264, #302).
- Added new methods for working with ambiguous and imaginary dates to the tz
  module. datetime_ambiguous() determines if a datetime is ambiguous for a given
  zone and datetime_exists() determines if a datetime exists in a given zone.
  This works for all fold-aware datetimes, not just those provided by dateutil.
  (gh issue #253, gh pr #302)
- Fixed an issue where dst() in Portugal in 1996 was returning the wrong value
  in tz.tzfile objects. Reported by @abalkin (gh issue #128, pr #225)
- Fixed an issue where zoneinfo.ZoneInfoFile errors were not being properly
  deep-copied. (gh issue #226, pr #225)
- Refactored tzwin and tzrange as a subclass of a common class, tzrangebase, as
  there was substantial overlapping functionality. As part of this change,
  tzrange and tzstr now expose a transitions() function, which returns the
  DST on and off transitions for a given year. (gh issue #260, pr #302)
- Deprecated zoneinfo.gettz() due to confusion with tz.gettz(), in favor of
  get() method of zoneinfo.ZoneInfoFile objects. (gh issue #11, pr #310)
- For non-character, non-stream arguments, parser.parse now raises TypeError
  instead of AttributeError. (gh issues #171, #269, pr #247)
- Fixed an issue where tzfile objects were not properly handling dst() and
  tzname() when attached to datetime.time objects. Reported by @ovacephaloid.
  (gh issue #292, pr #309)
- /usr/share/lib/zoneinfo was added to TZPATHS for compatibility with Solaris
  systems. Reported by @dhduvall (gh issue #276, pr #307)
- tzoffset and tzrange objects now accept either a number of seconds or a
  datetime.timedelta() object wherever previously only a number of seconds was
  allowed. (gh pr #264, #277)
- datetime.timedelta objects can now be added to relativedelta objects. Reported
  and added by Alec Nikolas Reiter (@justanr) (gh issue #282, pr #283
- Refactored relativedelta.weekday and rrule.weekday into a common base class
  to reduce code duplication. (gh issue #140, pr #311)
- An issue where the WKST parameter was improperly rendering in str(rrule) was
  reported and fixed by Daniel LePage (@dplepage). (gh issue #262, pr #263)
- A replace() method has been added to rrule objects by @jendas1, which creates
  new rrule with modified attributes, analogous to datetime.replace (gh pr #167)
- Made some significant performance improvements to rrule objects in Python 2.x
  (gh pr #245)
- All classes defining equality functions now return NotImplemented when
  compared to unsupported classes, rather than raising TypeError, to allow other
  classes to provide fallback support. (gh pr #236)
- Several classes have been marked as explicitly unhashable to maintain
  identical behavior between Python 2 and 3. Submitted by Roy Williams
  (@rowillia) (gh pr #296)
- Trailing whitespace in easter.py has been removed. Submitted by @OmgImAlexis
  (gh pr #299)
- Windows-only batch files in build scripts had line endings switched to CRLF.
  (gh pr #237)
- @adamchainz updated the documentation links to reflect that the canonical
  location for readthedocs links is now at .io, not .org. (gh pr #272)
- Made some changes to the CI and codecov to test against newer versions of
  Python and pypy, and to adjust the code coverage requirements. For the moment,
  full pypy3 compatibility is not supported until a new release is available,
  due to upstream bugs in the old version affecting PEP-495 support.
  (gh prs #265, #266, #304, #308)
- The full PGP signing key fingerprint was added to the README.md in favor of
  the previously used long-id. Reported by @valholl (gh issue #287, pr #304)
- Updated zoneinfo to 2016i. (gh issue #298, gh pr #306)


Version 2.5.3
=============
- Updated zoneinfo to 2016d
- Fixed parser bug where unambiguous datetimes fail to parse when dayfirst is
  set to true. (gh issue #233, pr #234)
- Bug in zoneinfo file on platforms such as Google App Engine which do not
  do not allow importing of subprocess.check_call was reported and fixed by
  @savraj (gh issue #239, gh pr #240)
- Fixed incorrect version in documentation (gh issue #235, pr #243)

Version 2.5.2
=============
- Updated zoneinfo to 2016c
- Fixed parser bug where yearfirst and dayfirst parameters were not being
  respected when no separator was present. (gh issue #81 and #217, pr #229)

Version 2.5.1
=============
- Updated zoneinfo to 2016b
- Changed MANIFEST.in to explicitly include test suite in source distributions,
  with help from @koobs (gh issue #193, pr #194, #201, #221)
- Explicitly set all line-endings to LF, except for the NEWS file, on a
  per-repository basis (gh pr #218)
- Fixed an issue with improper caching behavior in rruleset objects (gh issue
  #104, pr #207)
- Changed to an explicit error when rrulestr strings contain a missing BYDAY
  (gh issue #162, pr #211)
- tzfile now correctly handles files containing leapcnt (although the leapcnt
  information is not actually used). Contributed by @hjoukl (gh issue #146, pr
  #147)
- Fixed recursive import issue with tz module (gh pr #204)
- Added compatibility between tzwin objects and datetime.time objects (gh issue
  #216, gh pr #219)
- Refactored monolithic test suite by module (gh issue #61, pr #200 and #206)
- Improved test coverage in the relativedelta module (gh pr #215)
- Adjusted documentation to reflect possibly counter-intuitive properties of
  RFC-5545-compliant rrules, and other documentation improvements in the rrule
  module (gh issue #105, gh issue #149 - pointer to the solution by @phep,
  pr #213).


Version 2.5.0
=============
- Updated zoneinfo to 2016a
- zoneinfo_metadata file version increased to 2.0 - the updated updatezinfo.py
  script will work with older zoneinfo_metadata.json files, but new metadata
  files will not work with older updatezinfo.py versions. Additionally, we have
  started hosting our own mirror of the Olson databases on a github pages
  site (https://dateutil.github.io/tzdata/) (gh pr #183)
- dateutil zoneinfo tarballs now contain the full zoneinfo_metadata file used
  to generate them. (gh issue #27, gh pr #85)
- relativedelta can now be safely subclassed without derived objects reverting
  to base relativedelta objects as a result of arithmetic operations.
  (lp:1010199, gh issue #44, pr #49)
- relativedelta 'weeks' parameter can now be set and retrieved as a property of
  relativedelta instances. (lp: 727525, gh issue #45, pr #49)
- relativedelta now explicitly supports fractional relative weeks, days, hours,
  minutes and seconds. Fractional values in absolute parameters (year, day, etc)
  are now deprecated. (gh issue #40, pr #190)
- relativedelta objects previously did not use microseconds to determine of two
  relativedelta objects were equal. This oversight has been corrected.
  Contributed by @elprans (gh pr #113)
- rrule now has an xafter() method for retrieving multiple recurrences after a
  specified date. (gh pr #38)
- str(rrule) now returns an RFC2445-compliant rrule string, contributed by
  @schinckel and @armicron (lp:1406305, gh issue #47, prs #50, #62 and #160)
- rrule performance under certain conditions has been significantly improved
  thanks to a patch contributed by @dekoza, based on an article by Brian Beck
  (@exogen) (gh pr #136)
- The use of both the 'until' and 'count' parameters is now deprecated as
  inconsistent with RFC2445 (gh pr #62, #185)
- Parsing an empty string will now raise a ValueError, rather than returning the
  datetime passed to the 'default' parameter. (gh issue #78, pr #187)
- tzwinlocal objects now have a meaningful repr() and str() implementation
  (gh issue #148, prs #184 and #186)
- Added equality logic for tzwin and tzwinlocal objects. (gh issue #151,
  pr #180, #184)
- Added some flexibility in subclassing timelex, and switched the default
  behavior over to using string methods rather than comparing against a fixed
  list. (gh pr #122, #139)
- An issue causing tzstr() to crash on Python 2.x was fixed. (lp: 1331576,
  gh issue #51, pr #55)
- An issue with string encoding causing exceptions under certain circumstances
  when tzname() is called was fixed. (gh issue #60, #74, pr #75)
- Parser issue where calling parse() on dates with no day specified when the
  day of the month in the default datetime (which is "today" if unspecified) is
  greater than the number of days in the parsed month was fixed (this issue
  tended to crop up between the 29th and 31st of the month, for obvious reasons)
  (canonical gh issue #25, pr #30, #191)
- Fixed parser issue causing fuzzy_with_tokens to raise an unexpected exception
  in certain circumstances. Contributed by @MichaelAquilina (gh pr #91)
- Fixed parser issue where years > 100 AD were incorrectly parsed. Contributed
  by @Bachmann1234 (gh pr #130)
- Fixed parser issue where commas were not a valid separator between seconds
  and microseconds, preventing parsing of ISO 8601 dates. Contributed by
  @ryanss (gh issue #28, pr #106)
- Fixed issue with tzwin encoding in locales with non-Latin alphabets
  (gh issue #92, pr #98)
- Fixed an issue where tzwin was not being properly imported on Windows.
  Contributed by @labrys. (gh pr #134)
- Fixed a problem causing issues importing zoneinfo in certain circumstances.
  Issue and solution contributed by @alexxv (gh issue #97, pr #99)
- Fixed an issue where dateutil timezones were not compatible with basic time
  objects. One of many, many timezone related issues contributed and tested by
  @labrys. (gh issue #132, pr #181)
- Fixed issue where tzwinlocal had an invalid utcoffset. (gh issue #135,
  pr #141, #142)
- Fixed issue with tzwin and tzwinlocal where DST transitions were incorrectly
  parsed from the registry. (gh issue #143, pr #178)
- updatezinfo.py no longer suppresses certain OSErrors. Contributed by @bjamesv
  (gh pr #164)
- An issue that arose when timezone locale changes during runtime has been
  fixed by @carlosxl and @mjschultz (gh issue #100, prs #107, #109)
- Python 3.5 was added to the supported platforms in the metadata (@tacaswell
  gh pr #159) and the test suites (@moreati gh pr #117).
- An issue with tox failing without unittest2 installed in Python 2.6 was fixed
  by @moreati (gh pr #115)
- Several deprecated functions were replaced in the tests by @moreati
  (gh pr #116)
- Improved the logic in Travis and Appveyor to alleviate issues where builds
  were failing due to connection issues when downloading the IANA timezone
  files. In addition to adding our own mirror for the files (gh pr #183), the
  download is now retried a number of times (with a delay) (gh pr #177)
- Many failing doctests were fixed by @moreati. (gh pr #120)
- Many fixes to the documentation (gh pr #103, gh pr #87 from @radarhere,
  gh pr #154 from @gpoesia, gh pr #156 from @awsum, gh pr #168 from @ja8zyjits)
- Added a code coverage tool to the CI to help improve the library. (gh pr #182)
- We now have a mailing list - dateutil@python.org, graciously hosted by
  Python.org.


Version 2.4.2
=============
- Updated zoneinfo to 2015b.
- Fixed issue with parsing of tzstr on Python 2.7.x; tzstr will now be decoded
  if not a unicode type. gh #51 (lp:1331576), gh pr #55.
- Fix a parser issue where AM and PM tokens were showing up in fuzzy date
  stamps, triggering inappropriate errors. gh #56 (lp: 1428895), gh pr #63.
- Missing function "setcachesize" removed from zoneinfo __all__ list by @ryanss,
  fixing an issue with wildcard imports of dateutil.zoneinfo. (gh pr #66).
- (PyPI only) Fix an issue with source distributions not including the test
  suite.


Version 2.4.1
=============

- Added explicit check for valid hours if AM/PM is specified in parser.
  (gh pr #22, issue #21)
- Fix bug in rrule introduced in 2.4.0 where byweekday parameter was not
  handled properly. (gh pr #35, issue #34)
- Fix error where parser allowed some invalid dates, overwriting existing hours
  with the last 2-digit number in the string. (gh pr #32, issue #31)
- Fix and add test for Python 2.x compatibility with boolean checking of
  relativedelta objects. Implemented by @nimasmi (gh pr #43) and Cédric Krier
  (lp: 1035038)
- Replaced parse() calls with explicit datetime objects in unit tests unrelated
  to parser. (gh pr #36)
- Changed private _byxxx from sets to sorted tuples and fixed one currently
  unreachable bug in _construct_byset. (gh pr #54)
- Additional documentation for parser (gh pr #29, #33, #41) and rrule.
- Formatting fixes to documentation of rrule and README.rst.
- Updated zoneinfo to 2015a.

Version 2.4.0
=============

- Fix an issue with relativedelta and freezegun (lp:1374022)
- Fix tzinfo in windows for timezones without dst (lp:1010050, gh #2)
- Ignore missing timezones in windows like in POSIX
- Fix minimal version requirement for six (gh #6)
- Many rrule changes and fixes by @pganssle (gh pull requests #13 #14 #17),
    including defusing some infinite loops (gh #4)

Version 2.3
===========

- Cleanup directory structure, moved test.py to dateutil/tests/test.py

- Changed many aspects of dealing with the zone info file. Instead of a cache,
  all the zones are loaded to memory, but symbolic links are loaded only once,
  so not much memory is used.

- The package is now zip-safe, and universal-wheelable, thanks to changes in
  the handling of the zoneinfo file.

- Fixed tzwin silently not imported on windows python2

- New maintainer, together with new hosting: GitHub, Travis, Read-The-Docs

Version 2.2
===========

- Updated zoneinfo to 2013h

- fuzzy_with_tokens parse addon from Christopher Corley

- Bug with LANG=C fixed by Mike Gilbert

Version 2.1
===========

- New maintainer

- Dateutil now works on Python 2.6, 2.7 and 3.2 from same codebase (with six)

- #704047: Ismael Carnales' patch for a new time format

- Small bug fixes, thanks for reporters!


Version 2.0
===========

- Ported to Python 3, by Brian Jones.  If you need dateutil for Python 2.X,
  please continue using the 1.X series.

- There's no such thing as a "PSF License".  This source code is now
  made available under the Simplified BSD license.  See LICENSE for
  details.

Version 1.5
===========

- As reported by Mathieu Bridon, rrules were matching the bysecond rules
  incorrectly against byminute in some circumstances when the SECONDLY
  frequency was in use, due to a copy & paste bug.  The problem has been
  unittested and corrected.

- Adam Ryan reported a problem in the relativedelta implementation which
  affected the yearday parameter in the month of January specifically.
  This has been unittested and fixed.

- Updated timezone information.


Version 1.4.1
=============

- Updated timezone information.


Version 1.4
===========

- Fixed another parser precision problem on conversion of decimal seconds
  to microseconds, as reported by Erik Brown.  Now these issues are gone
  for real since it's not using floating point arithmetic anymore.

- Fixed case where tzrange.utcoffset and tzrange.dst() might fail due
  to a date being used where a datetime was expected (reported and fixed
  by Lennart Regebro).

- Prevent tzstr from introducing daylight timings in strings that didn't
  specify them (reported by Lennart Regebro).

- Calls like gettz("GMT+3") and gettz("UTC-2") will now return the
  expected values, instead of the TZ variable behavior.

- Fixed DST signal handling in zoneinfo files.  Reported by
  Nicholas F. Fabry and John-Mark Gurney.


Version 1.3
===========

- Fixed precision problem on conversion of decimal seconds to
  microseconds, as reported by Skip Montanaro.

- Fixed bug in constructor of parser, and converted parser classes to
  new-style classes.  Original report and patch by Michael Elsdörfer.

- Initialize tzid and comps in tz.py, to prevent the code from ever
  raising a NameError (even with broken files).  Johan Dahlin suggested
  the fix after a pyflakes run.

- Version is now published in dateutil.__version__, as requested
  by Darren Dale.

- All code is compatible with new-style division.


Version 1.2
===========

- Now tzfile will round timezones to full-minutes if necessary,
  since Python's datetime doesn't support sub-minute offsets.
  Thanks to Ilpo Nyyssönen for reporting the issue.

- Removed bare string exceptions, as reported and fixed by
  Wilfredo Sánchez Vega.

- Fix bug in leap count parsing (reported and fixed by Eugene Oden).


Version 1.1
===========

- Fixed rrule byyearday handling. Abramo Bagnara pointed out that
  RFC2445 allows negative numbers.

- Fixed --prefix handling in setup.py (by Sidnei da Silva).

- Now tz.gettz() returns a tzlocal instance when not given any
  arguments and no other timezone information is found.

- Updating timezone information to version 2005q.


Version 1.0
===========

- Fixed parsing of XXhXXm formatted time after day/month/year
  has been parsed.

- Added patch by Jeffrey Harris optimizing rrule.__contains__.


Version 0.9
===========

- Fixed pickling of timezone types, as reported by
  Andreas Köhler.

- Implemented internal timezone information with binary
  timezone files. datautil.tz.gettz() function will now
  try to use the system timezone files, and fallback to
  the internal versions. It's also possible to ask for
  the internal versions directly by using
  dateutil.zoneinfo.gettz().

- New tzwin timezone type, allowing access to Windows
  internal timezones (contributed by Jeffrey Harris).

- Fixed parsing of unicode date strings.

- Accept parserinfo instances as the parser constructor
  parameter, besides parserinfo (sub)classes.

- Changed weekday to spell the not-set n value as None
  instead of 0.

- Fixed other reported bugs.


Version 0.5
===========

- Removed ``FREQ_`` prefix from rrule frequency constants
  WARNING: this breaks compatibility with previous versions.

- Fixed rrule.between() for cases where "after" is achieved
  before even starting, as reported by Andreas Köhler.

- Fixed two digit zero-year parsing (such as 31-Dec-00), as
  reported by Jim Abramson, and included test case for this.

- Sort exdate and rdate before iterating over them, so that
  it's not necessary to sort them before adding to the rruleset,
  as reported by Nicholas Piper.
