0.1601  2003-08-07

[ BUG FIXES ]

- On platforms like Win32, where we can't find a finite() or
isfinite() function/macro, the DateTime::LeapSecond code wasn't being
loaded, so many tests failed.  Reported by Ron Hill.


0.16    2003-08-06

[ IMPROVEMENTS ]

- The XS code now implements leap second-related calculations.
However, this is only used on platforms where we can find a usable
finite() or isfinite() function/macro, so it isn't used on Win32.

- This distro has now borged the DateTime::LeapSecond module.  It is
only loaded when the XS leap second code cannot be used.

- Other miscellaneous performance improvements.


0.1503  2003-07-31

[ BUG FIXES ]

- Adding a duration with delta months to an infinite DateTime was
quite broken.  Reported by Eugene van der Pijll.


0.1502  2003-07-31

[ BUG FIXES ]

- XSLoader wasn't the problem on Solaris, so it's back.

- Now loading the XS version of DateTime.pm is wrapped in an eval
block.  If it fails with an error about the object version not
matching, the pure Perl version is loaded instead.  This should fix
Solaris.  Thanks to Joshua Hoblitt for identifying this bug.


0.1501  2003-07-30

[ BUG FIXES ]

- Fixed the from_object() method to set the returned object's time
zone to the floating time zone if the source object did not have a
time zone, as specified in the docs.  Previously, the returned
object's time zone was UTC.  Patch by Eugene van der Pjill.

- For this release, at least, the module always uses Dynaloader.  This
is in order to see if this fixes a problem on Solaris where the
install library version of the DateTime .so file is loaded instead of
the newly compiled version in the blib directory.


0.15    2003-07-29

[ IMPROVEMENTS ]

- The utc_rd_values() method now returns nanoseconds in addition to
Rata Die days and seconds.  Based on a patch by Joshua Hoblitt.

- The from_object() method expects objects to return the same values
from their utc_rd_values() methods.  Based on a patch by Joshua Hoblitt.

[ BUG FIXES ]

- Fixed a bug in the pure Perl version of _normalize_tai_seconds that
caused very weird results from datetime math.  This version may be
used on platforms where the XS code compiles, so it can affect quite a
number of systems.  Reported by Dan Sully.


0.1402   2003-07-24

[ BUG FIXES ]

- Fix DefaultLocale method, which didn't work at all.  Reported by
Serge Leger.


0.1401   2003-07-24

[ BUG FIXES ]

- Fix a test failure in 13strftime.t under Perl 5.6.1 (and probably
5.6.0).


0.14     2003-07-23

[ BACKWARDS INCOMPATIBILITIES ]

- The DateTime::Language modules are no longer being developed or
distributed as part of the DateTime.pm distribution.

Because of this, all "language" parameters should now be replaced by
"locale" parameter.  The "language" parameter is deprecated and will
be removed in a future release.

Also note that locales should be specified via ISO codes, not names
like "English".  The old DateTime::Language names will continue to
work indefinitely, but they load DateTime::Locale objects instead.

Locale-specific data will be returned in utf8 when necessary.

- Similarly, the "language" and "DefaultLanguage" methods are now
deprecated in favor of "locale" and "DefaultLocale".


[ IMPROVEMENTS ]

- DateTime::Duration now returns the object from mutator methods, in
order to make method chaining possible.  Suggested by Ben Bennett.

- If the value for second given to new() is 60 or 61, then it must be
a valid leap second.

- DateTime now uses DateTime::Locale for localization, which allows
for real language and territory based localization.  The locale code
is generated from the ICU project's data, and is much more complete
than the DateTime::Language modules.  However, we are losing
(hopefully only temporarily) support for the various African languages
contributed by Daniel Yacob.  Support for those languages should
return in a future release of DateTime::Locale.

- Support for the '%c', '%x', and '%X' strftime format specifiers,
which output localized date and time strings.

- Added the time_zone_long_name method, primarily for the benefit of
DateTime::Locale.

