Мой API службы принимает startDate для кварцевого задания и день месяца для выполнения задания. Внутри я конвертирую это в выражение cron и сохраняю в кварце.
Например, пользователь в PST отправляет запрос на работу сегодня (3 ноября 2017 г.) следующим образом.
{
"start": "2017-11-03T18:00:00-07:00",
"dayOfMonth" : 15
}
Здесь пользователь хочет запланировать задание, которое запускается 15 числа каждого месяца в 18:00, начиная с 03.11.2017. так что кварц первого дня загорится 15.11.2017. Вот как приведенный выше запрос преобразуется в выражение cron 0 0 18 15 * ? *
, что является правильным. Вот как выглядит таблица QRTZ_CRON_TRIGGERS.
Как вы заметили, time_zone_id сохраняется как GMT-07: 00, но после перехода на летнее время 5 ноября это должно быть GMT-08: 00. иначе моя кварцевая работа сработает на час раньше. Фактически, когда я запрашиваю nextFireTime, я получаю 1510794000000, что действительно является средой, 15 ноября 2017 г., 17:00:00 (pm) в часовом поясе Америка / Лос-Анджелес (PST) < / сильный>
как мы справляемся с этой проблемой time_zone_id?
P.S: Я использую cronTrigger, который не имеет понятия preserveHourOfDayAcrossDaylightSavings
, предоставляемого CalendarIntervalTrigger
.