Como obter dia, mês e ano do DatePickerDialog?
-
11-12-2019 - |
Pergunta
Gostaria de obter valores de dia, mês e ano para salvar no banco de dados.Estes são meus códigos:
Declarações:
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;
Código do Evento:
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);
}
};
}
Tento armazenar valores mMonth, mYear e mDay em db.Qual é o melhor tipo de loja?como inteiro ou como string??
Solução
Armazeno no banco de dados um número que representa a data.É o número de segundos que se passaram desde o início da era moderna (1º de janeiro de 1970). No Seletor de data, você pode obter os valores M D Y como estes:
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;
Então, eu os transformo em um único objeto Date como este.
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
}
};
antes de colocá-lo no banco de dados, eu o transformo em alguns segundos assim:
segundos longos = date.getTime()/1000;// esta é a data em segundos desde o início da época
....
quando retiro esse único número de segundos do banco de dados e quero que ele seja um objeto Date novamente, faço o seguinte:
data = nova Data(segundos * 1000);// convertendo segundos em um objeto Date
Você pode usar um objeto DateFormat para exibir o objeto de data como você gostaria de vê-lo.
Eu sei que isso é estranho.Como o SQLite não permite armazenar uma data, a resposta será estranha.Talvez exista uma maneira mais limpa do que esta, e outros recomendarão algo.:)
Outras dicas
Lutei com esse problema por um tempo.Não conheço nada melhor que isso.
Armazenei a data no banco de dados como um único int longo.É muito fácil converter sua data no número de segundos desde a época (1º de janeiro de 1970) e também é fácil converter o número de segundos em um objeto Date.
Você precisa ter cuidado com segundos e milissegundos.
data = nova Data(segundos * 1000);// convertendo segundos em uma data
segundos = date.getTime()/1000;// esta é a data em segundos desde o início da época
// Use o calendário Greg para obter um objeto Date de dia, mês, ano
Data dateOfGames = new GregorianCalendar(ano, mês, dia).getTime();
Isso ajuda em alguma coisa?
Criei uma tabela SQLlite com esta string SQL:
create table items (id INTEGER PRIMARY KEY AUTOINCREMENT, pdate DATE)
Escrevi alguns métodos para converter data:
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();
}