[
https://issues.apache.org/jira/browse/SOLR-8904?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15218221#comment-15218221
]
David Smiley commented on SOLR-8904:
------------------------------------
I'm glad you like the simplifications; that was definitely part of this. The 2
nits are small enough that I'll just go commit with them done now.
Thanks for that code snippet. As I was working on the code, I resisted taking
this step because it would also require some tests, and could conceivably be
combined in another issue with optimizations to avoid creating an instance of
DateMathParser when there is no math to parse.
As an aside, I have no idea how much faster (or slower?) date formatting and
parsing is. I suspect faster given no need to worry about thread-safety.
> Switch from SimpleDateFormat to Java 8 DateTimeFormatter.ISO_INSTANT
> --------------------------------------------------------------------
>
> Key: SOLR-8904
> URL: https://issues.apache.org/jira/browse/SOLR-8904
> Project: Solr
> Issue Type: Task
> Reporter: David Smiley
> Assignee: David Smiley
> Fix For: 6.0
>
> Attachments: SOLR_8904.patch, SOLR_8904.patch,
> SOLR_8904_switch_from_SimpleDateFormat_to_Instant_parse_and_format.patch
>
>
> I'd like to move Solr away from SimpleDateFormat to Java 8's
> java.time.formatter.DateTimeFormatter API, particularly using simply
> ISO_INSTANT without any custom rules. This especially involves our
> DateFormatUtil class in Solr core, but also involves DateUtil (I filed
> SOLR-8903 to deal with additional delete/move/deprecations for that one).
> In particular, there's {{new Date(Instant.parse(d).toEpochMilli())}} for
> parsing and {{DateTimeFormatter.ISO_INSTANT.format(d.toInstant())}} for
> formatting. Simple & thread-safe!
> I want to simply cut over completely without having special custom rules.
> There are differences in how ISO_INSTANT does things:
> * Formatting: Milliseconds are 0 padded to 3 digits if the milliseconds is
> non-zero. Thus 30 milliseconds will have ".030" added on. Our current
> formatting code emits ".03".
> * Dates with years after '9999' (i.e. 10000 and beyond, >= 5 digit years):
> ISO_INSTANT strictly demands a leading '\+' -- it is formatted with a "\+"
> and if such a year is parsed it *must* have a "\+" or there is an exception.
> SimpleDateFormatter requires the opposite -- no '+' and and if you tried to
> give it one, it would throw an exception.
> * Currently we don't support negative years (resulting in invisible errors
> mostly!). ISO_INSTANT supports this!
> In addition, DateFormatUtil.parseDate currently allows the trailing 'Z' to be
> optional, but the only caller that could exploit this is the analytics
> module. I'd like to remove the optional-ness of 'Z' and inline this method
> away to {{new Date(Instant.parse(d).toEpochMilli())}}.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]