RFR 9: 8085887 : java.time.format.FormatStyle.LONG or FULL causes unchecked exception

Xueming Shen xueming.shen at oracle.com
Tue Mar 15 21:07:20 UTC 2016


looks good.

On 3/15/16 12:19 PM, Roger Riggs wrote:
> Hi Stephen,
>
> Updated as recommended.
>
> Thanks,  Roger
>
>
> On 3/15/2016 2:52 PM, Stephen Colebourne wrote:
>>
>> My only comment is that I would prefer to see "Precision" for the 
>> precision constant and "Zone" for the ZONE constant, as they describe 
>> the query better. No need for another webrev.
>>
>> Otherwise a good improvement. Thanks.
>> Stephen
>>
>> Hi Stephen,
>>
>> Updated webrev:
>> http://cr.openjdk.java.net/~rriggs/webrev-format-8085887/ 
>> <http://cr.openjdk.java.net/%7Erriggs/webrev-format-8085887/>
>>
>>
>> On 3/14/2016 7:45 PM, Stephen Colebourne wrote:
>>
>>     Great to see the better error messages. It may be better long 
>> term to
>>     add toString() to the TemporalQuery implementations (lambdas are
>>     convenient but optional). That said, what is in the webrev is 
>> what is
>>     needed here.
>>
>> Agreed, converted the TemporalQuery implementations to anonymous 
>> inner classes and
>> added toString methods that returned the unqualified type name, 
>> useful for messages and debugging.
>>
>>
>>     The error message in the inner class probably ought to be more 
>> clever,
>>     although what is added is a lot better than before. Ultimately, it
>>     should capture the temporal being formatted.
>>
>>     return temporal.toString() +
>>        (overrideChrono != null ? " with chronology + overrideChrono :
>>     "") +
>>        (overrideZone != null ? " with zone + overrideZone : "");
>>
>> Yes, an improvement
>>
>>
>>     The DateTimeFormatterBuilder spec change for parsing may not make
>>     sense. When parsing, the zone is driven by the localized pattern, so
>>     getZone() only comes into play if trying to query ZDT from a pattern
>>     where the zone was NOT parsed. As such, I'm not sure the spec needs
>>     clarifying in the parse section.
>>
>> Removed the section on parsing, it has not been reported as a problem 
>> and is a cornercase.
>>
>> There is no change in specified behavior and the new language is 
>> informative
>> using 'typically' to clarify the correct use of the formatters.
>>
>> I augmented the implementation tests to exercise the case and check 
>> the exception message
>> for the useful types and values.
>>
>> Thanks, Roger
>>
>>
>>     thanks
>>     Stephen
>>
>>
>>     On 14 March 2016 at 20:17, Roger Riggs <Roger.Riggs at oracle.com
>>     <mailto:Roger.Riggs at oracle.com>> wrote:
>>
>>         Hi Stephen,
>>
>>         Thanks for the comments and suggestions.
>>
>>         I have no issue cleaning it all up in one change.
>>
>>         Updated webrev:
>> http://cr.openjdk.java.net/~rriggs/webrev-format-8085887/
>> <http://cr.openjdk.java.net/%7Erriggs/webrev-format-8085887/>
>>
>>         On 3/12/2016 4:47 AM, Stephen Colebourne wrote:
>>
>>             I think the new text needs should be more specific:
>>
>>             The {@code FULL} and {@code LONG} styles typically require
>>             a time-zone.
>>             When formatting using these styles, a {@code ZoneId} must
>>             be available,
>>             either by using {@code ZonedDateTime} or {@link
>>             DateTimeFormatter#withZone}.
>>
>>         ok
>>
>>
>>             (testing shows that the other two styles appear to not use
>>             the time-zone.)
>>
>>             While it would be nice to support these styles when no
>>             time-zone is
>>             available, that seems like an unrealistic goal.
>>
>>
>>             Beyond this, the error message is terrible, eg:
>>             Unable to extract value: class
>>             java.time.format.DateTimePrintContext$1
>>             Unable to extract value: class java.time.LocalDateTime
>>             Unable to extract value: class java.time.OffsetDateTime
>>
>>             This requires two separate changes.
>>             1) Add toString() to the inner class at line 185 in
>>             DateTimePrintContext
>>
>>         Delegates to the temporal.
>>
>>
>>             2) At line 282 in DateTimePrintContext, the exception
>>             message needs to
>>             record what is being queried - ZoneId, ZoneOffset,
>>             Chronology etc.
>>             Something like:
>>             if (query == TemporalQueries.zoneId() {
>>                throw new DateTimeException("Unable to extract ZoneId
>>             from temporal:
>>             " + temporal.getClass());
>>             } else if (query == TemporalQueries.zoneOffset() {
>>                throw new DateTimeException("Unable to extract
>>             ZoneOffset from
>>             temporal: " + temporal.getClass());
>>             } else ...
>>
>>         An  more general alternative would be to add toString methods
>>         to each of the
>>         TemporalQuery instances
>>         but that would mean giving up the use of lambda for their
>>         implementations.
>>
>>         Thanks, Roger
>>
>>
>>             I'm happy for the error message problem to be fixed in a
>>             different
>>             issue if desired.
>>
>>             Stephen
>>
>>
>>
>>             On 11 March 2016 at 20:19, Roger Riggs
>>             <Roger.Riggs at oracle.com <mailto:Roger.Riggs at oracle.com>>
>>             wrote:
>>
>>                 Please review java.time javadoc improvements to
>>                 highlight a common
>>                 misunderstanding
>>                 about formatting elements that require a timezone in
>>                 addition to the
>>                 time.
>>                 When using locale specific formatting, it may work if
>>                 the locale
>>                 formatting
>>                 does not
>>                 require a timezone or fail if the locale formatting
>>                 requires a timezone
>>                 and
>>                 a timezone is not provided.
>>
>>                 ZoneDateTime or OffsetDateTime types should be used
>>                 when formatting with
>>                 locale
>>                 dependent formatters.
>>
>>                 8085887 : java.time.format.FormatStyle.LONG or FULL
>>                 causes unchecked
>>                 exception
>>
>>                 Webrev:
>> http://cr.openjdk.java.net/~rriggs/webrev-format-8085887/
>> <http://cr.openjdk.java.net/%7Erriggs/webrev-format-8085887/>
>>
>>                 Thanks, Roger
>>
>>
>




More information about the core-libs-dev mailing list