Androidアプリを作っていて、クライアントからとあるAPIを叩くとGMT(世界標準時)な日付文字列が返ってきます。 たまたま自分は今PST(太平洋標準時)なところにいますが、日本帰ればJST(日本標準時)になるわけです。 アレやコレや面倒な実装をイロイロしなきゃいけないのかな?って思ってたらSimpleDateFormatって便利なのね的な。 1. APIからGMTで返ってくるんだぜって明示する(setTimeZone) 2. 普通にparseしてやるとデフォルトのロケールを使って時間を計算して返してくれる。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); sdf.setTimeZone(TimeZone.getTimeZone("GMT")); Date date = sdf.parse(APIから返ってきた日付);
今回は秒まであったのを分までに変えるってのもやりたかったので、 さらにもっかいformatしてやります、と。
sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm"); System.out.println(sdf.format(date)));
んで、デフォルトじゃなくて明示するにはどうしたらイイんだろう?ってのもあるのかな、と。 Androidアプリみたいのじゃなくて、サーバサイドでマッシュアップするような 例えば以下のような場合、 - APIからGMTの日付が返ってきて、 - サーバはアメリカの西海岸にあるけど、 - JSTの時間を画面に表示させたい。 その場合は、デフォルトのタイムゾーンを↓みたいにJSTに変更してやる感じ。
TimeZone.setDefault(TimeZone.getTimeZone("JST"));
Effective Java プログラミング言語ガイド
posted with amazlet at 11.12.07