Calendar.getTime возвращает неверную дату - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть JCalendar propertyChangeListener, в котором я получаю новую выбранную дату, используя Calendar newValue = (Calendar) evt.getNewValue().В тех случаях, когда старая дата равна 31, а новый выбранный месяц является одним из 30 дней месяца, когда я пытаюсь получить значение newValue.getTime(), возвращается неверная дата (1-е число старого месяца в JCalendar 1.2 и 30-е число старого месяцав Jcalendar 1.4).Если я наберу setLenient=true, он выдаст Error: java.lang.IllegalArgumentException: MONTH.

Можно ли как-нибудь проверить старые и новые дату и месяц и настроить их в соответствии с требованиями?

Воткод:

myCalendar.addPropertyChangeListener(new PropertyChangeListener() {
   public void propertyChange(PropertyChangeEvent evt) {
      if (evt.getPropertyName().equals("calendar")) {
        Calendar updatedValue = (Calendar) evt.getNewValue();
        System.out.println(updatedValue); //Prints Month as 10 (Nov) and day as 31
        System.out.println(updatedValue.getTime()); //Prints Month as 11 (Dec) and day as 1
     } 
   } 
}

Пример: текущая выбранная дата -> 31 декабря 2018 года возврат календаря -> YEAR=2018,MONTH=11,WEEK_OF_YEAR=48,WEEK_OF_MONTH=1,DAY_OF_MONTH=31

Изменение месяца на возвращение календаря ноября -> YEAR=2018,MONTH=10,WEEK_OF_YEAR=1,WEEK_OF_MONTH=6,DAY_OF_MONTH=31, что на самом деле неверно(нет 31 day_of_month в месяце 10 (ноябрь)) И 1 декабря выбирается в JCalendar.Я хочу, чтобы 30 ноября был выбран.

Проблема в том, что propertyChangeListener вызывается дважды.Предположим, моя дата - 31 декабря, и я установил ее на 30 ноября. В первый раз дата меняется на 30 декабря (я думаю, что она попадает в диапазон ноября), а во второй раз она меняет дату на 30 ноября. Это видно, еслиЯ печатаю только evt.getNewValue (), но если я пытаюсь установить дату, вызывая некоторые другие методы, она застревает только 30 декабря!

1 Ответ

0 голосов
/ 28 ноября 2018

Используйте метод ниже, чтобы получить правильные дату и время

Date c = Calendar.getInstance().getTime(); 
System.out.println("Current time => " + c);
SimpleDateFormat df = new SimpleDateFormat("dd-MMM-yyyy");
String formattedDate = df.format(c);

, потому что у объекта Date нет часового пояса как части его состояния, вам нужно SimpleDateFormat для форматирования и печати даты в нужной проверке часового поясаэто наша ссылка [ссылка] ( Календарь возвращает дату в неправильном часовом поясе )

...