Wenn Sie nicht sehr besorgt über Drift sind, und davon ausgehen, dass die Maschinen nicht nur die Zeit zufällig ändern, dann könnten Sie einen NTP-Server anpingen, um zu sehen, wie viel Zeit die IT denkt und vergleichen Sie das mit der Zeit lokale Maschine denkt, dass es ist, dann berechnen Sie das Differential und schließlich planen Sie Ihre Aufgabe in Ortszeit.
So sagen Sie zum Beispiel, dass der NTP-Server sagt, dass es 12:30 ist, aber Ihr lokaler Computer sagt, dass es 12:25 ist. Und Sie möchten, dass Ihre Aufgabe um 13:00 Uhr NTP-Zeit abläuft.
So, 12:25 - 12:30 = -0: 05. 13:00 + (-0: 05) = 12:55, deshalb planst du deine Aufgabe für 12:55.
Addenda -
ich auf die Naivität einer Implementierung kann nicht sprechen, ich bin nicht vertraut genug mit dem Protokoll.
Am Ende kommt es darauf an, welches Maß an praktischer Genauigkeit für Sie akzeptabel ist. NTP wird verwendet, um die Zeit zwischen Systemen zu synchronisieren. Eines der Probleme, die es löst, besteht darin, ständig aufgerufen zu werden, es verhindert das Kriechen der Uhr. Wenn Sie die "NTP Ping, planen mit Offset" -Technik verwenden, und sagen, dass zukünftige Zeit vielleicht 8 Stunden in der Zukunft ist, gibt es eine sehr reale Möglichkeit des Uhrkriechens, das heißt, obwohl Sie wollten, dass die Aufgabe bei " 12:55 ", wenn 12:55 herumläuft, könnte es vom ursprünglichen NTP-Server abweichen, da die Uhren nicht synchronisiert wurden (und überhaupt nicht), und der Job wurde nicht auf eine virtuelle Neusynchronisierung umgestellt.
Je länger der Zeitraum zwischen dem ursprünglichen Zeitplan und der tatsächlichen Ausführung ist, desto größer ist das Potenzial für die Drift. Dies ist ein Artefakt, egal wie gut der ursprüngliche NTP-Ping ist. Wenn Sie nicht planen, diese Aufgaben neu zu planen, da sie der Ausführungszeit nahe kommen, um die Abweichung auszugleichen, dann sind die Chancen einer "vernünftigen" Implementierung von NTP angemessen.
Es gibt die Apache Commons NET-Bibliothek, die einen NTP-Client hat. Einige beschweren sich, dass es System.currentTimeMillis() verwendet, das unter Windows Probleme mit der Auflösung (10-15ms) hatte. System.nanoTime behebt dies, und Sie können die Bibliothek leicht ändern, um sie zu verwenden und sie neu zu erstellen.
Ich kann nicht sprechen, wie es die "Naivität" der Implementierung widerspiegelt. Aber am Ende kommt es darauf an, wie nahe es ist, die beiden Maschinen und ihre Jobs (virtuell) synchron zu halten.
Ja, aber der oberste Treffer scheint seit 2004 nicht aktualisiert worden zu sein. Hier ist eine ähnliche StackOverflow-Frage: [Java NTP client] (http://stackoverflow.com/questions/925191/java-ntp-client) –