- 2008 年 2 月 29 日
- [ Column ]
Calendar org.apache.commons.net.ftp.parser.FTPTimestampParserImpl.parseTimestamp(String timestampStr) throws ParseException
には、以下の処理がある
if (this.recentDateFormat != null) {
parsed = recentDateFormat.parse(timestampStr, pp);
}
recentDateFormatはdefaultとして”MMM d HH:mm”の書式を持っており、コレを元にparseを行った後年号を推定するような処理となっている
ここで、SimpleDateFormat#parse(String text, ParsePosition pos)の処理を見ると、
SUN JDKは年号の指定が無い場合Calendar.clear()した時間、即ちunix epoch timeを前提に時間の推定を行うよう実装されている
しかし、1970年はうるう年ではなかった為、SimpleDateFormat#setLenient(false)を呼んだparserでは、
2007-02-29T18:00のような時間はparse不可能な物として排除されてしまう。
なら、他のJVMなら上手く動くかも?と予測するが今更テストする気にもならない。
だって、既に2月29日になってしまっているのだから
続きを読む »