Meine Service-API nimmt startDate für Quarzjob und Tag des Monats für die Ausführung des Jobs auf. Intern konvertiere ich dies in Cron-Ausdruck und speichere in Quarz.Wie man Benutzer Zeitzone für die Sommerzeit in Quarz für Cron Trigger behandelt?
Zum Beispiel sendet ein Benutzer in PST heute (3. November 2017) eine Jobanfrage wie folgt.
{
"start": "2017-11-03T18:00:00-07:00",
"dayOfMonth" : 15
}
Hier möchte der Benutzer einen Job planen, der am 15. eines jeden Monats um 18:00 Uhr beginnt, beginnend am 2017-11-03. So wird der erste Tag Quarz wird 2017-11-15 Feuer werden. So wird die obige Anfrage in den Cron-Ausdruck 0 0 18 15 * ? *
konvertiert, der korrekt ist. So sieht die Tabelle QRTZ_CRON_TRIGGERS aus.
Wie Sie sehen, ist time_zone_id als GMT-07 gespeichert: 00, aber einmal vom Nov Kick-in Sommer 5, muss es GMT-08: 00. oder sonst wird mein Quarz-Job eine Stunde früher feuern. In der Tat, wenn ich für Abfrage nextFireTime, ich 1510794000000 bekommen, welche Mittwoch in der Tat ist 15. November 2017 17.00.00 (pm) in der Zeitzone America/Los Angeles (PST)
wie wir es tun Behandle dieses time_zone_id-Problem?
S.S: Ich benutze CronTrigger, die nicht den Begriff preserveHourOfDayAcrossDaylightSavings
hat, der von CalendarIntervalTrigger
zur Verfügung gestellt wird.