blob: f057e40dadfb5206eb0ea8dc1da355e895fda6c9 [file] [log] [blame]
<?xml version="1.0" encoding="ISO-8859-1"?>
<document>
<properties>
<title>Java date and time API - Upgrade from 1.0 to 1.1</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.0 to version 1.1.
<source>
Joda-Time version 1.1
---------------------
Joda-Time is a date and time handling library that seeks to replace the JDK
Date and Calendar classes.
This is the second full release of Joda-Time.
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 cause you problems please contact the mailing list.
Incompatible changes since 1.0
------------------------------
Binary compatible - Yes
- v1.0 and v1.1 are binary compatible in their public and protected API
Source compatible - Yes
- v1.0 and v1.1 are source compatible in their public and protected API
Serialization compatible - Yes, except:
- DateTime.Property, DateMidnight.Property and MutableDateTime.Property
serialization formats have changed to fix a bug.
Please note that this only affects the property classes, and not DateTime,
DateMidnight or MutableDateTime themselves
It is unlikely that you serialized one of these classes
Data compatible - Yes, except:
- Removed time zones Asia/Riyadh87, Asia/Riyadh88 and Asia/Riyadh89.
These should not have been included in the 1.0 release, and do not represent
genuine time zones. It is unlikely that you used them.
If you do want to use them, please contact the joda-interest mailing list
Warnings since 1.0
------------------
ReadablePartial now has a comment recommending that all implementations
should also implement Comparable.
This is most easily achieved by extending AbstractPartial.
Deprecations since 1.0
----------------------
None
Bug fixes since 1.0
-------------------
- Date and Time (ZoneInfoCompiler)
Greek summer time was incorrect due to a comment parsing bug.
This disabled DST (summer time) for Europe/Athens after 1980.
- DateTimeFormat
Parsing of two digit year by DateTimeFormat supports parsing of more or less
than two digits, for compatibility with java.text.SimpleDateFormat. If not
two digits or if sign character is present, then year is parsed as absolute.
- GJChronology
Range duration field of dayOfMonth was not consistent with monthOfYear. This
bug manifested itself when adding/subtracting periods to partials.
- DateTimeParserBucket
Fixed parsing date where format includes era. Era must be set and rounded
before any other fields.
- PeriodFormatterBuilder
Formatters that had fields which required a zero to be printed were not being
parsed.
- DateTime.Property, DateMidnight.Property and MutableDateTime.Property
Could previously only be serialized in UTC.
The serialization format has been changed to be simpler and more reliable.
Unfortunately, this was an incompatible change to the serialization format.
- DateTimeFormatterBuilder/PeriodFormatterBuilder
Number parser would accept multiple sign characters as valid.
- YearMonthDay/TimeOfDay.withChronologyRetainFields
Previously, switching chronology did not validate the fields, so you could
end up with an object in an invalid state, such as a YearMonthDay where
dayOfMonth=31 with Coptic.
This method can now throw an IllegalArgumentException
- Chronologies
Overflowed calculations involving year throw ArithmeticException rather than
produce a bogus result.
- DateTimeFormatterBuilder.canBuildFormatter()
Previously this method always returned false.
Enhancements since 1.0
----------------------
- Partial
New immutable implementation of ReadablePartial.
This implementation is flexible as to the fields that it stores.
Thus, if you want a partial holding just a year and monthOfYear (perhaps
for a credit card expiry date), then this class can be used.
Full support for almost all truncated and reduced precision ISO output
formats is available via use of this class.
- DateTime/DateMidnight/MutableDateTime/YearMonthDay/TimeOfDay
Added convenience plusXxx() and minusXxx() methods to add/subtract a period
For example, dt.plus(Period.days(6)) can now be replaced by dt.plusDays(6)
- DateTime/DateMidnight/MutableDateTime/YearMonthDay/TimeOfDay
Added convenience toString() method that takes a DateTimeFormatter
For example, dt.toString(DateTimeFormat.shortDateTime())
- YearMonthDay/TimeOfDay/AbstractPartial
Enabled comparisons using Comparable interface
Added compareTo/isEqual/isAfter/isBefore methods
These methods were added to AbstractPartial, and are thus available to
all implementations of ReadablePartial
- YearMonthDay/TimeOfDay
Extra time zone constructor
Allows current date and time to be accurately obtained
- DateTime/DateMidnight/MutableDateTime/YearMonthDay/TimeOfDay Property
Added new method to property class - getAsString()
Gets the value as a string, not using text values like 'Monday' or 'January'
- Period
Added constructors to create a Period from two ReadablePartials, such as
YearMonthDay or TimeOfDay
- Period
Added factory to create a Period from two ReadablePartials using an
alternative, field-based, calculation
- DateTimeUtils
Added isContiguous(ReadablePartial) to test if a partial is contiguous
(see the method for the definition)
- PeriodType
Added factory method forFields() to allow a PeriodType to be obtained
from any set of DurationFieldType objects
- PeriodType
Added three new period types - YearMonthDay, YearWeekDay and YearDay
These complement the existing ones but exclude the time fields.
- DateTimeFormatter
Method withPivotYear added to allow the two digit pivot year to be controlled.
This is most useful after creating a format from a string pattern.
- DateTimeFormatter
Added lenient parse option to appendTwoDigitYear and appendTwoDigitWeekyear.
- Interval
Added overlap method that returns the actual overlap between two intervals.
Added gap method that returns the gap between two intervals.
Added abuts method that returns true if two intervals abut.
- DateTimeUtils
Added getReadableInterval(ReadableInterval) method to handle null intervals
- IllegalFieldValueException
Added new exception subclass of IllegalArgumentException to capture more
context when a field is set to an illegal value. This can be helpful in
interactive applications.
- GJLocaleSymbols
Supports parsing "CE" and "BCE" as era if locale language is English.
- ISODateTimeFormat
New method, forFields(), which gets an ISO format for a set of fields.
This is useful for more unusual formats such as DayHour.
- ISODateTimeFormat
New methods to output ordinal style dates, such as 2005-161.
- DateTimeZone classes updated to latest data from the Olson time zone database
</source>
</p>
</section>
</body>
</document>