DateFieldから呼び出すJSCalendarのフォーマットがおかしい?
Click FrameworkのDateFieldで、JSCalendarから日付をセットした場合、月はMMでフォーマットされるのに日付はddでフォーマットされないという現象に遭遇。
JSCalendarはDateクラスのprototypeにprintを追加してて、そこでフォーマットを指定できる。
Date.prototype.print = function (str) { //略 s["%d"] = (d < 10) ? ("0" + d) : d; // the day of the month (range 01 to 31) s["%e"] = d; // the day of the month (range 1 to 31) //略
これをDateFieldは利用してて、parseDateFormatPatternメソッドでJavaの日付フォーマットをJSCalendarのフォーマットに変換してる。でも"dd"がおかしい。
protected String parseDateFormatPattern(String pattern) { //略 } else if ("dd".equals(token)) { jsPattern.append("%e"); } else if ("d".equals(token)) { jsPattern.append("%e"); //略
バグかなー。でも昔のClickははこの("d".equals(token))ってのも存在しなかったみたいで、あるリビジョンを境に追加されてる。このときにddも気づくじゃん?こんなバグが長期でほっとかれるはずないじゃん?おれの勘違いじゃね?とか思う。へっぽこの宿命。