Upgrade

These are the release notes and advice for upgrading Joda-Time from version 2.1 to version 2.2.

Joda-Time version 2.2
---------------------

Joda-Time is a date and time handling library that seeks to replace the JDK
Date and Calendar classes.

This is the tenth release of Joda-Time.
This release contains enhancements, bug fixes and a time zone update.
JDK 1.5 or later is required.

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 our related projects   **
** http://www.joda.org/joda-time/related.html **


Enhancements since 2.1
----------------------
- Change some StringBuffer uses to StringBuilder [3532330]

- Add method to calculate the Julian Day
  See DateTimeUtils

- Add Danish translation of word-based periods (Kasper Laudrup)

- Add Japanese translation of word-based periods (Hajime Senuma)
  https://github.com/JodaOrg/joda-time/pull/9

- Parsing of US short time-zone names
  The time-zone names EST/EDT/CST/CDT/MST/MDT/PST/PDT/UT/UTC/GMT can now be parsed in a limited way.
  This is enabled for formatter patterns of "z" (and "zz" or "zzz").
  The builder continues to offer a better way of manually managing this.

- Add new exception, IllegalInstantException
  This allows applications to better capture problems with daylight savings gaps
  The exception is a subclass of IllegalArgumentException, so existing logic will still work


Compatibility with 2.1
----------------------
Build system - No
 - Ant build removed. Build only on Maven now.

Binary compatible - Yes

Source compatible - Yes

Serialization compatible - Yes

Data compatible - Yes, except
 - DateTimeZone data updated to version 2012j

Semantic compatible - Yes, except
 - DateTimeFormatter.parseInto() retains the year if only month parsed (as it did in v1.x)
 - If a formatter cannot print or parse, it will now throw an exception instead of ignoring it
 - Format pattern "z" now has limited parsing abilities


Deprecations since 2.1
----------------------
None


Bug fixes since 2.1
-------------------
- DateTime.millisOfDay().withMaximumValue()/withMinimumValue() [159]
  Now handle daylight savings gaps
  https://sourceforge.net/p/joda-time/bugs/159/

- MonthDay add/subtract [3528941]
  Addition and subtraction in MonthDay was fixed.
  It previously didn't work when the start value was 29th February.

- LocalDateTime.fromDateFields()
  This used to fail before 1970 when the input had a milli-of-second field
  Fixed to not throw an exception

- LocalDateTime.fromCalendarFields()/LocalDateTime.fromDateFields()
  This used to fail before year 1 as the era was ignored
  Fixed to return the correct year
  https://github.com/JodaOrg/joda-time/pull/8

- MutableDateTime.setDate(ReadableInstant)  [163]
  Fixed to handle cross-time-zone issues properly rather than always using UTC

- BasicGJChronology.getDaysInMonthMaxForSet  [165]
  Fixed calculate the correct maximum length if the input day-of-month value is less than 1

- DateTimeFormatter.parseInto() [3522138]
  The v2.0 changes to handle parsing of month/day on their own (for Feb 29th) cause
  parseInto() to lose the year. This fix reverts behaviour to v1.x so that parseInto()
  will use the supplied year, not the default year of the formatter.

- DateTimeFormatter.isPrinter()/isParser() and related
  The Javadoc for DateTimeFormatterBuilder specified behaviour when the formatter
  could not print or could not parse, but the code didn't implement it
  Now it does, which means that DateTimeFormatter.isPrinter()/isParser() are now correct.
  The formatter will also now throw UnsupportedOperationException when unable to print/parse.

- Period formatter [3564249]
  Formatting did not correctly output values for negative milliseconds between zero and -1 second

- FieldUtils.safeMultiply(long,int) [3520651]
  Fix implementation to throw exception for (Long.MIN_VALUE, -1)

- Fix TestReadableDurationConverter [3515086]
  Test case didn't work if deafult time zone was UTC

- Fix Duration string parsing for small negative numbers
  Values between 0 and -1 exclusive previously parsed incorrectly
  https://github.com/JodaOrg/joda-time/pull/10

- Javadoc fix to BaseChronology [3513326]

- Javadoc fix to Years [169]

- Javadoc fix to LocalTime [171]

- Javadoc clarify on formatter builder [mailing list email]

- Fixed Spanish translation of day for periods - dia now has accented i
  https://github.com/JodaOrg/joda-time/pull/5

- Change maven build to use exec-maven-plugin [158]
  https://sourceforge.net/p/joda-time/bugs/158/


Scala
--------
Joda-Time uses annotations from Joda-Convert.
In the Java programming language, this dependency is optional, however in Scala it is not.
Scala users must manually add the Joda-Convert v1.2 dependency.