#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. Структура, которую я описал выше, позволяет фильтровать данные на основе многих диапазонов дат / времени.