Indeed, it seems our issue can be solved with the existing built-in
mechanisms (I didn't know that).
Looks like we can override java methods in groovy with help of
`org.codehaus.groovy.runtime.ExtensionModule`.
The script ```assert java.time.LocalDateTime.now() <
java.time.LocalDate.now().plusDays(42)``` works for me (in tests)
if the extension-method has signature `public static int
compareTo(LocalDateTime self, LocalDate other)`
(but does not work if the signature is `public static int
compareTo(LocalDateTime self, Object other)`).

Maybe it is worth creating a test for "compareTo-extension" to fixate that
behavior?
(I'd rather expect the second signature to work, rather than the first one)

In any case, I think, this does not cancel the original question,
...
As for the example with the list, I don't see a problem here: we are
comparing `LocalDate#atStartOfDay` with `LocalDateTime`, not `LocalDate`
with `LocalDateTime#toLocalDate()`, so there is no losing information -> no
ambiguities -> it should be pretty safe.


On Wed, Nov 17, 2021 at 7:27 PM Milles, Eric (TR Technology) <
eric.mil...@thomsonreuters.com> wrote:

> Is there a path forward where the language runtime does not need to embed
> this handling, but the extension mechanisms in place can be used by your
> project so your users get the ease of comparison of these two types?  As
> soon as Groovy takes on the assumption that it is okay to compare LocalDate
> and LocalDateTime one way or the other, someone is going to need the
> opposite.
>
> -----Original Message-----
> From: Rachel Greenham <rac...@merus.eu>
> Sent: Wednesday, November 17, 2021 6:00 AM
> To: dev@groovy.apache.org
> Subject: [EXT] Re: A feature request: comparing LocalDate and
> LocalDateTime using built-in operators.
>
> External Email: Use caution with links and attachments.
>
> I think this is part of the argument to be had with the *java*.time api
> (it’s not really a groovy matter tbh). A LocalDate is a time with a
> resolution of one day, it is not implicitly midnight, just as a LocalTime
> does not imply *any* day, including today, just a time of day, and a
> LocalDateTime does not compare to a ZonedDateTime because you really need
> that zone info, and it could be dangerous to assume a timezone. so the API
> stops you acting as if that’s ok.
>
> It’s therefore proper to expect to do the conversion.
> theLocalDate.atStartOfDay() < theLocalDateTime (or
> theLocalDate.atStartOfDay().isBefore(theLocalDateTime()) )
>
> That’s the conceptual problem with wanting a convenience of being able to
> compare different time types *without knowing what they are*. It means you
> may be embedding assumptions in a library that aren’t as global as you
> might think they are.
>
> --
> Rachel Greenham
> rac...@merus.eu
>
>
>
> > On 17 Nov 2021, at 11:53, h...@abula.org wrote:
> >
> >>> Here, we represent `java.time.LocalDate` as a
> `java.time.LocalDateTime` at
> >>> midnight.
> >
> > Just off the top of my head, should the LocalDate match LocalDateTime
> only at midnight? Or should it match any point in time during that date?
> Surely it's April fool's day for the entire duration of April 1st?
> >
> > BR; Haakon Hansen, Norway
> >
> > Den 2021-11-17 12:28, skrev Søren Berg Glasius:
> >> I think this is a very good idea, and give a +1 for the idea and
> >> implementation.
> >> Best regards / Med venlig hilsen,
> >> Søren Berg Glasius
> >> Hedevej 1, Gl. Rye, 8680 Ry, Denmark
> >> Mobile: +45 40 44 91 88, Skype: sbglasius
> >> --- Press ESC once to quit - twice to save the changes.
> >> Den tir. 16. nov. 2021 kl. 15.24 skrev ssz <sss.z...@gmail.com>:
> >>> Hello everyone,
> >>> Before creating a PR (or\and an issue in Jira) I would like to discuss
> a
> >>> possible feature.
> >>> In our product we need the ability to compare `java.time.LocalDate` and
> >>> `java.time.LocalDateTime` objects easily without knowing the exact
> type.
> >>> For this we have historical reasons: we have a groovy-based engine and
> a
> >>> lot of client scripts with date comparison.
> >>> Until recently, we used a customized version of joda-time, that allows
> >>> such operations.
> >>> As practice has shown, it was very convenient.
> >>> But now for some reasons we have decided to abandon joda-time in favor
> of
> >>> pure java-time.
> >>> So, in order not to break anyone's scripts it would be nice for us if
> >>> groovy could support comparisons of those date-objects out of the box.
> >>> To demonstrate what I mean here is a draft:
> >>>
> https://urldefense.com/v3/__https://github.com/greendatasoft/groovy/commit/c55d722e6b6ead9d6e0123835c62a5fa4f525ffe__;!!GFN0sa3rsbfR8OLyAw!KhyI7wA8GFkwwtNcALvM2BH8QvscE-vHJ2KEn5ArixujSXGxEsH25P0PE3iVV7Rp-EmACLk$
> >>> Here, we represent `java.time.LocalDate` as a
> `java.time.LocalDateTime` at
> >>> midnight.
> >>> It seems this way can't break any code, and at the same time it would
> be
> >>> user-friendly.
> >>> But for those who have weird logic with exception handling, there is a
> >>> "groovy.compare.local-date-and-datetime" option, which allows to return
> >>> back the original behaviour.
> >>> Please tell me what you think.
> >>> Can I proceed with PR?
> >>> Or maybe there is a better way to customize groovy to achieve the same
> >>> behaviour?
>
>

Reply via email to