Warum hat ein dekodiertes Datum aus Firebase in Swift einen kleinen Millisekundenversatz?IOS

Programmierung für iOS
Anonymous
 Warum hat ein dekodiertes Datum aus Firebase in Swift einen kleinen Millisekundenversatz?

Post by Anonymous »

Ich rufe ein in Firebase gespeichertes Datum (Firestore- oder Storage-Metadaten) ab und dekodiere es in Swift, aber mir ist aufgefallen, dass der resultierende Wert nicht genau meinen Erwartungen entspricht.

Code: Select all

// The date is created for midnight (00:00) and has been created from
// the Firebase Database web interface
let query = db.collection("myCollection")
.whereField("myDate", isEqualTo: Timestamp(date: myDate)
// I need to add a isGreaterThanOrEqualTo & isLessThan filter with a 1sec threshold to fetch the midnight date.

// When I query it (adding a time threshold filter) and convert it to a Date, it has nanoseconds
query.snapshots().map { snapshot in
if let document = snapshot.documents.first {
let date = try document.data(as: Date.self)
}
}
Das von mir erwartete Datum entspricht beispielsweise:

Code: Select all

2025-10-12 22:00:00 +0000
timeIntervalSinceReferenceDate: 781999200
Wenn ich jedoch das Datum in Swift abrufe (mit einem anderen Filter) und dekodiere, erhalte ich etwas wie:

Code: Select all

2025-10-12 22:00:00 +0000
timeIntervalSinceReferenceDate: 781999200.1029999
Es gibt immer einen winzigen Millisekundenunterschied (etwa 0,1 Sekunden) zwischen dem gespeicherten und dem dekodierten Wert und macht es unmöglich, dieses Datum aus der Datenbank abzurufen.
Hinweise:
  • Ich habe die Firebase-Konsole verwendet, um das Datum mithilfe ihrer Kalenderkomponente festzulegen.
  • Die Datum wird in Firebase als Zeitstempel-Typ gespeichert.
  • Ich dekodiere es mit Date in Swift (über Codable oder manuelle Dekodierung).
  • Es scheint keine Zeitzonenkonvertierung beteiligt zu sein – beide Seiten sind UTC.
  • Ich verwende Firebase Timestamp, um das Dokument anzufordern
Warum erscheint dieser kleine Gleitkomma-Versatz, wenn ein Firebase-Zeitstempel in ein Swift-Datum dekodiert wird?
Liegt es an Präzisionsverlust, Unterschieden im Codierungsformat oder an etwas in der Art und Weise, wie Firebase Zeitstempel serialisiert?
Und – gibt es eine empfohlene Methode, um sicherzustellen, dass das dekodierte Datum genau mit dem ursprünglichen Zeitstempel übereinstimmt (ohne diese 0,1 Sekunden). Offset)?

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post