- 締切済み
Calendarオブジェクトにタイムゾーンの設定
Calendarクラスで不思議に思ったことがあったので質問させてください。 下記サンプルのようにCalendarオブジェクトに対してタイムゾーンを設定しました。 表示1ではGMTタイム(9時間前の時間)が表示。 表示2では現在の時刻(設定したタイムゾーンを無視) して表示されてしまいます。これは仕様でしょうか。 JavaDocのなかで下記記述を見つけたのですがこの記述と関係ありますでしょうか。 いまいち文章が難解でよくわからないのですがgetメソッドなら計算した値 (この場合、タイムゾーンを反映して計算した値)を返しますよ と言っているのかなと 思ったのですが違いますでしょうか。 【JavaDocの記述】 「カレンダフィールド値は、set メソッドを呼び出して設定できます。 Calendar 内で設定されたフィールド値はすべて、その時間値 (「元期」からのミリ秒) または カレンダフィールドの値を計算する必要が生じるまで解釈されません。 get、getTimeInMillis、getTime、add、および roll の呼び出しでは、この種の計算が行われます。」 【サンプル】 Calendar cal = Calendar.getInstance(); cal.setTimeZone(TimeZone.getTimeZone("GMT")); //表示1 System.out.println(cal.get(Calendar.YEAR) + "-" + cal.get(Calendar.MONTH) + "-" + cal.get(Calendar.DAY_OF_MONTH) + " " + cal.get(Calendar.HOUR_OF_DAY) + ":" + cal.get(Calendar.MINUTE) + ":" + cal.get(Calendar.SECOND)); //表示2 System.out.println(cal.getTime().toString());
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- sech1152
- ベストアンサー率72% (45/62)
表示2で、デフォルトのタイムゾーンで表示されるのは、仕様と考えていいと思います。 引用されているJavaDocの記述は、getTimeの場合はタイムゾーンとは関係ないと思います。 CalendarのgetTime()は、Dateオブジェクトを取得するものですが、Dateオブジェクトにはタイムゾーンは保持されていません。つまり、「元期」からのミリ秒だけがCalendarからDateに渡されます。 DateのtoString()は、ドキュメントには記述がありませんが、デフォルトのタイムゾーンで文字列表現にするようです。 参考:ひしだま's 技術メモページ Java 日付時刻・カレンダー http://www.ne.jp/asahi/hishidama/home/tech/java/date.html#java.util.Date
お礼
御回答ありがとうございます。 やはり仕様だったのですね。 getTime()メソッドで指定したタイムゾーンの時刻がDate型で 返ってくることを期待していたのですが別の方法を考えたいと 思います。ありがとうございました。