0

JCalendar使用して新しく選択した日付を取得する propertyChangeListener がありますCalendar newValue = (Calendar) evt.getNewValue()。古い日付が 31 で、新しく選択した月が 30 日のうちの 1 つである場合、その値を取得しようとすると、newValue.getTime()誤った日付が返されます (JCalendar 1.2 では古い月の 1 日、Jcalendar 1.4 では古い月の 30 日) )。を実行する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
     } 
   } 
}

例: 現在選択されている日付 -> 2018 年 12 月 31 日カレンダーに戻る ->YEAR=2018,MONTH=11,WEEK_OF_YEAR=48,WEEK_OF_MONTH=1,DAY_OF_MONTH=31

月を 11 月のカレンダーに変更すると、YEAR=2018,MONTH=10,WEEK_OF_YEAR=1,WEEK_OF_MONTH=6,DAY_OF_MONTH=31 実際には正しくありません (10 月 (11 月) の 31 day_of_month はありません)。JCalendar では 12 月 1 日が選択されます。ここで 11 月 30 日に選択してもらいたいです。

問題は、propertyChangeListener が 2 回呼び出されることです。私の日付が 12 月 31 日で、11 月 30 日に設定したとします。最初は日付が 12 月 30 日に変更され (11 月の範囲に入ると思います)、2 回目は日付が 11 月 30 日に変更されます。私は evt.getNewValue() のみを出力しますが、他のメソッドを呼び出して日付を設定しようとすると、12 月 30 日で止まってしまいます!

4

0 に答える 0