Java 使用SQLite时Android日期选择器“0”的问题
我正在使用android+SQLite和DatePicker小部件 日期选择器的格式不适合我的SQLite insert命令。即,如果所选日期的月份或天数小于10,则不会插入0。例如,如果选择日期2010年1月1日,则月份和日期的格式为1和1。这与通常的SQL格式YYYY-MM-DD冲突 当0小于10时,我尝试通过将其转换为字符串并通过执行以下操作作为o的前缀,将0连接到整数中:Java 使用SQLite时Android日期选择器“0”的问题,java,android,sqlite,datepicker,Java,Android,Sqlite,Datepicker,我正在使用android+SQLite和DatePicker小部件 日期选择器的格式不适合我的SQLite insert命令。即,如果所选日期的月份或天数小于10,则不会插入0。例如,如果选择日期2010年1月1日,则月份和日期的格式为1和1。这与通常的SQL格式YYYY-MM-DD冲突 当0小于10时,我尝试通过将其转换为字符串并通过执行以下操作作为o的前缀,将0连接到整数中: // the callback received when the user "sets" the date in
// 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表之前将其转换为正确的格式
提前感谢。您可以使用更短的代码来完成相同的任务
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("")
否则,我认为没有什么可以做的。SQLite没有日期/时间数据类型,因此通常的SQL格式YYYY-MM-DD在本例中并不常见 有几个日期时间函数,但大多数情况下,您可以通过在日期/时间列上使用整数数据类型并存储历元戳来避免这些函数 DatePicker为年/月/月的天返回单独的值,月为零索引。这是因为它的目的是与日历一样邪恶的可能。因此,使用整数列和类似的内容,您可以存储和检索日期/时间:
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存储在整数列中
要还原日历,只需使用Calendar.setTimeInMillis。当然,您可以使用getTime从日历中获取日期,然后使用SimpleDateFormat等进行格式化。嗨,Charlie,这个解决方案实际上比上面那位好伙伴发布的解决方案看起来要好。我要学习这个代码,我有点理解它。我可以问一下,对于像我这样来自C的入门级java程序员,你会推荐哪本书。提前谢谢你,我希望你能给我一些好的指导!嘿,布鲁克斯。我认为从长远来看,你会发现时间戳方法比来回格式化、三元运算符和所有这些jazz更容易使用,至少我是这样做的。至于书,谢谢你的提问我现在正在和几位smart的合作者一起实践Android,这在Manning的网站上很早就可以访问,我认为这很好,但还处于早期阶段,而且它不是真正的介绍。我认为市场实际上缺少Java和Android书籍的良好开端,但对于Android书籍而言,Mark Murphy的Commonware内容非常棒。感谢Collin的投入,我想我会继续和我目前正在阅读的两本书一起努力,在24小时内学会sams java,希望在我完成这些书的时候,你已经发布了你的新作品,我准备开始了!谢谢,很好用。但是为什么我们需要新的StringBuilder??