使用SQLite时Android DatePicker“0”的问题

时间:2010-11-24 21:44:19

标签: java android sqlite datepicker

我正在使用android + SQLite和DatePicker Widget。

对于我的SQLite插入命令,DatePicker没有正确格式化。即,如果所选日期的月份或日期小于10,则不会插入0。例如,如果我选择日期“2010年1月1日”,则月份和日期的格式为1和1.这与通常的YYYY-MM-DD SQL格式冲突。

我试图通过将它们转换为字符串并通过执行以下操作为o添加前缀来将0变为小于10的整数:

 // the callback received when the user "sets" the date in the dialog
private DatePickerDialog.OnDateSetListener mDateSetListener =
        new DatePickerDialog.OnDateSetListener() {

            public void onDateSet(DatePicker view, int year, 
                                  int monthOfYear, int dayOfMonth) {
                if(monthOfYear < 10)
                {
                    String mm = Integer.toString(monthOfYear);
                    String m = "0" + mm;
                    mMonth = Integer.parseInt(m);
                }
                else{mMonth = monthOfYear;}


                if (dayOfMonth <10)
                {
                    String dd = Integer.toString(dayOfMonth);
                    String d = "0" + dd;
                    dayOfMonth = Integer.parseInt(d);
                }
                else{mDay = dayOfMonth;}

                mYear = year;

                updateDisplay();
            }
        };


 // updates the date in the TextView
private void updateDisplay() {
    mDateDisplay.setText(
        new StringBuilder()
                // Month is 0 based so add 1
                .append(mYear).append("-")
                .append(mMonth + 1).append("-")
                .append(mDay).append("")
                );

    selecteddate = (String) mDateDisplay.getText();

}

我原本希望将2010-1-1转换为2010-01-01。它不是。有没有人有更简单的方法这样做,以便我可以在将日期发送到sqlite表之前将其变为正确的格式?

提前致谢。

2 个答案:

答案 0 :(得分:5)

您可以使用更短的代码执行相同的操作。

new StringBuilder()
            // Month is 0 based so add 1
            .append(mYear).append("-")
            .append(mMonth<10?"0"+(mMonth+1):mMonth + 1).append("-")
            .append(mDay<10?"0"+mDay:mDay).append("")

否则我认为你无能为力。

答案 1 :(得分:3)

SQLite没有日期/时间数据类型(http://www.sqlite.org/datatype3.html),因此在这种情况下,“YYYY-MM-DD的常用SQL格式”并不常见。

有几个日期时间函数(http://www.sqlite.org/lang_datefunc.html)但您可以在大多数情况下通过在日期/时间列上使用INTEGER数据类型并存储时期戳({{3} })。

DatePicker会返回年/月/日的单独值,而月份则为零索引。这是因为它打算与Calendar一起使用(尽管可能是邪恶的)。因此,使用INTEGER列以及类似的内容,您可以存储和检索日期/时间:

Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, datePicker.getYear());
cal.set(Calendar.MONTH, datePicker.getMonth());
cal.set(Calendar.DAY_OF_MONTH, datePicker.getDayOfMonth());
long datePubStamp = cal.getTimeInMillis();

然后将datePubStamp存储在INTEGER列中。

要恢复Calendar,请使用Calendar.setTimeInMillis(<value_from_integer_db_column>)。而且,您当然可以使用DateCalendar获得getTime(),然后使用SimpleDateFormat格式化,等等。