2013-08-03 5 views
2

У меня есть 3 строки, содержащие значения дня, месяца и года. Например:Android установлен DatePicker на определенную дату

String mday = "02"; 
String mmonth="07"; 
String myear="2013"; 

Мне нужно установить DatePicker в своей деятельности на месяц с даты, указанной выше. Я не имею в виду просто добавить 1 к миллионному значению ... в случае 31-го дня я получаю недопустимую дату. Так что мне нужно каким-то образом увеличить дату (действительный путь) и установить DatePicker с его значением. Я знаю, что установка Datepicker со значениями Int делается так:

DatePicker datepicker = (DatePicker) findViewById(R.id.datePicker1); 
datepicker.init(iYear, iMonth, iDay, null); 
// where iYear,iMonth and iDay are integers 

Но как я могу получить целые значения: день, месяц и год увеличивающегося DATE на один месяц?

Итак, между первыми значениями (строками) и конечными значениями инкрементной даты (целые числа), какие шаги я должен выполнить?

Предполагаю, что мне нужно будет использовать Календарь. Так что мой код должен выглядеть следующим образом:

Integer iYear, iMonth, iDay = 0; 
String mday = "02"; 
String mmonth="07"; 
String myear="2013"; 

Calendar cal = Calendar.getInstance(); 
cal.set(Integer.parseInt(myear), Integer.parseInt(mmonth), Integer.parseInt(mday)); 
cal.add(Calendar.MONTH, 1); 
// here I should get the values from cal inside the iYear, iMonth, iDay, but I do not seem to succeed. 

DatePicker datepicker = (DatePicker) findViewById(R.id.datePicker1); 
datepicker.init(iYear, iMonth, iDay, null); 

если я:

datepicker.init(cal.YEAR, cal.MONTH, cal.DATE, null); 

затем сбой приложения. Что мне делать? Как установить это значение в месяц на дату DatePicker?

UPDATE Я изменил мой тестовый код для этого:

Calendar cal = Calendar.getInstance(); 
    cal.set(2013, 05, 23); 
    cal.add(Calendar.MONTH, 1); 

    int xxday = cal.get(Calendar.DATE); 
    int xxmonth = cal.get(Calendar.MONTH); 
    int xxyear = cal.get(Calendar.YEAR); 

    datepicker.init(xxyear, xxmonth, xxday, null); 

но теперь Datepicker устанавливается в один месяц с настоящего момента вместо одного месяца с даты разыскиваемого Таким образом, вместо (2013-06- 23) У меня (2013-09-23). Я предполагаю, что это из-за

int xxmonth = cal.get(Calendar.MONTH); 

Как я могу получить реальный месяц из Календаря cal; ?

+0

что является StackTrace авиакатастрофы? Я предполагаю nullpointer –

+0

Если я это сделаю: 'Calendar cal = Calendar.getInstance(); cal.set (2013, 07, 23); cal.add (Calendar.MONTH, 1); int xxday = cal.get (Calendar.DATE); int xxmonth = cal.get (Календарь.МЕСЯЦ); int xxyear = cal.get (Calendar.YEAR); datepicker.init (xxyear, xxmonth, xxday, null); 'then My datepicker установлен в 23 сентября 2019 года. Вместо 23.08.2013. Я предполагаю, что это потому, что я получаю доступ к Calendar.MONTH, который установлен на сегодняшний день?!?!? – user1137313

+0

FATAL Исключение: main (исключение исключаемого аргумента - ток должен быть> = начало и <= конец). Это для предыдущего кода. Как я уже сказал в своем комментарии выше, я нашел способ установить его на другую дату, но не мою пользовательскую дату ... поэтому я не получаю больше ошибок, у меня просто нет даты, которую я хочу – user1137313

ответ

2

Календарный месяц основан на 0. Так что месяц 07 - август.

+0

Поэтому я могу в основном сделать это: 'cal.add (Calendar.MONTH-1, 1);'? Это безопасно? – user1137313

+0

Я вижу, что если я сделаю вышеуказанный код, он будет работать ... но если моя первоначальная дата - 31 января 2013 года, то моя последняя дата в DatePicker - Mar.03.2013. Итак, я предполагаю, что добавление месяца к календарной дате добавит к нему 31 день? Это нормально? – user1137313

1

Используйте следующий код для инициализации календаря объекта, если у вас есть выбор даты:

Calendar calendar = new GregorianCalendar(datePicker.getYear(), 
           datePicker.getMonth(), 
           datePicker.getDayOfMonth()); 

Else жесткого код финиковые части в конструкторе

5

DatePicker класс имеет метод updateDate(year, month, dayOfMonth) который вы можете использовать, чтобы установить дату в вашем DatePicker, как показано ниже:

DatePicker datePicker = (DatePicker) findViewById(R.id.datePicker1); 
datePicker.updateDate(2016, 5, 22); 
+0

kamran .. спасибо :) – usetej2

0

использовать эту Tuto создать свой DatePickerDi ALOG затем использовать этот код в DatePickerDialog https://developer.android.com/guide/topics/ui/dialogs.html

@Override 
public Dialog onCreateDialog(Bundle savedInstanceState) { 
    String mday = "02"; 
    String mmonth="07"; 
    String myear="2013"; 
    //convert them to int 
    int mDay=Integer.valueOf(mday); 
    int mMonth=Integer.valueOf(mmonth); 
    int mYear=Integer.valueOf(myear); 

    return new DatePickerDialog(getActivity(), new DatePickerDialog.OnDateSetListener() { 
     @Override 
     public void onDateSet(DatePicker datePicker, int i, int i1, int i2) { 
      String d=convertToCompletDate(i2,i1,i); 
      mListener.onDatePicked(d); 

     } 
    },mYear,mMonth,mDay); 
} 
Смежные вопросы