как добавить количество дней к дате, указанной в jtextfield со строковым типом данных

Добрый день . Я просто хочу спросить о добавлении дней в заданную дату. У меня есть jtexfield (txtStart) и другое jtexfield (txtExpiry). Мне нужно отобразить в txtExpiry дату через 102 дня после даты в txtStart. Я использую событие KEYRELEASED. после ввода в txtStart дата с дополнительными 102 днями появится в txtExpiry.

вот мой код, но он все еще ошибочен.

private void txtStartKeyReleased(java.awt.event.KeyEvent evt) {
// TODO add your handling code here:
    // set calendar to 1 Jan 2007
    int a = Integer.parseInt(txtStart.getText());     
    Calendar calendar = new GregorianCalendar(a,a,a);

     calendar.add(Calendar.DAY_OF_MONTH,102);
     PrintCalendar(calendar);
  }

   private void PrintCalendar(Calendar calendar){
        // define output format and print
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-mm-dd");         
        String date = sdf.format(calendar.getTime());
        long add = Date.parse(date);
        txtExpiry.setText(add);  -----> this part here also has an error.
     }

мой код по-прежнему не будет генерировать дату в txtExpiry. заранее спасибо

Вот правильный код после получения помощи:

 private void txtStartKeyReleased(java.awt.event.KeyEvent evt) {
       try {    

        Date date1;
        date1 = new SimpleDateFormat("yyyy-MM-dd").parse(txtStart.getText());
        System.out.println(date1);

        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");     
        Calendar cal  = Calendar.getInstance();
                      cal.setTime(date1);
                        cal.add(Calendar.DATE, 102);
                        String expDateString = sdf.format(cal.getTime());
                        txtExpiry.setText(expDateString);
     }catch (ParseException ex) {
      Logger.getLogger(ClientInfo.class.getName()).log(Level.SEVERE, null, ex);
     } 
}  

person zairahCS    schedule 13.03.2012    source источник
comment
Какая ошибка вылетает? Разве метод setText не принимает только параметр String? Похоже, ты долго тянешь.   -  person bsimic    schedule 13.03.2012
comment
ошибка ---› метод setText не может быть применен к данным типам данных. что я должен использовать? мне нужно, чтобы вывод был помещен в txtExpiry   -  person zairahCS    schedule 13.03.2012
comment
Вы должны просто взять свою переменную даты (которая является строкой) и передать ее в свой txtExpiry.setText (дата).   -  person bsimic    schedule 13.03.2012


Ответы (3)


Использовать

yyyy-MM-dd

Примечание: Capital MM

См. : SimpleDateFormat

Теперь, когда у вас есть экземпляр даты, вы можете использовать Calendar для арифметики дней.

Calendar cal = Calendar.getInstance();
cal.setTime(parsedDate);
cal.add(Calendar.DATE, 102);
String expDateString = dateFormatter.format(cal.getTime());
person jmj    schedule 13.03.2012
comment
int a = Integer.parseInt(txtStart.getText()); Календарный календарь = новый григорианский календарь (а, а, а); эта часть здесь, я думаю, тоже неверна. потому что я просто получаю значение даты из txtStart. как я могу извлечь дату здесь и использовать ее в календаре? - person zairahCS; 13.03.2012
comment
Я предполагаю, что у вас есть дата в форме строки в jTextField, например: 1987-12-24, теперь вы можете использовать SimpleDateFormat, чтобы получить строку до Date и Date до Calendar - person jmj; 13.03.2012

Получив правильный формат, вы можете используйте JodaTime. Вы можете проанализировать значение String напрямую, используя JodaTime, но, поскольку вы уже это сделали, я не стал беспокоиться...

Date date = ...;
DateTime dt = new DateTime(date);
dt = dt.plusDays(102);
date = dt.toDate();
person MadProgrammer    schedule 24.01.2015

person    schedule
comment
Это не отвечает на вопрос ОП, и, кроме того, нет необходимости писать столько кода только для вычисления даты на N дней вперед. Пожалуйста, проверьте принятый ответ. - person UditS; 21.02.2016