Java Quartz-Scheduler in TimeZone

8

Mein Server läuft auf der Zeitzone Europa / Rom - und dieser ist der Standard tz auf dem Server -, ich muss Jobs nach der Zeitzone des Benutzers planen, also wenn ein Benutzer Er lebt in der Zeitzone Pacific / Honolulu und plant einen CronTrigger, der jeden Tag um 22.00 Uhr für seine Region der Erde feuert. Ich habe diese Lösung gefunden:

%Vor%

Auf meinem Server beginnt dieser um 09:00 Uhr des "nächsten" Tages .

Es gibt besondere Probleme, die berücksichtigt werden müssen, um die Zeitzone zu aktualisieren (zB Zeitzonen-Updater-Tool )?

Wenn ich die .startAt () und .endAt () für den vorherigen Job definieren möchte, ist diese Art von Datum in Ordnung? Eine mögliche Sommerzeit ist mit diesem Verfahren sicher?

%Vor%

oder ich muss einfach starten und beenden mit:

%Vor%

Dann startet / endet der Job korrekt in "Pacific / Honolulu" definierten Tagen?

Vielen Dank im Voraus für jeden Vorschlag

    
Cristian Porta 11.01.2013, 07:55
quelle

2 Antworten

9

Ich denke, ich fand die Lösung, getestet und es funktioniert, bis das Gegenteil bewiesen;)

Nachfüllen Mein Server läuft in einer bestimmten Zeitzone (d. H. Europa / Rom)

Wenn ein Benutzer in Pacific / Honolulu TZ einen Job planen möchte, der am Sonntag beginnt, endet der 27. Januar 2013 um 15:00 Uhr und endet am Donnerstag, den 31. Januar 2013 um 21:00 Uhr. Dieser feuert jeden Tag alle fünf Minuten ab 2 : 00 PM bis 10:55 PM (0 0/5 14-22 * *?) Der richtige Weg ist der folgende:

  • legen Sie die Benutzerzeitzone in der Methode inTimeZone für den CronScheduleBuilder
  • fest
  • passen Sie die Startzeit und die EndAt-Daten an die Serverzeit an, indem Sie von Pacific / Honolulu nach Europe / Rome
  • konvertieren

Beispielcode:

%Vor%

Dienstprogramm zum Konvertieren von Daten basierend auf tz:

%Vor%

== BEGINN UPDATE 2012-01-24 ==

Quartz Based Utility zum Konvertieren von Daten basierend auf tz mithilfe von DateBuilder :

%Vor%

== END OF UPDATE 2012-01-24 ==

Also auf meinem Europa / Rom Quartz Server ist dieser Job ab dem 28. Januar 02:00:00 MEZ 2013 bis Freitag 01. Februar 08:00:00 MEZ 2013 geplant und feuert alle fünf Minuten jeden Tag ab 01:00 Uhr bis 08:55 Uhr

Wenn Sie Ihre Daten für Start- und Endzeiten erstellen, geben Sie auch die Zeitzone (in der Zeichenfolge java.util.Calendar oder dem Datumsformat oder org.quartz.DateBuilder) an, bevor Sie das Datum instanziieren. Dann speichert Quarz das Datum als Millisekunden seit dem 1. Januar 1970 in UTC in dieser bestimmten Zeitzone - und wenn sich die Zeitzone des Servers ändert, wird der Auslöser nicht beeinflusst.

    
Cristian Porta 16.01.2013, 08:22
quelle
1

Das Datum enthält keine TZ-Daten und die Sommerzeit ist eigentlich eine eigene TZ (EST ist die Osterzeit, EDT ist die Ost Sommerzeit). Das einzige, was ein Problem sein kann, ist, dass einige Orte, wie Phoenix Arizona, DST nicht erkennen. Jedes Mal, wenn Sie TZ-Daten erhalten möchten, ist Kalender der richtige Weg.

    
CodeChimp 11.01.2013 13:52
quelle