- Added a note to the DateTime::Infinite docs warning that it may not
work well on Win32.

[ BUG FIXES ]

- DateTime::Duration was not consistent in how it handled mixed
positive and negative constructor parameters.  Reported by Ben
Bennett.


0.13     2003-05-05

[ IMPROVEMENTS ]

- DateTime now does more validation of parameters given to
constructors and to the set() method, so bogus values like a month of
13 are a fatal error.

- Added a new constructor, from_day_of_year().

- Added a number of new "get" methods, including era, year_with_era,
hour_1, hour_12, hour_12_0, weekday_of_month, and week_of_month.
Based in part on a patch from Rick Measham.

- Now any object method can be called in strftime format by using
"%{method}" as a format specifier.  Patch from Rick Measham

- Added an is_zero method to DateTime::Duration, for objects of zero
length.

- DateTime->from_epoch will now accept a floating point epoch and turn
the post-decimal portion into nanoseconds.  This was done in order to
interface more accurately with Time::HiRes.

- Added a DateTime->hires_epoch method that returns a floating point
value for epoch, also for compatibility with Time::HiRes.

- DateTime.pm now implements Storable hooks to reduce the size of
serialized DateTime objects.  In particular, the contained time zone
object is not serialized along with the DateTime object.

- It is now possible to create arbitrary DateTime::Language subclasses
in any namespace.

[ BUG FIXES ]

- "Fixed" 20infinite.t failures on Windows with 2 icky hacks.  The
first simply doesn't compile the XS code that deals with infinite
numbers on Win32, so the pure Perl version is used instead.  However,
the rest of the XS code is still compiled on Win32.  The other hack is
to simply skip a failing test in 20infinite.t on Win32.  Hopefully,
this will eventually be fixed but given that this is not core
functionality for most users, I'd rather get this release out the door
now.

- Fix epoch() method to work properly with dates greater than 50 years
ago.  Apparently, if Time::Local is given a year less than 100, it
tries to guess the century, and it doesn't do this by simply adding
1900.  Numbers less than 53 (for the year 2003) are treated as being
in the current century.  Ugh.

- Fixed compilation on HPUX.  Patch from Dan Sully.

- The last_day_of_month() method did not accept a nanosecond
parameter.

- A DT::Duration object created with just nanoseconds was always
positive, regardless of the value given for nanoseconds.

- Fixed a serious bug when subtracting one datetime from another that
could cause the result to be off by up to a second, and negative when
it should be positive.  This was caused by the introduction of
nanoseconds in 0.10.

- A zero length duration reported itself as positive when it should be
neither positive nor negative.

- In Perl 5.6.1/Red Hat Linux 7.2, multiplying a variable with value
zero by -1 gives negative-zero, which breaks tests.

   perl -e ' $x=0; $x*=-1; print $x '

   -0

Patch by Flavio Glock.

- Comparing a DateTime::Infinite object to a regular datetime could
cause a fatal error.  Reported by John Peacock.

- Fixed a failure in the 04epoch.t tests on Win32.  Negative epoch
values don't work on Win32.

[ BACKWARDS INCOMPATIBILITIES ]

- The "Portugese" language module has been renamed to "Portuguese".
I'm so embarassed!  Reported by Richard Evans.

- DateTime::Infinite objects no longer die if "set" methods are
called.  Instead, these methods are now no-op methods that simply
return the original object.  This makes these objects more usable when
mixed with regular datetime objects.

- Removed the fractional_second constructor parameter.  It was
incorrectly documented anyway.  The fractional_second _accessor_ is
still there.

- DateTime::Duration objects of zero length no longer return true for
is_positive.


0.12     2003-05-05

[ BUG FIXES ]

- Make sure tests always run with warnings on.

- Fix line that had "$] >= 5.6.0" to be "$] >= 5.006".  This caused
warnings and was just wrong.  Reported by John Siracusa.

- Quiet warnings from pure Perl implementation.

