openhab / openhab-jruby

A Helper Library for Writing openHAB Automations in Ruby
https://www.openhab.org/addons/automation/jrubyscripting/
Eclipse Public License 2.0
5 stars 5 forks source link

DateTimeType spec fix #340

Closed jimtng closed 1 month ago

jimtng commented 1 month ago

The case of DateTimeType.parse("00:00+1000") is parsed by Time.parse in DSL.try_parse_time_like, which takes into account the current time and the system time zone in interpreting the given "time+timezone" string.

This is why it has been intermittent in the past: depending on the time the spec was running, and the system time zone of the machine running the spec, the resulting date could be either today or yesterday whereas the previous spec was pinning the date to today's date.

Here's a demonstration, notice the date in the last example:

irb(main):047> Time.now
=> 2024-09-17 10:16:27.302101 +1000
irb(main):048> Time.now.utc
=> 2024-09-17 00:16:33.278331 UTC
irb(main):049> Time.parse("0:00+00:00")
=> 2024-09-17 00:00:00 +0000
irb(main):050> Time.parse("0:00-00:18")
=> 2024-09-16 00:00:00 -0018

The solution in this PR is to simply compare the result against Time.parse so we should get the exact same result since they're using the same parser (and hence parsing logic) to come up with whatever date it is.

In practice, parsing time+timezone without a date is perhaps a rare case?