Форум программистов, компьютерный форум CyberForum.ru

Выборка по датам в SQLite - Android

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.70
igrok-vip
0 / 0 / 3
Регистрация: 22.04.2013
Сообщений: 116
26.05.2013, 13:59     Выборка по датам в SQLite #1
Много страниц прочитал по этому вопросу, но мнения людей расходятся. Кто-то говорит что даты лучше хранить в формате String, кто-то, что в Integer.

В общем у меня задача: сохранять текущую дату в базу (при том чтобы выборка по дате происходила как можно быстрее), считать строки таблицы где дата из определённого месяца, определённого года.

Как я понял текущую дату можно узнать с помощью календаря в миллисекундах. В таком же виде можно её и сохранить в базу в формате Integer(при том это самый быстрый для поиска вариант).

Но не могу понять как тогда делать выборку по месяцам?
Как построить запрос, если у меня в базе хранятся миллисекунды, а на входе запроса дата вида (YYYY-MM)?

По ссылке http://www.sqlite.org/cvstrac/wiki?p...dTimeFunctions функции переводят строку в дату, следовательно нужно как-то перевести содержимое integer'овской колонки с миллисекундами в дату возможностями самой SQLite? Или таки хранить всё в String для возможности сравнения?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.05.2013, 13:59     Выборка по датам в SQLite
Посмотрите здесь:

Android SQLite и умножения
Android SQLite
Android Sqlite выборка по маске
Выборка с базы данных SQLite Android
Android Выборка данных за последние 24 часа SQLite
Категории в SQLite Android
Android SQLite
SQLite Android
Android Работа с SQLite
Android SQLite
Android SQLite и выборка по условию
Android SQLite

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.05.2013, 14:27     Выборка по датам в SQLite #2
ну так по этой ссылке же все написано даже с примерами...
igrok-vip
0 / 0 / 3
Регистрация: 22.04.2013
Сообщений: 116
26.05.2013, 21:54  [ТС]     Выборка по датам в SQLite #3
Точно, не дочитал до конца) SELECT datetime(1092941466, 'unixepoch', 'localtime'); это подходит.
Только не совсем понимаю зачем нужно это 'localtime', нужно ли использовать 'localtime' если при внесении записи в базу я узнаю время в миллисекундах так: Calendar.getInstance().getTimeInMillis();?

Добавлено через 7 часов 6 минут
И ещё вопрос, как перевести 13ти-значное число (считанное из базы 10ти-значное умноженное на 1000) содержащее миллисекунды в год, месяц, день?

Пытаюсь запихать их в календарь
Calendar c = Calendar.getInstance();
c.setTimeInMillis(1111111111111);

А потом из него вытаскивать
int year = c.get(Calendar.YEAR);
int day = c.get(Calendar.DAY_OF_MONTH);
int mon = c.get(Calendar.MONTH);

Ругается на длину числа 1111111111111. А если текущее время в миллисекундах Calendar.getInstance().getTimeInMillis(); (которых тоже 13 цифр) запихать в переменную long, то проблем нет.
V0v1k
1157 / 981 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
26.05.2013, 22:10     Выборка по датам в SQLite #4
Java
1
c.setTimeInMillis(1111111111111L);
igrok-vip
0 / 0 / 3
Регистрация: 22.04.2013
Сообщений: 116
26.05.2013, 23:13  [ТС]     Выборка по датам в SQLite #5
Спасибо, теперь всё работает.
Последний вопрос: Если число 1365120000 средствами sqlite перевести в дату, то получится 2013-04-05 00:00:00, затем загрузить это число умноженное на 1000 в календарь и считать отдельно год, месяц, день, час, минуты, секунды, то всё совпадает.
Но если потом из этого календаря взять миллисекунды и разделить на 1000, то получается уже 1365163200 т.е. 2013-04-05 12:00:00. Откуда взялись ещё 12 часов и как их убрать?
Yandex
Объявления
26.05.2013, 23:13     Выборка по датам в SQLite
Ответ Создать тему
Опции темы

Текущее время: 08:06. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru