JSONICでローカライズした日付データにエンコードする方法
JSONICは、デフォルトではDate型をlong値にエンコードする。この値をクライアント側のJavaScriptで取得しても、JavaScriptでは国際化対応が不十分なのでローカライズした日時の文字列に変換するのは難しい。
そもそもクライアント側で日時データをどうこうしてサーバー側に送信することってあんまりなくて、大半は受け取りっぱなし。
それならサーバー側でJSONにするときに、リクエストに設定されたLocaleにしたがってローカライズした文字列でエンコードしとけばだいたい間違いない。
というわけで、先日も書いたJSONを継承したクラスにコードを追加する。
public class JSON4Gae extends JSON { @Override protected Object preformat(Context context, Object value) throws Exception { if (value instanceof Text) { return ((Text)value).getValue(); } if (value instanceof Date) { String format; if (context.getLocale().getLanguage().contains("ja")) { format = "yyyy年MM月dd日(E) HH:mm:ss"; } else { format = "EEE, dd/MMM/yyyy HH:mm:ss"; } SimpleDateFormat formatter = new SimpleDateFormat(format, context.getLocale()); return formatter.format((Date)value); } return super.preformat(context, value); } }
端末側の言語設定を切り替えるとリクエストにそのLocaleが設定されてくるので、そのLocaleを参照して日時をローカライズした文字列としてJSONに埋め込む。ここでは、"ja"を含んでいるかどうかでフォーマットを切り替えるようにした。