Javaでタイムゾーンを表示したり、操作したりしたいときはTimeZoneクラスを使う。
このページではTimeZoneクラスについてまとめた。サンプルコードも用意しているので、参考になるはずだ。
目次
JavaのTimeZoneクラス
タイムゾーンとは?
「時差」があるように地域によって、時間は違う。同じ時間を扱う地域をタイムゾーンという。
イギリスのグリニッジを中心に15度ずつ分割されたものだ。360度÷24時間=15度のため、このように決められている。
日本は韓国やインドネシアと同じタイムゾーンにある。日本国内は同一時間なので、タイムゾーンを意識する機会はあまりないと思うが、国をまたがって使われるアプリケーションやサーバーが外国にあるなどの場合、日付処理の際にその地域のタイムゾーンを意識することが必要だ。
Javaのタイムゾーン
Javaでタイムゾーンは、java.utilパッケージにあるTimeZoneクラスで扱うことができる。TimeZoneクラスを用いれば、世界各地の日付や時間の情報を取得して表示や利用することができるようになる。
主なタイムゾーンID
次のようなタイムゾーンが用意されている。
タイムゾーン |
タイムゾーンID |
日本標準時 |
Asia/Tokyo |
グリニッジ標準時 |
Europe/London |
アラビア標準時 |
Asia/Kuwait |
東部標準時 |
America/New_York |
太平洋標準時 |
America/Los_Angeles |
ハワイ標準時 |
US/Hawaii |
オブジェクトの取得
TimeZoneクラスは抽象クラスなので、new演算子を使って生成できない。オブジェクトの取得は以下のようになる。
デフォルトタイムゾーンを取得するTimeZone.getDefault ()
戻り値の型 |
Public static TimeZone |
内容 |
デフォルトのタイムゾーンを持つ、TimeZoneオブジェクトを取得する。 |
タイムゾーンIDを指定するTimeZone.getTimeZone(String ID)
戻り値の型 |
Public static TimeZone |
内容 |
引数に指定されたタイムゾーンIDに基づいた、TimeZoneオブジェクトを取得する。 |
主なメソッド
主なメソッドは次の通りだ。
IDの一覧を取得するTimeZoneオブジェクト. getAvailableIDs( )
戻り値の型 |
Public String[] |
内容 |
サポートされる利用可能な ID をすべて取得する。 戻り値: ID の配列 |
タイムゾーン名を返すTimeZoneオブジェクト. getDisplayName( )
戻り値の型 |
Public String |
内容 |
デフォルトロケールでの現在のタイムゾーンの名前を、ユーザーへの表示に適した形式で返す。このメソッドは、長い名前を返す。 ( 夏時間は含まれない) ロケールの表示名がない場合、このメソッドは規定化されたカスタム ID 形式で文字列を返す。 戻り値: デフォルトロケールでの現在のタイムゾーンを、人が理解できる形式にした名前 |
現在のタイムゾーンを取得するTimeZoneオブジェクト. getID( )
戻り値の型 |
Public String |
内容 |
現在の所在地のタイムゾーンの ID を取得する。 戻り値: 現在の所在地のタイムゾーンの ID |
タイムゾーンIDを設定するTimeZoneオブジェクト. setID( String ID)
戻り値の型 |
void |
内容 |
タイムゾーン ID を設定する。 引数: ID - 新しいタイムゾーン ID |
これらのメソッドが用意されているので、状況に応じて使い分けていけばいいだろう。
タイムゾーンに関するTimeZoneクラスサンプルコード
Calendarクラスを使用したサンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
public class TimeZoneSample1 { public static void main(String[] args) { TimeZone tzn1 = TimeZone.getDefault();//[1] Calendar cal1 = Calendar.getInstance(tzn1);//[2] System.out.println("タイムゾーンID : " + tzn1.getID());//[3] System.out.println("タイムゾーン : " + tzn1.getDisplayName());//[4] System.out.println("日時 : " + cal1.get(Calendar.YEAR) + "/" + (cal1.get(Calendar.MONTH) + 1) + "/" + cal1.get(Calendar.DAY_OF_MONTH) + " " + cal1.get(Calendar.HOUR_OF_DAY) + ":" + cal1.get(Calendar.MINUTE) + ":" + cal1.get(Calendar.SECOND));//[5] TimeZone tzn2 = TimeZone.getTimeZone("US/Hawaii"); cal1.setTimeZone(tzn2);//[6] System.out.println("タイムゾーンID : " + tzn2.getID());//[7] System.out.println("タイムゾーン : " + tzn2.getDisplayName());//[8] System.out.println("日時 : " + cal1.get(Calendar.YEAR) + "/" + (cal1.get(Calendar.MONTH) + 1) + "/" + cal1.get(Calendar.DAY_OF_MONTH) + " " + cal1.get(Calendar.HOUR_OF_DAY) + ":" + cal1.get(Calendar.MINUTE) + ":" + cal1.get(Calendar.SECOND));//[9] } } |
実行結果
1 2 3 4 5 6 |
タイムゾーンID : Asia/Tokyo タイムゾーン : 日本標準時 日時 : 2016/9/5 22:50:17 タイムゾーンID : US/Hawaii タイムゾーン : ハワイ標準時 日時 : 2016/9/5 3:50:17 |
サンプルコードの説明
- [1] デフォルト情報のタイムゾーンオブジェクトtzn1を取得。
- [2] tzn1をもとにCalendarオブジェクトcal1を取得。
- [3] getID メソッドを使用してtzn1のタイムゾーンIDを表示。
- [4] getDisplayName メソッドを使用し、tzn1のタイムゾーンを表示
- [5] cal1の日付情報を表示。
- [6] タイムゾーンID "US/Hawaii”のタイムゾーンオブジェクトtzn2を取得。
- [7] Calendarオブジェクトcal1にタイムゾーンtzn2を設定。
- [8] tzn2のタイムゾーンIDを表示。
- [9] tzn2のタイムゾーンを表示
- [10]cal1の日付情報を表示。
Dateクラスを使用したサンプルコード
1 2 3 4 5 6 7 8 9 10 |
public class TimeZoneSample2 { public static void main(String[] args) { TimeZone tzn = TimeZone.getTimeZone("Europe/London");//[1] SimpleDateFormat fmt = new SimpleDateFormat(); Date date = new Date(); System.out.println("現在の日付情報 : " + fmt.format(date));//[2] fmt.setTimeZone(tzn); System.out.println("Europe/Londonのタイムゾーンでの日付情報 : " + fmt.format(date));//[3] } } |
実行結果
1 2 |
現在の日付情報 : 16/09/05 23:04 Europe/Londonのタイムゾーンでの日付情報 : 16/09/05 15:04 |
サンプルコードの説明
- [1] getTimeZoneメソッドを使用し、タイムゾーンID Europe/Londonを設定したタイムゾーンオブジェクトtznを取得。
- [2] Dateオブジェクトdateを生成し実行時の日付情報を取得。SimpleDateFormatオブジェクトfmtで書式を設定した文字列に変換して表示。
- [3] fmtにsetTimeZone メソッドを使用してtznを設定。文字列に変換して表示。
Calendarクラスと違いDateクラスではタイムゾーンが考慮されておらず、関連するメソッドは用意されていない。
その場合サンプルコードのようにSimpleDateFormatのsetTimeZoneメソッドを使用してタイムゾーンを設定して表示できるので参考にしていただきたい。
まとめ
このページではJavaのタイムゾーンを扱うTimeZoneクラスについてまとめてきた。
アプリケーションをグローバル展開するときなど、必ず使うクラスになっている。ぜひ、この機会に使い方を理解しておこう。