Вопрос

Я хотел бы получить день, месяц и год для сохранения до БД.Это мои коды:

Деклары:

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();       
}
.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top