Firebase EnDat () не работает со строкой даты?

#android #firebase #firebase-realtime-database

#Android #firebase #firebase-база данных в реальном времени

Вопрос:

Здесь довольно простой вопрос

Моя сохраненная строка даты выглядит следующим образом в Firebase DB

 23-Oct-2016 07:00:11 AM
  

Теперь я запускаю этот запрос, я получаю все данные, начиная с этой даты

    Query query = mDatabase.orderByChild("time").startAt("23-Oct-2016")
  

Теперь я также хочу фильтровать по текущему времени утра / вечера. Я пытаюсь выполнить запрос, подобный этому, но это не влияет на результаты.

В принципе, он не должен возвращать какой-либо объект, если текущее время — PM, я не знаю, почему это не работает.

    Query query = mDatabase.orderByChild("time").startAt("23-Oct-2016").endAt("PM");
  

Ответ №1:

Хранение дат и времени в виде читаемых строк, как вы, похоже, делаете, гарантированно доставит вам немало хлопот. Строки упорядочены лексикографически, в то время как обычно требуется обрабатывать даты в хронологическом порядке. Два порядка не всегда совпадают.

Лучший способ сохранить дату / время для запроса — это простая временная метка: количество миллисекунд, прошедших с эпохи UNIX.

Если вы настаиваете на сохранении дат и времени в виде более удобочитаемой строки, вам лучше сохранить их в удобочитаемом формате, который будет отсортирован одинаково как в лексикографическом, так и в хронологическом порядке, например, в форматах ISO 8601: 20161023T150422 . Это текущее время, когда я набираю это: 23 октября 2016, 15: 04 UTC.

Комментарии:

1. Что я сделал неправильно, так это то, что я рассматривал startAt () и EnDat () как префикс строки и конец строки для сравнения. Я новичок в firebase, теперь я понял, что это диапазон. Таким образом, в основном передача только PM мне ничего не даст, поскольку это неправильный диапазон. Мне нужно фильтровать данные каждые 12 часов. Я надеюсь, вы поняли мою точку зрения.

2. Структура, которую я описал выше, позволяет фильтровать данные на основе многих диапазонов дат / времени.