Gründe für das Zurückspringen der iOS-Systemzeit auf einem iPad, während es offline ist

Mein Team und ich sind auf einen Fehler gestoßen, der wahrscheinlich dadurch verursacht wird, dass die iOS-Systemzeit nicht monoton inkrementiert, sondern rückwärts springt. Die gemessene Zeitdifferenz betrug etwa -50 Millisekunden. (Das ist offensichtlich kein Problem mit Schaltsekunden oder Zeitzonen.)

Wir verstehen, dass iOS-Geräte ihre Zeit mit NTP-Servern synchronisieren, während sie online sind. Der negative Zeitunterschied wurde jedoch beobachtet, während überhaupt keine Netzwerkverbindung vorhanden war.

Gibt es Gründe, warum iOS die Systemzeit offline aktualisieren würde?

Relevante Beiträge:

  • Wir werden diesen Ansatz sicherlich für die Messung der verstrichenen Zeit verfolgen müssen . Aber trotzdem möchten wir verstehen, was den Sprung verursacht hat.

  • Diese Antwort nennt Gründe für solche Zeitsprünge, aber keiner davon scheint in meinem Fall zuzutreffen.

  • Diese Antwort erwähnt signifikante Zeitänderungen . Aber was sind unbedeutende Änderungen?

Nachtrag:System.DateTime.Now Nach 2 Stunden im Flugmodus beobachteten wir auf einem iPad Mini 2 einen Zeitsprung von 637 ms in die Vergangenheit , bei CACurrentMediaTimestetig steigender Monotonie. Es ist immer noch unklar, warum iOS nach so langer Zeit ohne NTP-Updates einen so deutlichen Sprung machen sollte.

Meinen Sie damit, dass es pausiert und stottert, sodass es hinterherhinkt, oder glauben Sie, dass Sie es zweimal in denselben Momenten messen?

Antworten (1)

Die RTC-Uhr wird regelmäßig "angepasst", um ihre Zeit zu korrigieren (z. B. um Uhrdrift zu berücksichtigen) - dies geschieht unabhängig davon, ob Sie online oder offline sind. Dies ist Standard bei modernen Betriebssystemen, nicht nur bei iOS.

Der Fehler liegt nicht in Ihrem Betriebssystem, sondern in Ihrer App. Wenn Sie eine monoton ansteigende Uhr wünschen, sollten Sie System.DateTime.Now nicht verwenden.

Um die richtige Timer-/Uhrfunktion für Ihre App auszuwählen, müssen Sie festlegen, wofür Sie die Zeit verwenden möchten – und dann entsprechend auswählen. Das heißt, es ist ein ganz anderes Bedürfnis, dem Benutzer die aktuelle Zeit in einer "Uhr-App" anzuzeigen, als Zeit zu benötigen, um einen Timer laufen zu lassen, der alle 50 ms in einem Spiel periodisch ausgelöst wird.