我正在使用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表之前将其变为正确的格式?
提前致谢。
答案 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>)
。而且,您当然可以使用Date
从Calendar
获得getTime()
,然后使用SimpleDateFormat
格式化,等等。