java.util.DateクラスのtoStringメソッドの文字列からjava.util.Dateオブジェクトを生成する
これまた通常あまり使うことはない気もするけど、ハマったので記録として残しておく。
java.util.DateクラスでtoStringメソッドを呼び出すと「Wed Apr 07 21:26:05 JST 2010」のような形式の文字列を表示する。こいつから逆にjava.util.Dateオブジェクトを生成するにはどうしたら良いのかとということで、あれこれ思考錯誤した。ポイントは、Locale.USを指定すること。こいつを指定しないとエラーになる。ここがハマッた所。
以下はLocale.USを指定した場合と、しなかった場合の比較。
user=> (import (java.util Date Locale)) java.util.Locale user=> (import (java.text SimpleDateFormat)) java.text.SimpleDateFormat user=> (defn parseStringDate [date-string] (let [format (SimpleDateFormat. "EEE MMM dd hh:mm:ss zzz yyyy")] (.parse format date-string))) #'user/parseStringDate user=> (parseStringDate (.toString (Date.))) java.text.ParseException: Unparseable date: "Wed Apr 07 21:33:59 JST 2010" (NO_SOURCE_FILE:0) user=> (defn parseStringDate [date-string] (let [format (SimpleDateFormat. "EEE MMM dd hh:mm:ss zzz yyyy" Locale/US)] (.parse format date-string))) #'user/parseStringDate user=> (parseStringDate (.toString (Date.))) #<Date Wed Apr 07 21:34:24 JST 2010>