<?xml version="1.0" encoding="ISO-8859-1"?>

<document>
 <properties>
  <title>Java date and time API - Upgrade from 1.1 to 1.2</title>
  <author>Stephen Colebourne</author>
 </properties>

<body>

<section name="Upgrade">
<p>
These are the release notes and advice for upgrading Joda-Time from
version 1.1 to version 1.2.
<source>
Joda-Time version 1.2
---------------------

Joda-Time is a date and time handling library that seeks to replace the JDK
Date and Calendar classes.

This is the third full release of Joda-Time.
This release focuses on bug fixes, with a few new features.

We recommend JDK 1.3 or later, and have performed no testing on earlier JDKs.

Joda-Time is licensed under the business-friendly Apache License Version 2.
This is the same license as all of Apache, plus other open source projects such as Spring.
The intent is to make the code available to the Java community with the minimum
of restrictions. If the license causes you problems please contact the mailing list.

** Please also check out the JSP and Hibernate contributed projects **


Incompatible changes since 1.1
------------------------------
Binary compatible - Yes, except
  - The internal classes BaseGJChronology and CommonGJChronology have been removed
    They were implementation classes and you should not have been using them
    Please contact the mailing list if this causes you problems

Source compatible - Yes
  - v1.1 and v1.2 are source compatible in their public and protected API

Serialization compatible - Yes
  - Chronology serialization has changed, however the two formats are compatible
  - v1.1 did not serialize the Chronology minimum days in first week field properly, v1.2 does

Data compatible - Yes
  - DateTimeZone data updated to version 2005q


Deprecations since 1.1
----------------------
- Chronology factory methods, such as getISO() and getCopticUTC()
  You should now use the chrono package directly:
    Chronology.getCoptic(zone)   is replaced by
    CopticChronology.getInstance(zone)
  These factory methods have been removed as they were unable to scale
  suitably as more and more chronologies are added


Bug fixes since 1.1
-------------------
- ZonedChronology
  getMaximumValue(ReadablePartial)/getMinimumValue(ReadablePartial)
  Methods returned incorrect result

- ZonedChronology
  Better detection and handling of offset calculation overflow, throwing
  an ArithmeticException.

- DateTimeZone
  Handles offset calculation overflow errors for instants near Long.MAX_VALUE,
  ending the offset transition sequence.

- DateTimeFormatter
  Reverts to UTC if time zone offset calculation causes overflow. This allows at least
  the time of day fields to be printed for instants near Long.MIN_VALUE or Long.MAX_VALUE.

- CopticChronology
  Fixed regression in month of year calculation which affected getMaximumValue
  on dayOfMonth field.

- CopticChronology
  Fixed month duration field to handle short 13th month correctly.

- ZonedChronology
  Fixed getting text values for fields from getAs[Short]Text(int value, Locale locale).

- Gregorian, Julian, GJ and Coptic
  These Chronology classes did not correctly store the minimum days in first week
  during serialization

- DateTimeFormatter
  Fixed printing of time zone name near DST transition

- YearMonthDay
  Fixed addition where date starts on a leap day
  Fixed addition in the GJChronology

- DateTimeFormat
  Pattern letter 'K' was using the wrong underlying implementation


Enhancements since 1.1
----------------------
- IslamicChronology
- EthiopicChronology
  New Chronologies

- DateTime.Property.withMaximumValue() (also DateMidnight/YearMonthDay etc)
- DateTime.Property.withMinimumValue()
  Returns a copy of the base datetime with the specified field set to
  the maximum or minimum value. This is useful to get the last day of the month.
  - DateTime lastDayOfMonth = dt.dayOfMonth().withMaximumValue();

- DateTime.Property.toInterval() (also DateMidnight/MutableDateTime)
  New method to convert return an Interval object over the span of the property
  Thus dt.monthOfYear().toInterval() returns an interval from the start to
  the end of the month

- MutableDateTime.property(DateTimeFieldType)
  Gets the property by type. Complements the method already on DateTime/DateMidnight.

- YearMonthDay.fromCalendarFields()
- YearMonthDay.fromDateFields()
- TimeOfDay.fromCalendarFields()
- TimeOfDay.fromDateFields()
  New factory methods to create a YearMonthDay/TimeOfDay using exactly the same
  field values as the JDK objects, thus ignoring time zone effects

- FieldUtils
  Performance optimization when adding by scalars of one or negative one. The
  overflow detecting multiplication skips the multiply and divide check for
  these values.
</source>
</p>
</section>

</body>
</document>
