Войти или зарегистрироваться

Помогите Смена значения в определенное время

Ну, раньше времени точно не выполнится. А вот верхнюю границу я бы не ставил. Получится условие типа time >= 01:00
а как запускать бы шелудер что бы оно два разо не выдало true и не добавило два раза
 
Понимаю, что лучше с ложки не кормить, но с LocalDateTime возни будет слишком много - нагляднее лучше.
PHP:
public final class Until {
    private final int hours;
    private final int minutes;
    private final int seconds;

    private long expectedMillis;

    public Until(
            @Range(from = 0, to = 23) int hours,
            @Range(from = 0, to = 59) int minutes,
            @Range(from = 0, to = 59) int seconds
    ) {
        this.hours = hours;
        this.minutes = minutes;
        this.seconds = seconds;
        findNext();
    }

    private void findNext() {
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime expected = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), hours, minutes, seconds);
        if (expected.isBefore(now) || expected.isEqual(now)) {
            expected = expected.plusDays(1);
        }
        expectedMillis = expected.atZone(ZoneId.systemDefault()).toEpochSecond() * 1000L;
    }

    public boolean isTime() {
        if (System.currentTimeMillis() >= expectedMillis) {
            findNext();
            return true;
        }
        return false;
    }

    public double secondLeft() {
        return (expectedMillis - System.currentTimeMillis()) / 1000d;
    }
}
Состряпал на коленке по-быстрому небольшой утилитарный класс. Даешь ему час, минуту и секунду, в которые нужно произвести что-либо. В findNext он просчитывает секунду следующего срабатывания. Метод isTime проверяет, прошла ли та секунда, и если прошла, ищет новую и выдает true; иначе просто false. Для удобства добавил secondsLeft - сколько секунд осталось до следующего срабатывания.
Создаешь один раз Until и хранишь где-нибудь в своем классе. В своем шедулере - не так важно, с какой именно задержкой будешь выполнять - просто делаешь проверку вроде
PHP:
if (until.isTime()) {
    // Время настало
}
и делаешь что хочешь.
 
Понимаю, что лучше с ложки не кормить, но с LocalDateTime возни будет слишком много - нагляднее лучше.
PHP:
public final class Until {
    private final int hours;
    private final int minutes;
    private final int seconds;

    private long expectedMillis;

    public Until(
            @Range(from = 0, to = 23) int hours,
            @Range(from = 0, to = 59) int minutes,
            @Range(from = 0, to = 59) int seconds
    ) {
        this.hours = hours;
        this.minutes = minutes;
        this.seconds = seconds;
        findNext();
    }

    private void findNext() {
        LocalDateTime now = LocalDateTime.now();
        LocalDateTime expected = LocalDateTime.of(now.getYear(), now.getMonth(), now.getDayOfMonth(), hours, minutes, seconds);
        if (expected.isBefore(now) || expected.isEqual(now)) {
            expected = expected.plusDays(1);
        }
        expectedMillis = expected.atZone(ZoneId.systemDefault()).toEpochSecond() * 1000L;
    }

    public boolean isTime() {
        if (System.currentTimeMillis() >= expectedMillis) {
            findNext();
            return true;
        }
        return false;
    }

    public double secondLeft() {
        return (expectedMillis - System.currentTimeMillis()) / 1000d;
    }
}
Состряпал на коленке по-быстрому небольшой утилитарный класс. Даешь ему час, минуту и секунду, в которые нужно произвести что-либо. В findNext он просчитывает секунду следующего срабатывания. Метод isTime проверяет, прошла ли та секунда, и если прошла, ищет новую и выдает true; иначе просто false. Для удобства добавил secondsLeft - сколько секунд осталось до следующего срабатывания.
Создаешь один раз Until и хранишь где-нибудь в своем классе. В своем шедулере - не так важно, с какой именно задержкой будешь выполнять - просто делаешь проверку вроде
PHP:
if (until.isTime()) {
    // Время настало
}
и делаешь что хочешь.
огромное спасибо, все прекрасно
 
Назад
Верх