1

我想获取保存到数据库的日、月和年值。这些是我的代码:

声明:

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 值存储在 db 中。最好的商店类型是什么?作为整数还是作为字符串??

4

3 回答 3

0

我用这个 sql 字符串创建了 sqllite 表:

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();       
}
于 2012-08-02T11:54:10.920 回答
0

我在这个问题上挣扎了一段时间。我不知道有什么比这更好的了。

我将日期作为单个 long int 存储在数据库中。将您的 Date 转换为自纪元(1970 年 1 月 1 日)以来的秒数非常容易,也很容易将秒数转换为 Date 对象。

您需要注意秒和毫秒。

日期 = 新日期(秒 * 1000);// 将秒转换为日期

秒 = date.getTime() / 1000; // 这是自纪元开始以来的日期(以秒为单位)

// 使用 Greg 日历从日、月、年获取 Date 对象

日期 dateOfGames = new GregorianCalendar(year, month, day).getTime();

这些帮助有用?

于 2012-07-25T18:01:04.920 回答
0

我在数据库中存储一个代表日期的数字。它是自现代时代开始(1970 年 1 月 1 日)以来经过的秒数。从日期选择器中,您可以像这样获得 MDY 值:

        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;

然后,我将它们变成像这样的单个 Date 对象。

                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

        }
    };

在我把它放入数据库之前,我把它变成了这样的秒数:

长秒 = date.getTime() / 1000; // 这是自纪元开始以来的日期(以秒为单位)

……

当我从数据库中取出那几秒钟,并希望它再次成为 Date 对象时,我这样做:

日期 = 新日期(秒 * 1000);// 将秒转换为 Date 对象

您可以使用 DateFormat 对象以您喜欢的方式显示日期对象。

我知道这很尴尬。由于 SQLite 不允许您存储日期,因此答案会很尴尬。也许有比这更干净的方法,其他人会推荐一些东西。:)

于 2012-07-26T17:45:18.543 回答