Почему декодированная дата из Firebase имеет небольшое смещение в миллисекундах в Swift?IOS

Программируем под IOS
Ответить
Anonymous
 Почему декодированная дата из Firebase имеет небольшое смещение в миллисекундах в Swift?

Сообщение Anonymous »

Я получаю дату, хранящуюся в Firebase (метаданные Firestore или Storage), и декодирую ее в Swift, но заметил, что полученное значение не совсем то, что я ожидал.

Код: Выделить всё

// 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)
}
}
Например, ожидаемая дата соответствует:

Код: Выделить всё

2025-10-12 22:00:00 +0000
timeIntervalSinceReferenceDate: 781999200
Однако, когда я извлекаю (используя другой фильтр) и декодирую дату в Swift, я получаю что-то вроде:

Код: Выделить всё

2025-10-12 22:00:00 +0000
timeIntervalSinceReferenceDate: 781999200.1029999
Между сохраненным и декодированным значением всегда существует небольшая разница в миллисекундах (около 0,1 секунды), поэтому получить эту дату из базы данных невозможно.
Примечания:
  • Я использовал консоль Firebase, чтобы установить дату с помощью их календарного компонента.
  • Дата хранится в Firebase как тип Timestamp.
  • Я декодирую его с помощью Date в Swift (через Codable или ручное декодирование).
  • Похоже, что преобразование часового пояса не требуется — обе стороны указаны в формате UTC.
  • Я использую Firebase Timestamp для запроса документа
Почему при декодировании временной метки Firebase в Swift Date появляется это небольшое смещение с плавающей запятой?
Это связано с потерей точности, различиями в формате кодирования или чем-то в том, как Firebase сериализует временные метки?
И существует ли рекомендуемый способ гарантировать, что декодированная дата точно соответствует исходной временной метке (без этих 0,1 с) смещение)?

Подробнее здесь: https://stackoverflow.com/questions/797 ... t-in-swift
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «IOS»