Domanda

Mi piacerebbe avere il giorno, il mese e l'anno di valori per salvare nel db.Questi sono i miei codici:

Declaretions:

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;

Codice 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);  

        }
    };
}

Cerco di memorizzare mMonth, mYear e mDay valori in db.Qual è il miglior tipo di negozio?as integer o string??

È stato utile?

Soluzione

Memorizzare nel DB un numero che rappresenta la data.È il numero di secondi trascorsi dall'inizio dell'era moderna (1 gennaio 1970.) Dalla Data Selettore, è possibile ottenere i M D Y i valori di simile a questo:

        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;

Quindi, mi rivolgo in una singola Data, oggetto come questo.

                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

        }
    };

prima ho messo nel DB, ho trasformarlo in un numero di secondi come questo:

secondi = data.getTime() / 1000;// questa è la data in secondi dall'inizio dell'epoca

....

quando prendo la singola numero di secondi dei DB, e vuole essere una Data oggetto nuovo, faccio questo:

data = new Date(secondi * 1000);// convertire secondi per una Data oggetto

È possibile utilizzare un DateFormat oggetto per visualizzare la data in oggetto, come vedi.

So che questo è scomodo.Dal momento che SQLite non consentono di memorizzare una Data, la risposta sta per essere difficile.Forse c'è un modo più pulito di questo, e gli altri vi raccomando qualcosa.:)

Altri suggerimenti

Ho lottato con questo problema per un po '.Non ho konw di niente di meglio di questo.

Ho memorizzato la data nel DB come un singolo int lungo.È piuttosto facile convertire la tua data al numero di secondi dall'epoca (1 gennaio 1970), ed è anche facile convertire il numero di secondi in un oggetto data.

È necessario fare attenzione con secondi e millisecondi.

Data= nuova data (secondi * 1000);// Conversione di secondi in una data

secondi= data.gettime () / 1000;// Questa è la data in pochi secondi dall'inizio dell'epoca

// Utilizzare Greg Calendar per ottenere un oggetto data di giorno, mese, anno

Dateofgames= New GregorianCalendar (anno, mese, giorno) .gettime ();

Aiuta affatto?

Ho creato la tabella SQLite con questa stringa SQL:

create table items (id INTEGER PRIMARY KEY AUTOINCREMENT, pdate DATE)
.

Ho scritto alcuni metodi per convertire la 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();       
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top