Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用SQLite时Android日期选择器“0”的问题_Java_Android_Sqlite_Datepicker - Fatal编程技术网

Java 使用SQLite时Android日期选择器“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

我正在使用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 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??