Как получить день, месяц и год от DatePickerDialog?
-
11-12-2019 - |
Вопрос
Я хотел бы получить день, месяц и год для сохранения до БД.Это мои коды:
Деклары:
private TextView tv_purchase_date;
private Button mPickDate;
private int mYear;
private int mMonth;
private int mDay;
OnClickListener listener_show_dlg = null;
OnDateSetListener listener_mdate_display = null;
.
Код события:
listener_show_dlg = new OnClickListener() {
public void onClick(View v) {
Calendar cal=Calendar.getInstance();
DatePickerDialog datePickDlg = new DatePickerDialog(
ItemsAddActivity.this,
listener_mdate_display,
cal.get(Calendar.YEAR),
cal.get(Calendar.MONTH),
cal.get(Calendar.DAY_OF_MONTH)
);
datePickDlg.show();
};
};
listener_mdate_display = new OnDateSetListener() {
public void onDateSet(DatePicker view, int year, int monthOfYear,
int dayOfMonth) {
mMonth = month;
mYear = year;
mDay = dayofMonth;
tv_purchase_date.setText(dayOfMonth + "/" + monthOfYear + "/" + year);
}
};
}
.
Я пытаюсь хранить значения MMONth, Myear и MDay в БД.Какой самый лучший тип магазина?как целое число или как строка ??
Решение
i Храните в одном номере db, который представляет дату. Это количество секунд, которые прошли с начала современной эпохи (1 января 1970 года.) С учета даты вы можете получить значения M D Y, как это:
datePickerListener = new DatePickerDialog.OnDateSetListener() {
public void onDateSet(DatePicker view, int yearOfYear,
int monthOfYear, int dayOfMonth) {
// the user has picked these values
year = yearOfYear;
month = monthOfYear;
day = dayOfMonth;
.
Затем я превращаю их в единый объект дата.
Calendar cal = new GregorianCalendar(year, month, day);
Date dateOfGames = cal.getTime();
DateFormat df = DateFormat.getDateInstance(DateFormat.LONG);
String cs = df.format(dateOfGames);
changeDateButton.setText(cs); // update the interface
}
};
.
Прежде чем положить его в БД, я включаю его в нуме, как это, как это:
длинные секунды= дата адресаты () / 1000; // Это дата в считанные секунды с начала эпохи
....
Когда я беру этот единственный номер секунд из БД, и хочу, чтобы он снова был объектом даты, я делаю это:
Дата= Новая дата (секунды * 1000); // Преобразование секунд до объекта даты
Вы можете использовать объект DateFormat, чтобы отобразить объект даты, как вы любите его видеть.
Я знаю, что это неловко. Поскольку SQLite не позволяет вам хранить дату, ответ будет неловко. Возможно, есть более чистый способ, чем это, а другие будут что-то рекомендуют. :)
Другие советы
Я боролся с этой проблемой некоторое время.Я не знаю ничего лучше этого.
Я сохранил дату в БД как один длинный int.Довольно легко преобразовать вашу дату в количестве секунд после эпохи (1 января 1970), а также легко преобразовать количество секунд в объект даты.
Вы должны быть осторожны с секундами и миллисекунами.
Дата= Новая дата (секунды * 1000);// Преобразование секунд до даты
секунды= дата адресаты () / 1000;// Это дата в считанные секунды с начала эпохи
// Используй календарь Грега, чтобы получить объект даты с дня, месяц, год
Дата DateOfGames= новый Gregoriancalendar (год, месяц, день) .gettime ();
Это поможет вообще?
Я создал таблицу sqllite с этой строкой SQL:
create table items (id INTEGER PRIMARY KEY AUTOINCREMENT, pdate DATE)
.
Я написал некоторые методы для преобразования даты:
public String date_to_str(Date date) {
String pattern = "dd.MM.yyyy";
SimpleDateFormat dateFormat = new SimpleDateFormat(pattern);
Log.d(_watcher_name, "date_to_str" + dateFormat.format(date));
return dateFormat.format(date);
}
public Date mdy_to_date (int day, int month, int year) {
Calendar cal = new GregorianCalendar(year, month, day);
return cal.getTime();
}
.