[threeten-dev] some problems in java.time.YearMonth and java.time.Year
patrick zhang
patrick.zhang at oracle.com
Fri Mar 8 23:14:40 PST 2013
Hi Team,
During investigation for java.time.YearMonth and java.time.Year, I have
found some problems in it.
1. Year.minus(TemporalAmout) does not work properly.
===========
Year year = Year.of(5);
Year result = year.minus(Period.ofYears(2)) ;
System.out.println(result);
===========
Personally I think above code should work and return Year.of(3). But it
throws exception:
===========
Exception in thread "main" java.time.DateTimeException: Unsupported
unit: Months
at java.time.Year.plus(Year.java:660)
at java.time.Year.minus(Year.java:727)
at java.time.Year.minus(Year.java:123)
at java.time.Period.subtractFrom(Period.java:823)
at java.time.Year.minus(Year.java:704)
at mytest.TestEra.main(TestEra.java:18)
============
2. javadoc for Year.minus(long, TemporalUnit) is wrong.
As you know the method will return Year same with minus(TemporalAmout)
while it is "YearMonth" in current javadoc:
====================
Returns:
a |YearMonth| based on this year-month with the specified amount
subtracted, not null
====================
3. javadoc for java.time.Temporal.ChronoUnit.ERAS is confused.
Here there are 2 problems.
====================
Unit that represents the concept of an era. The ISO calendar system
doesn't have eras thus it is impossible to add an era to a date or
date-time. The estimated duration of the era is artificially defined as
|1,000,00,000 Years|.
====================
I guess it should be 1,000,000,000 years nor |1,000,00,000
|====================
Year year = Year.of(-1);
Year result = year.plus(1, ChronoUnit.ERAS);
System.out.println(year.get(ChronoField.ERA) + " " +
year.get(ChronoField.YEAR_OF_ERA) + " " + year.get(ChronoField.YEAR));
System.out.println(result.get(ChronoField.ERA) + " " +
result.get(ChronoField.YEAR_OF_ERA) + " " + result.get(ChronoField.YEAR));
output:
0 2 -1
1 2 2
====================
Since ERAS is not supported in ISO calendar, I think it should not
return such a strange result.
It looks it only plus 1 on ChronoField.ERAS field simply......
Regards
Patrick
More information about the threeten-dev
mailing list