を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 日で止まってしまいます!