Hi Folks!
When migrating from OH 2.5 to OH 3.0 I was fiddling around with datetime conversion in my rules. In OH 2.5 I used a lot of these time equations (with or without the minutes, mostly without because it’s easier and somewhat cleaner):
var Number hour = now.getHour
if (hour < 22){
if (HarmonyActivity.state != "PowerOff" && System_pod_mode.state == "avond"){
Woonkamer_Preset.postUpdate(3)
}
}
So I thought of a sollution where I could just type the time in a variable / constant to define a certain point in time like: “09:33:00” and the code does the equation. It’s easier to read and more flexible. For instance, I can calculate the time easy by adding 93 minutes e.g. For my own code I didn’t had to use the date, so it’s using today’s date. None of my rules almost never use a day or date.
So I came up with this:
// here we could use a readable time, but we must use hours,minutes and seconds in 2 digits
val String strTime1 = "09:11:50"
// The date is extracted from today's date
val String strDate = now.toLocalDateTime.toString.split("T").get(0) + "T"
// Below we put it all together and create a zoneddatetime which Java understands
val ZonedDateTime dteTime1 = ZonedDateTime.parse(strDate + strTime1 + ".000Z").withZoneSameLocal(ZoneId.systemDefault())
if (now.isAfter(dteTime1) && now.isBefore(dteTime1.plusHours(1))){ // use it at your convenience
logInfo("test.rules", "We're in the zone!")
} else {
logInfo("test.rules", "We're just not in the zone...")
}
One thing which is strange: I have to extract 1 hour when I create the zoneddatetime. I think because of wintertime, not sure how this holds up when summertime begins… < maybe someone has a sollution for this?
I created this post so people can use it. It costs a lot of time (couple of hours) to think it all through if you’re not a programmer, was my experience.