Все даты, которые я ввожу в свою базу данных Firestore, получают + 1 час. (Google Firestore и проблема с датой) - PullRequest
0 голосов
/ 17 января 2020

Почему Firebase добавляет один час к значению при добавлении к временной метке?

У меня есть скрипт python, который помещает некоторые значения в коллекцию в базе данных Firestore. Данные включают метку времени. (См. python код здесь:)

def insertIntoFirebase(yrRow):

    #myDate = dateutil.parser.parse(yrRow.fromDate) 
    myDate = datetime.strptime(yrRow.fromDate, '%Y-%m-%dT%H:%M:%S')
    print("Tiden " + str(myDate))
    doc_ref = db.collection('yrData').document(str(yrRow.index))
    doc_ref.set({'index':yrRow.index ,"timeText": yrRow.fromDate,'time': myDate, 
   'temperature':yrRow.temperature})

В этом методе я поместил некоторые значения в коллекцию FireStore YrData. Посмотрите на пару KeyValue время и времяText

При поиске в базе данных Firestore значение для пары ключ-значение время равно 2020-01-16T23: 00: 00, ведь ведь правильная дата и время Я хочу сохранить в базе данных. Это хранится в виде строки в базе данных пожарного магазина. Проблема в том, что ключ-значение timeText хранится в виде временной метки Firebase. (См. Скриншот)

При поиске в Firestore пары ключей / значений время значение не соответствует тому, что я поместил в базу данных. Это моя ценность + 1 час. (См. Скриншот)

При получении дат из документов Firestore в Swift к метке времени добавляется также один час. : (

Сервер, на котором запущен скрипт python, мой компьютер, на котором запущен браузер, и мой MacBook, на котором запущен код swift, имеют одинаковый часовой пояс.

Редактировать: исправлены некоторые ошибки и добавлены последние параграф о часовом поясе

enter image description here

Ответы [ 2 ]

1 голос
/ 17 января 2020

Ваш код форматирует timeText в соответствии с часовым поясом, настроенным на машине, которая форматирует дату (возможно, UT C?). Консоль Firestore форматирует временные метки в соответствии с часовым поясом машины, на которой запущен браузер (UTC + 1). Это, очевидно, разные часовые пояса, отличающиеся друг от друга на 1 час. Это распространенное недоразумение - оно часто встречается при переполнении стека.

Обратите внимание, что объект Timestamp не содержит никакой информации о часовом поясе. Это просто смещение от unix времени эпохи. Чтобы отформатировать удобочитаемое время из него, необходимо предположить часовой пояс, в котором вы сталкиваетесь с очевидными различиями во времени.

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

Я нашел ошибку. Python действительно не волнует, в каком часовом поясе вы находитесь, и вообще имеете "странную" реализацию часового пояса. Чтобы решить эту проблему, я должен был python знать о желаемом часовом поясе. (Даже если он установлен на сервере, на котором выполняется скрипт). Код ниже исправляет мою проблему.

    myDate = datetime.strptime(yrRow.fromDate, '%Y-%m-%dT%H:%M:%S')
    tz = pytz.timezone('Europe/Oslo')
    aware_datetime = tz.localize(myDate
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...