2015-03-16 3 views
0

У меня есть программа для кемпинга, которая имеет диалоговое окно, в котором пользователь вводит дату, которую они должны проверить, и дату, которую они планируют проверить в текстовое поле. Как только они нажимают ok в диалоговом окне, даты, которые они вводят, должны быть доступны для просмотра в JTable. В настоящее время в столбце даты я получаю java.utl.GregorianCalendar [время .... и т. Д.], Когда пользователь нажимает ok. Другая информация, такая как имя, дни пребывания и номер сайта, выглядит нормально. Очевидно, что это неправильное форматирование даты, но я не уверен, как это исправить. Вот код для григорианского календаря в классе DialogCheckInTent:Java-григорианское форматирование календаря

public GregorianCalendar getDateIn(){ 
    DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); 
    GregorianCalendar g = new GregorianCalendar(); 
    try{Date date = df.parse(dateIn.getText()); 
    g.setTime(date); 
    } 
    catch (ParseException ex) { 
      ex.printStackTrace(); 
     } 
    return g; 
} 

public GregorianCalendar getCheckOutDate(){ 
    DateFormat df = new SimpleDateFormat("MM/dd/yyyy"); 
    GregorianCalendar g = new GregorianCalendar(); 
    try{Date date = df.parse(checkOutTxt.getText()); 
    g.setTime(date); 
    } 
    catch (ParseException ex) { 
      ex.printStackTrace(); 
     } 
    return g; 
} 

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

if (pressed == checkInTentItem) { 
     newTent.clear(); 
     newTent.setVisible(true); 
     if (model.getRowCount() < 5) { 
      if (newTent.isOk()) { 
       String nameReserving = newTent.getNameReserve(); 
       GregorianCalendar checkIn = newTent.getDateIn(); 
       int daysStaying = newTent.getDaysStaying(); 
       GregorianCalendar checkOutOn = newTent.getCheckOutDate(); 
       int siteNumber = newTent.getSiteNumber(); 
       int tenters = newTent.getTenters(); 
       Tent tent = new Tent(nameReserving, checkIn, daysStaying, 
         checkOutOn, siteNumber, tenters); 
       model.add(tent); 
      } 

     } 
     else { 
      JOptionPane.showMessageDialog(frame, "All sites are full.", 
        " ", JOptionPane.INFORMATION_MESSAGE); 
     } 
    } 

Все скомпилировано без проблем, но дата просто не работает. Как это исправить?

ответ

3
DateFormat df = new SimpleDateFormat("mm/dd/yyyy"); 

формат неверен

месяцев представлены с M, поэтому изменить его MM/dd/yyyy

также не уверен, что это тип pressed и checkInTentItem для следующего условия

if (pressed == checkInTentItem) { 
+0

общественного недействительными actionPerformed (ActionEvent EVT) { \t \t Объект нажата = evt.getSource(); – TABmayfield

+0

Я изменил форматирование на MM, но все равно получаю ту же ошибку. – TABmayfield

+0

Объект не должен проверяться на равенство '==', используйте 'equals()' с правильной реализацией метода 'equals()' –

0

java.time

Answer by Joshi является правильным, и его следует принять.

Современное решение использует класс LocalDate. Этот класс является частью классов java.time, которые теперь вытесняют неприятные старые классы времени, такие как GregorianCalendar, Date и SimpleDateFormat.

Проанализируйте ваш ввод как LocalDate.

DateTimeFormatter f = DateTimeFormatter.ofPattern("MM/dd/uuuu" , Locale.US) ; 
LocalDate ld = LocalDate.parse("11/29/2017") ; 

О java.time

java.time каркас встроен в Java 8 и более поздних версий. Эти классы вытесняют неприятные старые legacy классы времени, такие как java.util.Date, Calendar, & SimpleDateFormat.

Проект Joda-Time, в настоящее время в maintenance mode, советует перейти на классы java.time.

Чтобы узнать больше, см. Oracle Tutorial. И поиск Stack Overflow для многих примеров и объяснений. Спецификация: JSR 310.

Где получить классы java.time?

  • Java SE 8, Java SE 9, а затем
    • Встроенный.
    • Часть стандартного Java API с объединенной реализацией.
    • Java 9 добавляет некоторые незначительные функции и исправления.
  • Java SE 6 и Java SE 7
    • Большая часть функциональности java.time будет обратно портирован на Java 6 & 7 в ThreeTen-Backport.
  • Android

ThreeTen-Extra Проект расширяет java.time с дополнительными классами. Этот проект является доказательством возможных будущих дополнений к java.time. Здесь вы можете найти полезные классы, такие как Interval, YearWeek, YearQuarter и more.