SimpleDateFormatのLocaleとタイムゾーンのメモ
Localeを指定するとタイムゾーンが変わるかと思っていたが実際は変わらなかったのでメモ
Localeを設定した時の挙動
以下のコードを3つのLocaleで実行してみた
Date date = new Date(System.currentTimeMillis()); SimpleDateFormat sdf = new SimpleDateFormat("yyyy.MMMMM.dd GGG hh:mm aaa", locale); Log.d(TAG, "format: " + sdf.format(date));
結果は以下のような出力になる
Locale | 出力 |
---|---|
JAPAN | 2016.12.08 西暦 12:07 午前 |
CHINA | 2016.12.08 公元 12:07 上午 |
US | 2016.D.08 AD 12:07 AM |
Localeを変えてもすべて12時7分になっていた
Localeの指定では午前やAMなどの表記が異なるようだ
よく考えるとアメリカ国内でも地域によって時差が違っているのにUSのみなのはおかしい・・・
TimeZoneを設定する
実際にタイムゾーンを考慮してフォーマットするためには
DateFormat#setTimeZone(TimeZone)
を使えば良い
例:東京とニューヨークの例
sdf.setTimeZone(TimeZone.getTimeZone("Asia/Tokyo")); Log.d(TAG, "format: " + sdf.format(date)); sdf.setTimeZone(TimeZone.getTimeZone("America/New_York")); Log.d(TAG, "format: " + sdf.format(date));
結果は以下の通り
format: 2016.12.08 西暦 00:57 午前 format: 2016.12.07 西暦 10:57 午後