Swift - Обработка временной метки Firebase - PullRequest
1 голос
/ 26 января 2020

Я работаю над проектом Firebase, у меня есть поле Timestamp в Collection, которое выглядит под изображением

Скриншот Firebase

Когда я читаю эту метку времени из Индийский часовой пояс , я получаю строку даты как Солнце 26 января 2020 года 12:00 AM

Но когда я читаю ее из Па go Па go - часовой пояс Американского Самоа (GMT-11) , я получаю строку даты как Сб 25 января 2020 г. 07:30

Я использую код ниже

    let formatter = DateFormatter()
    formatter.dateFormat = "EEE MMM dd, yyyy hh:mm a"
    let coll = Firestore.firestore().collection("Collection1")
    coll.getDocuments { (snap, error) in
        for doc in snap!.documents {
            let date = doc["createdOn"] as! Timestamp
            print(formatter.string(from: date.dateValue()))
        }
    }

В базе данных я настроил это поле даты как Солнце 26 января 2020 года в 12:00 UT C +5: 30.

Мой вопрос не зависит от часового пояса, я хочу, чтобы результат строки даты был вс 26 января 2020 , как мне этого добиться

1 Ответ

0 голосов
/ 26 января 2020

В метках времени Firestore отсутствует ощущение местного часового пояса. В консоли Firebase вы видите временную метку, интерпретированную в часовом поясе, настроенном на локальном компьютере. Он будет выглядеть по-разному при просмотре из разных часовых поясов, но момент времени, представленный отметкой времени, всегда остается неизменным. Внутренне, временные метки используют UT C. Из документации API :

Метка времени представляет собой момент времени, независимый от любого часового пояса или календаря, представленный в виде секунд и долей секунд с наносекундным разрешением в UT C. Время эпохи. Он закодирован с использованием григорианского календаря Prolepti c, который расширяет григорианский календарь до первого года. Он кодируется в предположении, что все минуты имеют длину 60 секунд, то есть високосные секунды «размазаны», поэтому для интерпретации не требуется таблица високосных секунд. Диапазон значений от 0001-01-01T00: 00: 00Z до 9999-12-31T23: 59: 59.999999999Z. Ограничивая этот диапазон, мы гарантируем, что мы можем конвертировать в и из строк даты RF C 3339.

Если вы хотите отформатировать время в соответствии с указанным c местным часовым поясом, вы придется использовать какую-то библиотеку, чтобы помочь вам в этом. Сам объект временной метки не будет соответствовать вашим потребностям форматирования местного времени.

...