Можно ли использовать scheduleAtFixedRate для запуска функции каждое первое число месяца? - PullRequest
0 голосов
/ 24 февраля 2019

Я новичок в использовании kotlin, и мне интересно, могу ли я сделать следующее ...

Я хочу вызывать метод первого числа каждого месяца, я нашел this и увиделВот пара примеров, подобных этому:

timer.schedule(1000) {
    println("hello world!")
}

Мне интересно, можно ли использовать (вместо фиксированного времени) календарный день?как первое число месяца?

1 Ответ

0 голосов
/ 25 февраля 2019

Нет встроенного способа сделать это.

Если точное время суток не имеет значения *, то один из подходов - запланировать запуск задачи каждые 24 часа и проверить,текущее время - первый день месяца, и, если это так, выполните задание.

(* Оно немного сместится, когда начнется или закончится летнее время, или будут добавлены дополнительные секунды, но это может и не бытьзначительно.)

Более мощный (но более сложный подход) состоит в том, чтобы установить таймер на один раз, в соответствующее время 1-го числа следующего месяца.Затем, выполнив задание, он может перепланировать себя на 1-е число следующего месяца.(Вам нужно позаботиться о том, чтобы это всегда было так, даже если задача вызвала исключение.)

Вы можете поместить все это в собственный класс таймера, чтобы отделить его от бизнес-логики, которую вы используете.хочу запустить.

Примеры в Java (которые будут переводиться непосредственно в Kotlin / JVM), см. ответы на эти вопросы .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...