Java knows the time and date of daylight saving changes in advance, so having a timer running all the time to check seems (to me) a bit wasteful.
You could at the start of your program simply create a task on the ScheduledExecutorService that fires when a change occurs and then update the time on the external device.
Just a thought.
code to see the dates & times
#if java
import java.util.*;
import java.time.ZoneId;
import java.time.zone.ZoneOffsetTransitionRule;
public static void DST(){
ZoneId zid = ZoneId.systemDefault();
// 0 is start 1 is end
ZoneOffsetTransitionRule DSTstarts = zid.getRules().getTransitionRules().get(0);
ZoneOffsetTransitionRule DSTends = zid.getRules().getTransitionRules().get(1);
// just to see the rules for current year
//System.out.println(DSTstarts);
//System.out.println(DSTends);
// pretty print the info
System.out.println("Daylight saving starts on "+ DSTstarts.getDayOfWeek() + " " + DSTstarts.getDayOfMonthIndicator() +
" " + DSTstarts.getMonth() + " at " + DSTstarts.getLocalTime() +" clocks goes forward to "+ DSTstarts.getLocalTime().plusHours(1));
System.out.println("Daylight saving ends on "+ DSTends.getDayOfWeek() + " " +DSTends.getDayOfMonthIndicator() +
" " + DSTends.getMonth() + " at " + DSTends.getLocalTime().plusHours(1) +" clocks goes back to "+ DSTends.getLocalTime());
}
#End If