GSonでDate型をパースする際にLocaleが関連してエラーがでる
Android 4.0.3
GSon 2.2.2
GSonを使ってJSON形式のデータをパースする際エラーになってしまった。
自分の端末では問題にはならないのに、
職場の韓国の方の携帯ではエラーが発生する。
よくよく調べて行ったら、
AndroidのLocaleの設定によって、
DateFormatが異なってしまうためにString⇒Date変換時にエラーになってしまうことが分かった。
つまり、
class myClass{
private Date idate;
private int id;
/**
* @return the idate
*/
public Date getIdate() {
return idate;
}
/**
* @param idate the idate to set
*/
public void setIdate(Date idate) {
this.idate = idate;
}
}
String input = "{"
+ "\"idate\":\"2013/04/04 11:11:11\","
+ "\"id\":\"1\""
+ "}";
myClass my = new Gson().fromJson(input, myClass.class);
Log.d("TAG", my.getIdate().toLocaleString());
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
myClass my = new Gson().fromJson(input, myClass.class);
ここでエラーが発生してしまう。
対処方法として、
Gson gson = new GsonBuilder().setDateFormat("yyyy/MM/dd HH:mm:ss").create();
myClass my = gson.fromJson(input, myClass.class);
として、DateFormatを定義しておけば、AndroidのLocaleが変更されても、
きちんとパースしてくれることを確認した。