Upstream changes:
1.54 2020-12-04
- This release contains a lot of small documentation revisions, both to
formatting and content.
1.53 2020-11-08
- Added a $dt->rfc3339 method. Based on discussion in GH #109 by worthmine.
Add LICENSE
Upstream changes:
0.08 2020-12-18
- (Update) Add 'strict' option to require timezone in time components (PR
#3 from @timgimyee).
- (Update) Updated Makefile.PL with new metadata.
Upstream changes:
1.79 2021-05-02
* Fix too-strict type checking for time zones. This module now uses the same
check as DateTime itself, which allows for things that don't subclass
DateTime::TimeZone as long as they provide the same API. Reported by
E. Choroba. GH #30.
Upstream changes:
0.0701 2021-05-22
- Fix versioning, reindex
0.07 2021-05-21
- if microseconds are set on provided DateTime object to time_format,
use them. Fixes RT #136549
version 1.5.0 (release tag v1.5.0.rel)
======================================
* clean-up deprecated calendar specific subclasses.
* added string formatting support to `cftime.datetime` objects
(via `cftime.datetime.__format__`).
* add support for astronomical year numbering (including year zero) for
real-world calendars using 'has_year_zero' cftime.datetime kwarg.
Default is False for 'real-world' calendars ('julian', 'gregorian'/'standard',
'proleptic_gregorian'). Ignored for idealized calendars like '360_day
(they always have year zero).
* add "change_calendar" cftime.datetime method to switch to another
'real-world' calendar. Enable comparison of cftime.datetime instances
with different 'real-world' calendars (using the new change_calendar method)
* remove legacy `utime` class, and legacy `JulianDayFromDate` and
`DateFromJulianDay` functions (replaced by `cftime.datetime.toordinal`
and `cftime.datetime.fromordinal`).
* Change ValueError to TypeError in __sub__
aniso8601 9.0.1
===============
Added
-----
* Development requirements handled by :code:`extras_require` (install with :code:`pip install -e .[dev]`)
* Pre-commit hooks, managed with `pre-commit <https://pre-commit.com/>`_ (install with :code:`pre-commit install`)
* Add :code:`readthedocs.yaml` to make configuration explicit
Changed
-------
* Code formatted with `Black <https://black.readthedocs.io/en/stable/index.html>`_
* Imports sorted with `isort <https://pycqa.github.io/isort/>`_
* Following `Keep a Changelog <https://keepachangelog.com/en/1.0.0/>`_ for this and future CHANGELOG entries
* Removed python-dateutil from :code:`BuildRequires` in specfile as they are no longer required since calendar level duration building was split to a separate project (6.0.0)
* Heading level of top of CHANGELOG
Fixed
-----
* Parsing prescribed durations with only hour and second time components (see `PR 14 <https://bitbucket.org/nielsenb/aniso8601/pull-requests/14>`_)
* Parsing prescribed durations with only year and day components
aniso8601 9.0.0
===============
Changes
-------
* Add support for concise interval format (see `27 <https://bitbucket.org/nielsenb/aniso8601/issues/27/support-for-short-syntax-for-intervals>`_)
* Add explicit bounds of [000, 366] to day of year component :code:`_parse_ordinal_date`, this adds the same limits to dates of the format YYYYDDD or YYYY-DDD when using :code:`parse_date`
* Add :code:`range_check_date`, :code:`range_check_time`, :code:`range_check_duration`, :code:`range_check_repeating_interval`, and :code:`range_check_timezone` range checking class methods to :code:`BaseTimeBuilder` there are no datetime or non-repeating interval check function as they are made of already checked parts
* :code:`PythonTimeBuilder` now calls the appropriate range check functions using the :code:`range_check_date`, :code:`range_check_time`, :code:`range_check_duration`, :code:`range_check_repeating_interval`, and :code:`range_check_timezone` methods defined in :code:`aniso8601.builders`
* Add :code:`range_check_duration` to :code:`PythonTimeBuilder` which calls :code:`BaseTimeBuilder.range_check_duration` and performs additional checks against maximum timedelta size
* Add :code:`range_check_interval` to :code:`PythonTimeBuilder` which handles building concise dates and performs additional checks against maximum timedelta size
* Add :code:`get_datetime_resolution` which behaves like :code:`get_time_resolution` but accepts a ISO 8601 date time as an argument, return value is a :code:`TimeResolution`
* Add :code:`exceptions.RangeCheckError` as a parent type of all failures in the range check methods, it descends from :code:`ValueError`
* Add :code:`get_duration_resolution` which behaves like other resolution helpers, return value is a :code:`DurationResolution`
* Add :code:`get_interval_resolution` which behaves like other resolution helpers, return value is a :code:`IntervalResolution`
* Negative durations now fail at the parse step and simply raise :code:`ISOFormatError`, calling a :code:`PythonTimeBuilder.build_duration` directly with a negative duration component will yield an :code:`ISOFormatError` in the range check
* Raise :code:`DayOutOfBoundsError` if calendar day exceeds number of days in calendar month
* Raise :code:`DayOutOfBoundsError` if ordinal day exceeds number of days in calendar year (366 now raises :code:`DayOutOfBoundsError` in non-leap year)
* Raise :code:`ISOFormatError` when date or time string contains extra whitespace
* Raise :code:`ISOFormatError` on multiple fraction separators (comma, full-stop) in a time string
* Raise :code:`ISOFormatError` when duration contains multiple duration designators ("P"), or time designators ("T")
* :code:`PythonTimeBuilder.build_duration` raises :code:`YearOutOfBoundsError`, :code:`MonthOutOfBoundsError`, :code:`WeekOutOfBoundsError`, :code:`HoursOutOfBoundsError`, :code:`MinutesOutOfBoundsError`, or :code:`SecondsOutOfBoundsError` when a given duration component would result in a :code:`timedelta` that would exceed the maximum size
* Raise :code:`ISOFormatError` if number of delimiters is not exactly 1 in :code:`parse_interval`
* Raise :code:`ISOFormatError` when either part of an interval string before of after the delimiter is empty
* Raise :code:`YearOutOfBoundsError` in :code:`PythonTimeBuilder.build_interval` if an interval with a duration would exceed the maximum or minimum years for Python date objects
* Simplify :code:`parse_date`, :code:`build_date` will now be called with explicit :code:`None` arguments instead of date components not in the parsed string excluded from the call
* Change :code:`get_date_resolution` to call :code:`parse_date` and return the resolution based on the smallest parsed component
* Simplify :code:`parse_time`, :code:`build_time` will now be called with explicit :code:`None` arguments instead of date components not in the parsed string excluded from the call
* Change :code:`get_time_resolution` to call :code:`parse_time` and return the resolution based on the smallest parsed component
* :code:`TupleBuilder` now builds :code:`DateTuple`, :code:`TimeTuple`, :code:`DatetimeTuple`, :code:`DurationTuple`, :code:`IntervalTuple`, :code:`RepeatingIntervalTuple` and :code:`TimezoneTuple` namedtuples
* Simplify :code:`parse_duration`, :code:`build_duration` will now be called with explicit :code:`None` arguments when components of a prescribed duration are not present in the ISO 8601 duration string instead of being excluded from the call
* Remove unused :code:`decimalfraction.find_separator`
* Remove unused :code:`PythonTimeBuilder._split_to_microseconds`
* Removed :code:`NegativeDurationError`
Deprecation
-----------
* **Update on Python 2 support**: Python 2 support was slated to be removed in 7.0.0 but was not, it will remain until a test fails on Python 2 but not Python 3
* Using Setuptools to run tests (:code:`python setup.py tests`) will be removed in the next major or minor version (either 9.1.0, 10.0.0)
version 1.4.1 (release tag v1.4.1.rel)
======================================
* Restore use of calendar-specific sub-classes in `cftime.num2date`,
`cftime.datetime.__add__`, and `cftime.datetime.__sub__`. The use of them
will be removed in a later release.
* add 'fromordinal' static method to create a cftime.datetime instance
from a julian day ordinal and calendar (inverse of 'toordinal').
version 1.4.0 (release tag v1.4.0.rel)
======================================
* `cftime.date2num` will now always return an array of integers, if the units
and times allow. Previously this would only be true if the units were
'microseconds'. In other circumstances, as before, `cftime.date2num`
will return an array of floats.
* Rewrite of julian day/calendar functions (_IntJulianDayToCalendar and
_IntJulianDayFromCalendar) to remove GPL'ed code. cftime license
changed to MIT (to be consistent with netcdf4-python).
* Added datetime.toordinal() (returns julian day, kwarg 'fractional'
can be used to include fractional day).
* cftime.datetime no longer uses calendar-specific sub-classes.
version 1.3.1 (release tag v1.3.1rel)
=====================================
* fix for issue 211 bug in masked array handling in date2num)
* switch from travis/appveyor to github actions for CI/CD.
* switch to cython language_level=3 (no more support for python 2).
* add __init__.py to test dir so pytest coverage works again. Add Coveralls
step to github actions workflow to upload coverage data to coveralls.io
* move package under 'src' directory so cftime can be imported
from install dir
version 1.3.0 (release tag v1.3.0rel)
=====================================
* zero pad years in strtime
* have cftime.datetime constuctor create 'calendar-aware' instances (default is
'standard' calendar, if calendar='' or None the instance is not calendar aware and some
methods, like dayofwk, dayofyr, __add__ and __sub__, will not work).
The calendar specific sub-classes are now deprecated, but remain for now
as stubs that just instantiate the base class and override __repr__.
* update regex in _cpdef _parse_date so reference years with more than four
digits can be handled.
* Change default calendar in cftime.date2num from 'standard' to None
(calendar associated with first input datetime object is used).
* add `cftime.datetime.tzinfo=None` for compatibility with python datetime
.
version 1.2.1 (release tag v1.2.1rel)
=====================================
* num2date uses 'proleptic_gregorian' scheme when basedate is post-Gregorian but date is pre-Gregorian
.
* fix 1.2.0 regression (date2num no longer works with numpy scalar array inputs).
* Fix for issue 187 (have date2num round to the nearest second when within 1
microsecond).
* Fix for issue 189 (leap years calculated incorrectly for negative years in
proleptic_gregorian calendar).
version 1.2.0 (release tag v1.2.0rel)
=====================================
* Return the default values of dayofwk and dayofyr when calendar
is ''.
* fix treatment of masked arrays in num2date and date2num.
Also make sure masked arrays are output from num2date/date2num if
masked arrays are input.
* Where possible, use timedelta arithmetic to decode times exactly within
num2date.
* Make taking the difference between two cftime datetimes to produce a
timedelta exact to the microsecond; depending on the units encoding,
this enables date2num to be exact as well.
* utime.date2num/utime.num2date now just call module level functions.
JulianDayFromDate/DateFromJulianDay no longer used internally.
Version 3.0.10 is a patch release.
This release is binary and source compatible with version 3.0.0.
Note that the libical-glib library is considered unstable; therefore not binary compatible with previous releases
ReleaseNotes:
Fix building -DSTATIC_ONLY=True with Ninja
Fix generating wrong recurrence rules (#478)
Fix a bug computing transitions in tzfiles
Fix reading TZif files to use TZ string in the footer as the last (non-terminating) transitions
Fix reading TZif files to use more RRULEs and/or RDATEs whevever possible
Built-in timezones updated to tzdata2021a
This builds with current glib2.
Major changes in 40.0:
* Updated translations
Major changes in 40.rc:
* Updated translations
* Minor cleanups
Major changes in 40.beta:
* Updated translations
* Use HdyViewSwitcher in the main window
* Fix the color of new calendars
Major changes in 40.alpha:
* Updated translations
* Depend on libhandy-1
* Port to the newer libgweather api
* Improve the event editor
Update DEPENDS
Upstream changes:
1.78 2020-12-15
* Fix tests for new failure caused by locale data changes in DateTime::Locale
1.29. Reported by cthulhu8zombie. GH #28.
* Added a warning about using locale-specific patterns. Some of these patterns
can change quite a bit as the locale data is updated, so using them for
parsing does not produce stable results across time. This is what caused the
test failures that this release fixes.
Upstream changes:
1.31 2020-12-22
- The docs for each locale now show examples of its strftime patterns as well.
1.30 2020-12-15
- The previous release included some locale data for locales that had been
deleted from CLDR 38.0.0.
1.29 2020-12-14
- Rebuilt all locale data with the data from CLDR 38.0.0 and glibc 2.32.
Upstream changes:
0.104 2021-03-15 T. R. Wyant
Add rt.cpan.org back to bug reporting methods. Long live RT!
Correct GitHub ticket link.
Get prerequisites up to snuff and add xt/author/prereq.t to ensure
they stay that way.
Version 3.0.9 is a patch release.
This release is binary and source compatible with version 3.0.0.
Note that the libical-glib library is considered unstable; therefore not binary compatible with previous releases
Release Notes:
- Add support for empty parameters, e.g. CN=""
- Accept VTIMEZONE with more than one X- property
- Several fixes for recurrences containing BYWEEKNO
- icalrecurrencetype_from_string() will reject any RRULE that contains a rule-part that occurs more than once
- Improve thread safety
- Fix compiled-in path for the built-in timezone data
- Fix reading TZif files with empty v1 data (use v2+ whenever possible)
- Add backwards compatibility for previous TZIDs
- Built-in timezones updated to tzdata2020d
- Fix build with newer libicu
- Fix cross-compile support in libical-glib