2015-02-24 1 views
0

..и позже получить и показать их как строки?Как сохранить текущую дату и время локали в SQLite

Я прошу пользователя ввести какой-либо ввод, и я хочу сохранить как дату (т. Е. День, месяц и год), так и время (т. Е. Час дня), этот вход был отправлен. Затем каждая запись сохраняется в моей базе данных SQlite, а затем извлекается из RecyclerView.

Я столкнулся с двумя проблемами, по крайней мере. Прямо сейчас я создал два поля TEXT в базе данных, FIELD_DATE и FIELD_TIME, где я хотел бы хранить строковое представление даты & времени в формате в зависимости от локали пользователя Android.

Из того, что я прочитал, android.text.format.DateFormat должен мне помочь. Поэтому я:

java.text.DateFormat dateFormat = DateFormat.getMediumDateFormat(getActivity()); 
java.text.DateFormat timeFormat = DateFormat.getTimeFormat(getActivity()); 

Теперь я думаю, что я должен вызвать format(Date d) на обоих объектах, чтобы получить мои строки, но я не знаю, где я могу получить этот Date объект - даже не знаю, если мои две строки верный. Итак:

  • Как получить строковое представление текущего времени даты &, на основе определенного пользователя (на OS уровня) локала?

Сказанное (спрошено), интересно, действительно ли то, что я ищу, два поля для даты &. Как сказал, в конце я хотел бы показать RecyclerView, читая базу данных. В том, что я также необходимо отфильтровать записи по дате, т.е.

Записи со ссылкой на последнюю неделю // последний месяц // Все записи

Так я и спрашиваю:

  • Это шаблон с двумя текстовыми полями, правильный выбор для хранения даты & времени, учитывая необходимость легко отфильтровывать записи, принадлежащие, скажем, на прошлой неделе? Должен ли я иметь отдельные столбцы для дня, месяца и года?

  • Как запросить базу данных, чтобы иметь только строки прошлой недели, учитывая структуру FIELD_DATE/FIELD_TIME (или любую другую лучшую структуру, которую вы можете предложить)?

Я совершенно застрял в этих трех вопросах.


Edit: наконец-то придумали, как получить строки, которые я хотел сначала, это было так же просто, как создание нового Date объекта:

Date d = new Date(); 
String date = DateFormat.getMediumDateFormat(getActivity()).format(d); 
String time = DateFormat.getTimeFormat(getActivity()).format(d); 

Теперь у меня есть и потребности в отобразить эти строки (что довольно просто, поскольку они уже отформатированы) и применить некоторый фильтр к db, например записи, принадлежащие прошлой неделе (что, в свою очередь, будет довольно простым с текущим временем в миллисекундах с 1970 года). Что делать?

+0

Я хранящий его в виде строки в моем текущем проекте – Apurva

ответ

1

Если вы хотите иметь возможность запускать сложные запросы, такие как найти все записи с прошлой недели, я бы рекомендовал вместо этого сохранить метку времени в целое число. Временная метка выражается как число миллисекунд со времен Эпохи (1 января 1970 г.). Это позволяет легко создавать запросы на точные диапазоны дат и времени. Временная метка легко найти, например. System.currentTimeMillis().

Другой подход заключается в использовании встроенного типа даты sqlite, но я бы лично выбрал подход с меткой времени. Есть ли причина, по которой вы хотели бы сохранить ее в текущем формате локали? Если вы показываете дату для пользователя, вы, вероятно, лучше форматируете метку времени в дату, когда она отображается, используя одну из многих функций даты Java и андроида, таких как java.util.Calendar, java.util.Date, android .text.SimpleDateFormat и т.д.

в качестве примера, вы можете запустить этот код, чтобы получить временную метку в начале этого месяца:

Calendar now = Calendar.getInstance(); 

now.set(Calendar.DAY_OF_MONTH, 1); 
now.set(Calendar.HOUR_OF_DAY, 0); 
now.set(Calendar.MINUTE, 0); 
now.set(Calendar.SECOND, 0); 

long startOfThisMonth = now.getTimeInMillis();  
+0

Just отредактировал мой вопрос. Я был доволен этими строками, потому что мне нужно показать их пользователю. Я вижу, как я могу хранить 'TimeInMillis' и запрашивать db. Но, учитывая этот «длинный», как я мог впоследствии форматировать его в строковое, основанное на языковой форме, читаемое человеком представление? Я пропустил этот простой шаг. – natario

+0

Гораздо лучше хранить их как временные метки и преобразовывать их в читаемые человеком в то время, когда они отображаются. Существует множество бесплатных утилит для преобразования миллисов в специфичные для локали строки строки, например http://developer.android.com/reference/java/text/SimpleDateFormat.html, которые имеют метод форматирования с датой, а Date имеет конструктор, принимающий milis , Если вы продолжаете использовать строки в своей базе данных, вам будет очень сложно делать осмысленные запросы. – JHH

+0

Я постараюсь как можно скорее. Между тем, как вы думаете, было бы бесполезно хранить обе строки (чтобы показать) и миллисекундное время (для запроса db)? – natario