Более чистый способ работы с датами в Java / Quartz - PullRequest
0 голосов
/ 18 сентября 2018

Чтобы программно запланировать работу на один день вперед (используя кварц), мне пришлось придумать этот беспорядок кода:

Date.from(LocalDateTime.from(Instant.now()).plusDays(1).toInstant(ZoneOffset.ofHours(-3)))

Нет ли способа сделать этот чудовищный кусок кодаболее чистый, читаемый?

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

РЕДАКТИРОВАТЬ

Кточнее, мне нужен java.util.Date, который на один день больше, чем при его создании.

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Заголовок, который вы выбрали, запрашивает даты в Java в общем смысле, но ваш вопрос и ваши теги показывают, что вас могут заинтересовать некоторые специфичные для Кварца решения, подобные этим (при условии, что вы используете TriggerBuilder):

TriggerBuilder tb = ...; // initialize your tb

// Option 1
Trigger trigger = tb
        .withSchedule(/* pick your flavor */)
        .startAt(DateBuilder.futureDate(1, DateBuilder.IntervalUnit.DAY))
        .build();

// Option 2
LocalDateTime now = LocalDateTime.now();
Trigger trigger2 = tb
        .withSchedule(/* pick your flavor */)
        .startAt(DateBuilder.tomorrowAt(now.getHour(), now.getMinute(), now.getSecond()))
        .build();

Для получения дополнительной информации проверьте DateBuilder API .

0 голосов
/ 19 сентября 2018

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

    Date sameTimeTomorrow = Date.from(Instant.now().plus(Duration.ofDays(1)));

Или вот это:

    Date sameTimeTomorrow = Date.from(Instant.now().plus(1, ChronoUnit.DAYS));

Осторожно, однако, это добавляет 24 часа без учета летнего времени или других аномалий.Например: в моем часовом поясе летнее время заканчивается ночью между 27 и 28 октября. Поэтому, если я выполню вышеуказанное 27 октября в 12 часов дня, я попаду 28 октября в 13 часов в своем часовом поясе, потому что время изменилось.Если мне нужно снова набрать 12 часов, мне нужно:

    Date sameTimeTomorrow = Date.from(
            ZonedDateTime.now(ZoneId.of("America/Sao_Paulo")).plusDays(1).toInstant());

Пожалуйста, укажите правильный часовой пояс.

...