なんだかものすごくよく眠れる。病気?
夕方出勤。マシンを起動したら、またしてもICQが自動起動してる。しつこいなあ。レジストリから消してしまう。これでダイジョウブだろう。思い切ってアンインストールしないのは貧乏症だから。
Calendarクラスを(というかこの日記のテンプレート生成クラスを)いじってて、ハマったこと:
static String[] mons = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", }; public static void main(String[] args) { try { GregorianCalendar cal = new GregorianCalendar(); if (args.length >= 1) { for (int i = 0; i < mons.length; i++) { if (mons[i].equalsIgnoreCase(args[0])) { cal.set(cal.MONTH, i); break; } } ...
と書いて、args[0]に11を入れたら、どうしても cal
が12月 (cal.get(cal.MONTH)が11) になる。なんでだろーとシバラク悩んだ。原因は、これを実行した日が10月31日だったから。GregorianCalendarのデフォルト・コンストラクタはその日のカレンダーを作成するんだけど、これに11月を指定した11月31日が正規化されて12月1日になってたのだ。むかーし同じようなバグ入りコードを書いたことがあった気がするけど(その時はDate#getMonth()が0〜11ということすら知らなくてもっと長引いた)、また同じような罠にはまるとわ。進歩がないねえ。
コメントする