cronexpression-parsing in java Datum
- meiner Datenbank mit (10 18 16 ? * So,MO,MI,FR *) cron-Ausdruck, wie Sie dann konvertieren in java Datum.
- wie der Vergleich mit der heutigen Zeit.
- und eine weitere ist, wie zu vergleichen, um cron-Ausdrücke, d.h. (10 18 16 ? * So,MO,MI,FR *) und (0 30 9 30 * ?)
- bitte erklären Beispielcode mit quartz oder spring scheduling.
InformationsquelleAutor user3599212 | 2014-05-23
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie bitte:
...und dann schlage ich vor, verwenden Sie Joda DateTime für Datum Vergleich.
Frühjahr Implementierung von cron actionally fehlt eine Funktion - 'Tag' und 'Tag-der-Woche" - Felder werden mit UND verknüpft-Logik, nicht durch ODER in der cron.
ich glaube nicht, dass tat-das ist ein Nachteil... können Sie ganz einfach simulieren "ODER"-ed-Ausdrücke durch die Bereitstellung von 2-expression. UND Sie haben den Vorteil, dass Sie ausführen können, z.B. "jeden 2. Dienstag im..."
InformationsquelleAutor Matt
Schrieb ich eine kleine Klasse für die Handhabung von cron-Ausdrücken, die Sie hier finden:
https://github.com/frode-carlsen/cron
Basierend auf Joda-time, sollte aber ziemlich einfach sein, Anschluss zu Java8 Zeit-api. Dies macht es auch möglich, die Einbettung in unit-tests, tun, Simulationen etc anpassen der DateTime-offset in Joda-time.
Es hat auch ziemlich gute test coverage (war getan, als TDD-Kata).
Update
Unterstützt jetzt java 8 Zeit-api, die Dank einem Beitrag von github Benutzer https://github.com/zemiak. In beiden Fällen wird der Ausdruck parser ist eine einzige, winzige Klasse, die kann einfach kopiert werden, in ein eigenes Projekt.
Nein, es ist nur eine einzelne Klasse nur je nach joda-time, also ich habe nicht die Mühe gemacht. Fühlen Sie sich frei, um eine Gabel oder kopieren
Hey, sehr cool. Ich habe deinen code ersetzen cron-utils, die davon abhängen, Guave, ein über 2MB monster jar in mein Projekt: github.com/actframework/actframework/blob/master/src/main/java/...
Scheint Guave Abhängigkeit ist nicht mehr erforderlich, per cron-utils. Release 5.0.0 setzt auf JDK8 und nicht mehr braucht, Guave noch jodatime.
InformationsquelleAutor f.carlsen
Möchten Sie vielleicht einen Blick in die org.Quarz.CronExpression Klasse in der Quarz-API.
Bitte beachten Sie, dass Sie sich nicht einfach vergleichen, einen cron-Ausdruck ein Datum, weil der cron-Ausdruck (in der Regel) stellt eine Folge von verschiedenen Terminen. In jedem Fall können Sie die folgenden Methoden hilfreich sein:
Als für den Vergleich von zwei cron-Ausdrücken, was möchten Sie vergleichen? Das einzige, was IMO Sinn macht, zu vergleichen sind die nächsten "trigger" Daten, d.h. Daten, gewonnen aus getNextValidTimeAfter([einige Referenz-Datum]) - Aufrufe.
Wir möchten, zu konvertieren, cron, java Datum. Was ist der Methode zu erreichen?
Sie können in der Regel nicht konvertieren Sie einen cron-Ausdruck, um ein einzelnes Date-Instanz, weil Sie einen cron-Ausdruck in der Regel stellt eine Reihe von Daten. Erhalten Sie das das Datum der Serie, ich denke, man kann immer wieder rufen Sie die getNextValidTimeAfter(Date) - Methode, und verwenden Sie die zurückgegebenen Werte als input-Wert für den nächsten Aufruf. Zur Beantwortung Ihrer früheren Frage, Quarz-API nicht verwenden, Joda-Time, es java verwendet.util-Datum/Kalender-APIs.
InformationsquelleAutor Jan Moravec
Vielleicht können Sie prüfen, cron-utils
Es hat einige utils um nächsten/vorherigen Ausführung bestimmten Datum, BSP.: nun. Funktioniert mit JodaTime, aber konnte Sie abrufen eine JavaDate von dort.
Die Bibliothek ist scheduler Agnostiker: Sie haben eine Zeichenkette mit einem cron-Ausdruck.
Ist kompatibel mit JDK6.
Guave-Abhängigkeit ein Thema war. Seit der version 5.0.0 werden Sie entfernt es durch die Migration zu JDK8. Jetzt hat sich die Bibliothek noch weniger Abhängigkeiten, da Sie auch losgeworden off jodatime durch den Einsatz neuer Java-Unterstützung für Zeit.
hört sich gut an. Aber es sind nun gesperrt Java8. Ich am Ende mit der Verwendung dieser Einzel-Datei-parser: github.com/frode-carlsen/cron/blob/master/src/main/java/fc/cron/...
Sicher, ist eine option:), Schließlich haben Sie zu binden, müssen einige JDK.
Vielen Dank für diese Anregung. Ich brauchte joda-time-Unterstützung in den core-utils. Daher wähle ich die 4.1.3-version. Funktioniert, wie erwartet.
InformationsquelleAutor kekec