class FixedHourScheduledJob implements ScheduledJob {

    @Override
    public final boolean shouldExecute(LocalDateTime lastExecuteTime) {
        var now = LocalDateTime.now(clock);
        var today = LocalDate.now(clock);
        var yesterday = today.minus(1, ChronoUnit.DAYS);
        var lastExecuteDate = lastExecuteTime.toLocalDate();

        // last execute two days or more ago
        if(yesterday.isAfter(lastExecuteDate)) {
            return true;

            // last execute yesterday
        } else if(today.isAfter(lastExecuteDate)) {
            return now.getHour() >= this.jobExecutionHour;

            // last execute today
        } else {
            return lastExecuteTime.getHour() < this.jobExecutionHour;
        }
    }

    protected  FixedHourScheduledJob(Clock clock, int jobExecutionHour);

}