在android中设置时日期不正确

时间:2012-03-02 06:22:59

标签: java android eclipse

我正在使用以下代码。当我按下editText时,它会显示一个日历并设置日期。

          private DatePickerDialog.OnDateSetListener mDateSetListener =
            new DatePickerDialog.OnDateSetListener() {

               public void onDateSet(DatePicker view, int year, 
                                     int monthOfYear, int dayOfMonth) {
                   mYear = year;
                   mMonth = monthOfYear;
                   mDay = dayOfMonth;
                   updateDisplay();
               }
           };

           private void updateDisplay() 
           {
            int cmpYear ;
            int cmpMonth ;
            int cmpDay;

            final Calendar c = Calendar.getInstance();
               cmpYear = c.get(Calendar.YEAR);
               cmpMonth = c.get(Calendar.MONTH);
               cmpDay = c.get(Calendar.DAY_OF_MONTH);

                if (cmpMonth == mMonth && cmpYear == mYear && cmpDay == mDay)   
                date.setText("Today");
            else if (cmpMonth == mMonth && cmpYear == mYear && cmpDay == (mDay - 1))
                date.setText("Yesterday");
            else
            {
                date.setText(
                        new StringBuilder()
                           // Month is 0 based so add 1
                           .append(mDay).append("-")
                           .append(mMonth + 1).append("-")
                           .append(mYear).append(" "));
            }

                java.util.Date today = new java.util.Date();
               long t = today.getTime();
               java.sql.Date dt = new java.sql.Date(t);

               dt.setYear(mYear);
               dt.setMonth(mMonth);
               dt.setDate(mDay);

               transaction.transactionDateTime =   dt;
            }

//这里是问题,mYear,mMonth,mDay显示正确的值1,3,2012但是当我在dt中设置它们时,dt将mYear保存为3079而不是2012。 请告诉我如何解决这个日期问题

最好的注意事项

1 个答案:

答案 0 :(得分:1)

我很惊讶它给你3079而不是3912,这是我所期望的,因为记录了Date.setYear

  

将此Date对象的年份设置为指定值加上1900.修改此Date对象,使其表示指定年份内的某个时间点,其中月,日,时,分和秒相同和以前一样,在当地时区解释。 (当然,如果日期是2月29日,并且年份设置为非闰年,则新日期将被视为3月1日。)

请注意,这是一个已弃用的方法 - 您确实不应该使用它。

使用Calendar进行日历计算,然后致电calendar.getTime()找到合适的时刻。您可以从中构建java.sql.Date

(理想情况下,您会使用Joda Time代替,但在Android应用中,这对您来说可能过于依赖。)