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??

Foi útil?

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();       
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top