2012-03-02 5 views
1

Я использую следующий код. Когда я нажимаю editText, он показывает календарь и устанавливает дату.Неправильная дата установки в android

  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 но когда я поставил их здесь в дт, дт сохраняет mYear в 3079 не 2012. Пожалуйста, скажите мне, как могу ли я исправить эту дату проблему

Best Regards

ответ

1

Я удивлен, что это дает вам 3079, а не 3912, который является то, что я ожидал, учитывая то, как Date.setYear документирована:

Устанавливает год этого объекта Date как заданное значение плюс 1900. Этот объект даты изменяется так, что он представляет собой момент времени в течение указанного года, а месяц, дата, час, минута и секунда так же, как и раньше , как интерпретируется в локальном часовом поясе. (Конечно, если дата была 29 февраля, например, и год установлен на непиковый год, то новая дата будет обрабатываться так, как если бы она была 1 марта).

Обратите внимание, что это устаревший метод - вы действительно не должны его использовать.

Используйте для расчета календаря Calendar, а затем найдите подходящий момент времени, позвонив по телефону calendar.getTime(). Вы можете построить java.sql.Date.

(В идеале, вы бы использовать Joda Time вместо этого, но это может быть слишком большой зависимостью для вас в Android приложение.)

+0

я извиняюсь, это дает 3912 :) я не помню: D –

Смежные вопросы