- Quiet warnings from language modules with Unicode when used with
Perl 5.00503.


0.11     2003-05-03

[ IMPROVEMENTS ]

- Moved a little bit of the leap second code to XS, so DateTime.pm may
be a tiny bit faster.

- Added name() method to DateTime::Language.  Suggested by Rick
Measham.

- Use XSLoader with Perl 5.6.0+, which according to ancient
perl5-porters discussions saves some memory.

- Added infinite DateTime objects.  See the DateTime::Infinite docs
for details.

[ BUG FIXES ]

- The %I and %l strftime formats were formatting hours as 0-11, not
1-12 as documented.  Patch by Simon Newton.

- A DateTime::Duration object created only with weeks as a parameter
always was positive.  Fixed by Flavio Glock.

[ BACKWARDS INCOMPATIBILTIES ]

- Because of changes in DateTime::TimeZone 0.13, which this version
now requires, when a local time is ambiguous, the latest UTC time is
used, rather than the earliest, as was done previously.

- The Brazilian language module has been renamed as Portugese.

- Removed DateTime::Duration->compare (which I forgot to document
anyway ;) and comparison overloading for DT::Duration.  There's no
meaningful way to compare 60 days to 2 months.


0.10     2003-04-19 (the "I'm sure the new regime will be spiffy" release)

[IMPROVEMENTS]

- Added Tigre language module.  Contributed by Daniel Yacob.

- DateTime::Duration objects now overload multiplication.  Implemented
by Flavio Glock.

- Added support for nanoseconds in DateTime.pm and DateTime::Duration.
Implemented by Flavio Glock.

- Added complete support for leap seconds (through use of
DateTime::LeapSecond).  Mostly implemented by Flavio Glock.

[ BACKWARDS INCOMPATIBILTIES ]

- Because of the addition of leap seconds to the mix, we are now
forced to handle seconds separately from minutes when doing date math.
This means that several aspects of the DateTime::Duration API have
changed.  Specifically:

-- There is now an additional delta_minutes() method.
-- The hash returned by the deltas() method now includes a "minutes" key.
-- The seconds delta may be greater than 59.
-- The seconds() method may return a number greater than 59.


0.09     2003-04-05 (the "liberation through violence" release)

[IMPROVEMENTS]

- As requested by numerous people, there is now a pure Perl
implementation of DateTime.pm included with this distribution.  If you
don't have a C compiler it will be used instead of the XS
implementation.

- Document how floating time zones are handling in comparisons, and
add the compare_ignore_floating method.  Based on a patch from Eugene
van der Pijll.

- Allow from_epoch(), now(), and today() to accept a time_zone
parameter.  Based on suggestions from Tim Bunce and Joshua Hoblitt.

- Allow extraction of AM/PM string list from DateTime::Language classes.

- Added quarter() and day_of_quarter() methods.  Based on a patch from
Tim Allwine.

[BUG FIXES]

- If a datetime had the floating timezone and then set_time_zone was
used to set it to something else, the internal UTC time of the object
was not changed, meaning that its offset could be calculated
incorrectly.  Patch by Eugene van der Pijll.

- If datetime math was done with hours, minutes, or seconds, the
return value of ->epoch would be wrong after this.  Based on report
and patch from Iain Truskett.


0.08     2003-03-21 (the "anti-war" release)

[IMPROVEMENTS]

- All set/modify methods now return the datetime object, in order to
make method chaining possible.  Patch by Iain Truskett.

- The _greg2rd and _rd2greg methods have been renamed _ymd2rd and
_rd2ymd, so as to make them look more normal when used in subclasses.

- Added a truncate() method.  Suggested by Flavio Glock.

- Added Swedish language module.  Contributed by Christian Hansen.

- Added language modules for Afar, Amharic, Gedeo, Oromo, Sidama,
Somali, and Tigrinya (Eritrean and Ethiopian), all courtesy of Daniel
Yacob.

- Various doc improvements, including a section on invalid local times.

