Вывод определенных строк из базы данных SQL с использованием формата даты - PullRequest
0 голосов
/ 30 марта 2012

Я пишу приложение, в котором пользователи вводят некоторые данные в базу данных SQLite.Мне нужно написать код, с помощью которого выводятся последние 31 день сохраненных данных в базе данных.

Код для сохранения строки даты: currentDateString = DateFormat.getDateInstance (). Format (new Date ());

Это дает дату в формате (для текущей даты) как 30 марта 2012 года.

Есть ли способ изменить этот формат данных на ДД / ММ / ГГГГ?(30/03/2012)

Эта строка сохраняется в базе данных SQL следующим образом:

ContentValues ​​dbcv = new ContentValues ​​();dbcv.put (KEY_DATE, date);

(currentDateTime String = Дата в предыдущем классе)

Я хочу вывести каждую строку базы данных за последние 31 день.

Как я могу это сделать?

Спасибо!

1 Ответ

1 голос
/ 30 марта 2012

Прежде всего, вы задаете два вопроса вместо одного, я постараюсь дать вам ответ на оба.

  1. Чтобы изменить формат даты в java, посмотрите документациюдля SimpleDateFormat вы можете передать шаблон конструктору этого класса, чтобы он отформатировал ваши даты так, как вам действительно нужно.В вашем конкретном случае шаблон, который вы ищете: dd/MM/yyyy
  2. Если вы храните даты в своей базе данных в виде строк, вы теряете некоторые преимущества, связанные с сохранением дат.Например, ваш второй вопрос будет легко выполнен, если вы храните даты вместо строк в ваших таблицах, поскольку единственное, что вам нужно для достижения того, чего вы хотите, - это выполнить операцию select с вашей таблицей, используя функции даты, предоставляемые SQLLite.,Посмотрите на эту веб-страницу, так как она даст вам представление о том, что вы можете делать с этими функциями: Функции даты SQLLite

Примечание : Конечно, если вы все еще хотите сохранить их как строки, единственное решение, которое у вас будет, - это прочитать все записи, проанализировать все строки до даты и использовать класс java.util.Calendar, чтобы проверить, какая запись старше 31 дня, а какая нет.,Я бы предпочел вместо этого выполнять SQL-запрос, поскольку он имеет слишком высокую производительность (особенно на мобильном устройстве).

EDIT :

SQLLite и Androidне говоря уже о моих сильных сторонах, я провел небольшое исследование и нашел несколько постов, в которых люди фактически хранили их как строки, как вы изначально начали делать.Если SQLLite на Android не поддерживает сохранение дат в том виде, в каком они есть (как это делают другие базы данных), возможно, лучшим вариантом в вашем сценарии является использование значения long в качестве даты.Посмотрите на класс определения Date, у него есть метод getTime, который возвращает значение даты как длинное значение, вы можете использовать это значение позже, чтобы создать новый экземпляр даты (используя его конструктор).

Чтобы отформатировать эту дату (конечно, объект Date) во что-то читаемое пользователем, DateFormat (или любая из его реализаций) все еще остается ответом.

сделайте запрос, который вы хотите выполнить, сохранив даты как длинные. Я предлагаю вам взглянуть на класс DateUtils из библиотеки Apache Commons Lang .В этом классе вы найдете несколько функций, которые работают с датами, поэтому перед созданием запроса вам нужно извлечь строки за последние 31 даты, вы можете использовать что-то вроде:

Date now = new Date();
Date before = DateUtils.addDays(now, -31);
long beforeAsLong = before.getTime();
String query = "select * from TABLE_NAME where DATE_FIELD >= " + beforeAsLong;

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...