[ https://issues.apache.org/jira/browse/GROOVY-8368?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Jochen Theodorou closed GROOVY-8368. ------------------------------------ Resolution: Fixed Assignee: Jochen Theodorou > date arithmetic bug using TimeCategory intervals > ------------------------------------------------ > > Key: GROOVY-8368 > URL: https://issues.apache.org/jira/browse/GROOVY-8368 > Project: Groovy > Issue Type: Bug > Affects Versions: 2.6.0-alpha-1 > Environment: Ubuntu 16.04, Groovy 2.6.0-alpha-1, OpenJDK 1.8.0_131 > Reporter: Brian Koehmstedt > Assignee: Jochen Theodorou > Priority: Minor > Attachments: intervalBug.groovy > > > There's what I think to be a date arithmetic bug using TimeCategory intervals > and it appears to show itself only the 30th of any given month. I noticed > this because our automatic builds fail towards the end of the month due to > failing tests and this has been going on for a long time. I decided to hunt > this down today (Oct 30) as the build failed today and I had time to track it > down. I was able to produce a small script to reproduce it, as shown below. > I tested with latest 2.6.0 alpha1 as well as 2.4.10 (what we're actually > using). Both show the bug. > I don't have an opinion on how "1.month" is interpreted in Groovy. That's > not what this submission is about. The bug I am reporting here is that the > following two expressions should always evaluate to the same value and it > appears they don't on the 30th of the month: > {code} > Date now = new Date().clearTime() > // fails on the 30th of the month (at least, for Oct 30 2017) > assert now + 1.month + 1.day == now + 1.day + 1.month > {code} > {code} > // START of intervalBug.groovy > import groovy.time.TimeCategory > Date now = new Date().clearTime() > println "current date = $now" > use(TimeCategory) { > println "now+1day+1month = ${now + 1.day + 1.month}" > println "now+1month+1day = ${now + 1.month + 1.day}" > } > // END of intervalBug.groovy > {code} > {noformat} > # also tested with groovy-2.4.10 with same buggy result > $ groovy -v > Groovy Version: 2.6.0-alpha-1 JVM: 1.8.0_131 Vendor: Oracle Corporation OS: > Linux > # 29th of month is OK: same result produced > $ sudo date -s "29 OCT 2017 13:00:00"; groovy intervalBug.groovy > Sun Oct 29 13:00:00 PDT 2017 > current date = Sun Oct 29 00:00:00 PDT 2017 > now+1day+1month = Thu Nov 30 00:00:00 PST 2017 > now+1month+1day = Thu Nov 30 00:00:00 PST 2017 > # 30th of month is BUGGY: different result produced > $ sudo date -s "30 OCT 2017 13:00:00"; groovy intervalBug.groovy > Mon Oct 30 13:00:00 PDT 2017 > current date = Mon Oct 30 00:00:00 PDT 2017 > now+1day+1month = Thu Nov 30 00:00:00 PST 2017 > now+1month+1day = Fri Dec 01 00:00:00 PST 2017 > # 31st of month is OK > $ sudo date -s "31 OCT 2017 13:00:00"; groovy intervalBug.groovy > [sudo] password for bkoehmstedt: > Tue Oct 31 13:00:00 PDT 2017 > current date = Tue Oct 31 00:00:00 PDT 2017 > now+1day+1month = Fri Dec 01 00:00:00 PST 2017 > now+1month+1day = Fri Dec 01 00:00:00 PST 2017 > # 1st of month is OK > $ sudo date -s "01 NOV 2017 13:00:00"; groovy intervalBug.groovy > [sudo] password for bkoehmstedt: > Wed Nov 1 13:00:00 PDT 2017 > current date = Wed Nov 01 00:00:00 PDT 2017 > now+1day+1month = Sat Dec 02 00:00:00 PST 2017 > now+1month+1day = Sat Dec 02 00:00:00 PST 2017 > {noformat} -- This message was sent by Atlassian JIRA (v6.4.14#64029)