Wie man damit umgeht, wenn die Zeitzone in der Zukunft zurückgeht

8

Ich erzeuge zwei Sätze sich wiederholender Ereignisse in separaten Schleifeniterationen, habe aber einen Konflikt, wenn ich die generierten Ergebnisse für Konflikte vergleiche. Dies scheint zu sein, wenn die Zeiten rückwärts gehen und ich unsicher bin, wie ich das lösen soll?

Das erste Wiederholungsereignis wird:

  • Wiederholen Sie jeden Tag um 00:00 Uhr bis 01:00 Uhr in der Zeit "Europa / Stockholm"
  • vom 03/11/2015
  • Schleife für immer.

Das zweite Wiederholungsereignis wird:

  • Wiederholen Sie jeden Tag um 01:00 Uhr bis 02:00 Uhr in der Zeit "Europa / Stockholm"
  • vom 03/11/2015
  • wieder für immer Schleifen.

Um die Ereignisse zu generieren, gehe ich jeden Tag in der lokalen Zeitzone "Europe / Stockholm" mit Nodatime durch:

%Vor%

Mein Problem tritt am 29./30. Oktober 2016 auf Wenn die Uhren rückwärts laufen und die zweite Regel mit der ersten in Konflikt steht. ​​Ссылка

Die Konfliktzeiten sind wie folgt:

  • "2016-10-29T23: 00: 00Z" bis "2016-10-30T01: 00: 00Z"
  • "2016-10-30T00: 00: 00Z" bis "2016-10-30T01: 00: 00Z"

Ich verwende einen Algorithmus wie diesen, um auf Konflikte zu testen Ссылка

Wie soll ich mit diesen zeitversetzten Konflikten umgehen?

    
Dizzle 03.11.2015, 15:25
quelle

1 Antwort

2

Obwohl es wirklich helfen würde, wenn Sie die Frage klären, werde ich jetzt ein paar Annahmen machen. Ich kann die Frage später bei Bedarf bearbeiten.

Was Sie wahrscheinlich tun möchten, ist ungefähr so:

%Vor%

Die SchedulingResolver -Implementierung ist hier und ist nur erforderlich, wenn Sie die 1.x-Version von Noda verwenden Zeit. Wenn Sie 2.x verwenden, können Sie stattdessen InZoneLeniently(tz) verwenden, da sich das Verhalten des toleranten Resolvers in 2.x geändert hat (siehe "Änderungen des toleranten Resolvers" in 2.x Migrationshandbuch ).

Die wichtigsten Punkte sind:

  • ZonedDateTime wird oft am besten als Vermittler verwendet.

    • Sie haben tägliche Ereignisse, die auf dem lokalen Tag basieren, also ist LocalDate geeigneter.

    • Wenn Sie Ereignisse basierend auf einer festen 24-Stunden-Rotation (alias der UTC-Tag) hatten, wäre Instant geeigneter.

  • Resolver werden verwendet, um mehrdeutige oder ungültige LocalDateTime -Werte zurück zu bestimmten Zeitpunkten zu mappen. Der Resolver, den ich für die Planung empfehle, ist der, der:

    • Erhöht sich durch den DST-Bias (normalerweise 1 Stunde), wenn die Uhren vorwärts gehen (Frühling)
    • Wählt die erste Instanz, wenn die Uhren zurückgehen (fallen)

Wie Jon schon erwähnt hat - Ihre Bedürfnisse können variieren, und wir können wirklich nicht antworten, was Sie tun sollten . Es gibt in der Tat Geschäfte, die andere Resolver-Regeln als die, die ich empfehle, benötigen.

    
Matt Johnson 03.11.2015, 18:33
quelle