# HG changeset patch # User scolebourne # Date 1402529487 -3600 # Node ID 005ed9477bbef9538f410b6d302ed0c971716750 # Parent 0db6a84fa83c179c302b1d62f3acd841aeb187fc Optimise performance diff -r 0db6a84fa83c -r 005ed9477bbe src/share/classes/java/time/Instant.java --- a/src/share/classes/java/time/Instant.java Wed Jun 11 08:25:33 2014 +0100 +++ b/src/share/classes/java/time/Instant.java Thu Jun 12 00:31:27 2014 +0100 @@ -1058,7 +1058,8 @@ } // inline TemporalAccessor.super.query(query) as an optimization if (query == TemporalQueries.chronology() || query == TemporalQueries.zoneId() || - query == TemporalQueries.zone() || query == TemporalQueries.offset()) { + query == TemporalQueries.zone() || query == TemporalQueries.offset() || + query == TemporalQueries.localDate() || query == TemporalQueries.localTime()) { return null; } return query.queryFrom(this); diff -r 0db6a84fa83c -r 005ed9477bbe src/share/classes/java/time/OffsetDateTime.java --- a/src/share/classes/java/time/OffsetDateTime.java Wed Jun 11 08:25:33 2014 +0100 +++ b/src/share/classes/java/time/OffsetDateTime.java Thu Jun 12 00:31:27 2014 +0100 @@ -357,10 +357,11 @@ } try { ZoneOffset offset = ZoneOffset.from(temporal); - try { - LocalDateTime ldt = LocalDateTime.from(temporal); - return OffsetDateTime.of(ldt, offset); - } catch (DateTimeException ignore) { + LocalDate date = temporal.query(TemporalQueries.localDate()); + LocalTime time = temporal.query(TemporalQueries.localTime()); + if (date != null && time != null) { + return OffsetDateTime.of(date, time, offset); + } else { Instant instant = Instant.from(temporal); return OffsetDateTime.ofInstant(instant, offset); } diff -r 0db6a84fa83c -r 005ed9477bbe src/share/classes/java/time/ZonedDateTime.java --- a/src/share/classes/java/time/ZonedDateTime.java Wed Jun 11 08:25:33 2014 +0100 +++ b/src/share/classes/java/time/ZonedDateTime.java Thu Jun 12 00:31:27 2014 +0100 @@ -81,6 +81,7 @@ import java.time.temporal.TemporalAdjuster; import java.time.temporal.TemporalAmount; import java.time.temporal.TemporalField; +import java.time.temporal.TemporalQueries; import java.time.temporal.TemporalQuery; import java.time.temporal.TemporalUnit; import java.time.temporal.UnsupportedTemporalTypeException; @@ -551,14 +552,14 @@ } try { ZoneId zone = ZoneId.from(temporal); - try { + if (temporal.isSupported(INSTANT_SECONDS)) { long epochSecond = temporal.getLong(INSTANT_SECONDS); int nanoOfSecond = temporal.get(NANO_OF_SECOND); return create(epochSecond, nanoOfSecond, zone); - - } catch (DateTimeException ex1) { - LocalDateTime ldt = LocalDateTime.from(temporal); - return of(ldt, zone); + } else { + LocalDate date = LocalDate.from(temporal); + LocalTime time = LocalTime.from(temporal); + return of(date, time, zone); } } catch (DateTimeException ex) { throw new DateTimeException("Unable to obtain ZonedDateTime from TemporalAccessor: " + @@ -2039,8 +2040,12 @@ * @throws DateTimeException if unable to query (defined by the query) * @throws ArithmeticException if numeric overflow occurs (defined by the query) */ + @SuppressWarnings("unchecked") @Override // override for Javadoc public R query(TemporalQuery query) { + if (query == TemporalQueries.localDate()) { + return (R) toLocalDate(); + } return ChronoZonedDateTime.super.query(query); } diff -r 0db6a84fa83c -r 005ed9477bbe src/share/classes/java/time/format/Parsed.java --- a/src/share/classes/java/time/format/Parsed.java Wed Jun 11 08:25:33 2014 +0100 +++ b/src/share/classes/java/time/format/Parsed.java Thu Jun 12 00:31:27 2014 +0100 @@ -635,18 +635,20 @@ for (Iterator> it = fieldValues.entrySet().iterator(); it.hasNext(); ) { Entry entry = it.next(); TemporalField field = entry.getKey(); - long val1; - try { - val1 = target.getLong(field); - } catch (RuntimeException ex) { - continue; + if (target.isSupported(field)) { + long val1; + try { + val1 = target.getLong(field); + } catch (RuntimeException ex) { + continue; + } + long val2 = entry.getValue(); + if (val1 != val2) { + throw new DateTimeException("Conflict found: Field " + field + " " + val1 + + " differs from " + field + " " + val2 + " derived from " + target); + } + it.remove(); } - long val2 = entry.getValue(); - if (val1 != val2) { - throw new DateTimeException("Conflict found: Field " + field + " " + val1 + - " differs from " + field + " " + val2 + " derived from " + target); - } - it.remove(); } }