diff --git a/extensions/binding/org.eclipse.smarthome.binding.astro/src/main/java/org/eclipse/smarthome/binding/astro/internal/job/Job.java b/extensions/binding/org.eclipse.smarthome.binding.astro/src/main/java/org/eclipse/smarthome/binding/astro/internal/job/Job.java index 6c805a82051..01ac5c493b0 100644 --- a/extensions/binding/org.eclipse.smarthome.binding.astro/src/main/java/org/eclipse/smarthome/binding/astro/internal/job/Job.java +++ b/extensions/binding/org.eclipse.smarthome.binding.astro/src/main/java/org/eclipse/smarthome/binding/astro/internal/job/Job.java @@ -7,6 +7,7 @@ */ package org.eclipse.smarthome.binding.astro.internal.job; +import static java.util.Calendar.SECOND; import static java.util.Objects.isNull; import static org.apache.commons.lang.time.DateFormatUtils.ISO_DATETIME_FORMAT; import static org.eclipse.smarthome.binding.astro.AstroBindingConstants.*; @@ -39,7 +40,7 @@ public interface Job extends Runnable { /** Logger Instance */ public final Logger logger = LoggerFactory.getLogger(MethodHandles.lookup().lookupClass()); - + /** * Schedules the provided {@link Job} instance * @@ -111,8 +112,16 @@ public static void scheduleRange(String thingUID, AstroThingHandler astroHandler if (thingNull || astroHandlerNull || rangeNull || channelIdNull) { return; } - scheduleEvent(thingUID, astroHandler, range.getStart(), EVENT_START, channelId); - scheduleEvent(thingUID, astroHandler, range.getEnd(), EVENT_END, channelId); + + //add 1 second to the last scheduled event if both the events comprise same time instant + int secondsPadding = 1; + Calendar start = range.getStart(); + Calendar end = range.getEnd(); + if (isTimeEquals(start, end)) { + end.add(SECOND, secondsPadding); + } + scheduleEvent(thingUID, astroHandler, start, EVENT_START, channelId); + scheduleEvent(thingUID, astroHandler, end, EVENT_END, channelId); } /** diff --git a/extensions/binding/org.eclipse.smarthome.binding.astro/src/main/java/org/eclipse/smarthome/binding/astro/internal/util/DateTimeUtils.java b/extensions/binding/org.eclipse.smarthome.binding.astro/src/main/java/org/eclipse/smarthome/binding/astro/internal/util/DateTimeUtils.java index cdd1db2853b..319ba8280fb 100644 --- a/extensions/binding/org.eclipse.smarthome.binding.astro/src/main/java/org/eclipse/smarthome/binding/astro/internal/util/DateTimeUtils.java +++ b/extensions/binding/org.eclipse.smarthome.binding.astro/src/main/java/org/eclipse/smarthome/binding/astro/internal/util/DateTimeUtils.java @@ -167,7 +167,16 @@ public static boolean isTimeGreaterEquals(Calendar cal1, Calendar cal2) { Calendar truncCal2 = DateUtils.truncate(cal2, Calendar.MINUTE); return truncCal1.getTimeInMillis() >= truncCal2.getTimeInMillis(); } - + + /** + * Returns {@code true}, if the provided calendar instances are same, ignoring milliseconds. + */ + public static boolean isTimeEquals(Calendar cal1, Calendar cal2) { + Calendar truncCal1 = DateUtils.truncate(cal1, Calendar.SECOND); + Calendar truncCal2 = DateUtils.truncate(cal2, Calendar.SECOND); + return truncCal1.getTimeInMillis() == truncCal2.getTimeInMillis(); + } + /** * Applies the config to the given calendar. */