[BUG FIXES]

- The week() method was wrong for many dates.  Reported by Christian
Hansen.

- The last_day_of_month() method had the DateTime class hard-coded in
it.  Reported by Eugene van der Pijll.

- Fixed a bug when comparing a datetime object to infinity (or
negative infinity).  Fixed by Flavio Glock.

- Date math has been fixed so that it affects the _local_ times.  This
means that sometimes 1 day is not equal to 24 hours when the
addition/subtraction crosses over a Daylight Saving Time change.  See
the "How Date Math is Done" section of the docs for more details.

[BACKWARDS INCOMPATIBILITIES]

- Objects constructed via the new() method now have a "floating" time
zone by default, instead of using the "local" time zone.  This is just
simpler to deal with, and for code where time zones are unimportant,
this is the most appropriate default.


0.07     2003-02-26

[IMPROVEMENTS]

- Added a small hack to the compare() method so that this module can
be used with Set::Infinite.

- Changed compare so that it can be used to compare two objects from
different calendars that conform to the DateTime::Calendar interface.

- Added explanation of exactly what calendar this module represents
("proleptic Gregorian calendar") to docs.

- Added a Spanish language DateTime::Language subclass.  Implemented
by Flavio S. Glock.

- Added support for specifying a language by ISO code ("en" or
"pt-br") as well as the subclass name.  Based on a patch from Eric
Cholet.

- Revamped the externally visible DateTime::Language API.

- Objects created via the from_object() method are set to the time
zone of the object from which they were created, if it has one, or UTC
otherwise.

[BUG FIXES]

- The from_object() method was broken because it retrieved a UTC
datetime from the object passed in, and then created a new DateTime
object using that UTC time as a _local_ time.

[BACKWARDS INCOMPATIBILITIES]

- Removed stringification overloading.  Having this in place made it
impossible to create a strack trace in much of the time zone code.

- Renamed the DateTime::Language->subclasses method as languages.

- It is no longer possible to directly instantiate a
DateTime::Language subclass, instead use:

  my $en = DateTime::Language->new( language => 'English' );

- The from_object() method no longer accepts a "time_zone" parameter.


0.06     2003-02-16

- The docs said that there was no year 0 in the Gregorian calendar,
but that was wrong.  The year() method can now return 0.  The year_0()
method has been removed.

- Added jd() and mjd() methods.

- Re-implemented some of the core code in XS for speed.

0.05     2003-02-13

- Fix handling and reporting of epoch times.  Epoch times are, by
definition, UTC times, so any time created from an epoch should always
have its time zone set to "UTC".  This can be changed after the object
is created.  Similarly, value returned by the epoch() method needs to
be based on the object's UTC time, not it's local time.  Bug reported
by Kellan Elliott-McCrea.

- Change year_0 so that -1 BCE is 0, not 1 CE.  This corresponds to
astronomical years.

- Change ymd, dmy, mdy, and iso8601 to use Gregorian years (..., -2,
-1, 1, 2, ... ) as opposed to astronomical years.  Also make sure all
negative years are formatted as 4 digits.

0.04     2003-02-10

- Explicitly set time zone for objects created during tests.

0.03     2003-02-09

- Giving a language parameter to a constructor method didn't load the
language class.

- Test that all language classes are at least loadable.

- Added Brazilian (not quite a language ;) and Danish, again stolen
from Graham Barr's TimeDate suite.

- Added is_dst method.  Requested by Matt Sergeant.

0.02     2003-02-09

- Fixed a bug in calculating day of year in leap years (it was +1 off
starting in February).  Reported by Matt Sergeant.

- Subtracting one datetime from another was broken in most cases.
Improved the tests for this quite a bit.  Reported by Eric Cholet.

- Made the version number a non-dev-release so it's visible when
CPAN.pm tries to install it as a prereq for something else.

0.01_00  2003-02-04

- The first alpha release.  This module draws on Date::ICal for much
of its internals, so it has more history than a normal alpha release.
