内容へ移動
Cat Paw Software
ユーザ用ツール
ログイン
サイト用ツール
検索
ツール
文書の表示
以前のリビジョン
バックリンク
最近の変更
メディアマネージャー
サイトマップ
ログイン
>
最近の変更
メディアマネージャー
サイトマップ
トレース:
java:calendar
この文書は読取専用です。文書のソースを閲覧することは可能ですが、変更はできません。もし変更したい場合は管理者に連絡してください。
====== カレンダーと日付 ====== ===== タイムゾーン指定フォーマット ===== CalendarからDateに変換する時にタイムゾーン情報は失われてしまうため、以下のようにUTCのCalendarをDateFormatでフォーマットしても日本国内のマシン(タイムゾーンが日本に設定してあるマシン)ではJSTの時刻でフォーマットされてしまいます。 <code java> Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ssZZZ"); df.format(cal.getTime()); </code> タイムゾーンを指定してフォーマットするにはDateFormat#setTimeZoneでタイムゾーンをセットする <code java> Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); DateFormat df = new SimpleDateFormat("yyyy/MM/dd HH:mm:ssZZZ"); df.setTimeZone(cal.getTimeZone()); df.format(cal.getTime()); </code> ===== タイムゾーンの変換 ===== デフォルトのタイムゾーンが日本時間に設定されている前提。 UTCタイムゾーンの時刻を取得する <code java> Calendar cal = Calendar.getInstance(); cal.setTimeZone(TimeZone.getTimeZone("UTC")); System.out.println(cal.get(Calendar.HOUR_OF_DAY)); </code> 現在の日本時間の -9時間 の値が出力される。 日本時間の特定の日時をUTCに変換したい場合はやっかい。例えば2009年5月12 13時12分30秒(JST)に対応するUTCのインスタンスが欲しい場合。これはだめ。 <code java> Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 2009); cal.set(Calendar.MONTH, 5); cal.set(Calendar.DATE, 12); cal.set(Calendar.HOUR_OF_DAY, 13); cal.set(Calendar.MINUTE, 12); cal.set(Calendar.SECOND, 30); cal.setTimeZone(TimeZone.getTimeZone("UTC")); System.out.println(cal.get(Calendar.HOUR_OF_DAY)); </code> セットした時点では内部に反映されない。最後の行でGETした時点で、日時の設定とタイムゾーンの設定が同時に行われ、最終的なCalendarの状態は2009年5月12 13時12分30秒(UTC)のインスタンスとなる。よって出力は13となる。 以下のようにする。 <code java> Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 2009); cal.set(Calendar.MONTH, 5); cal.set(Calendar.DATE, 12); cal.set(Calendar.HOUR_OF_DAY, 13); cal.set(Calendar.MINUTE, 12); cal.set(Calendar.SECOND, 30); System.out.println(cal.get(Calendar.HOUR_OF_DAY)); // セットした値が内部に反映される cal.setTimeZone(TimeZone.getTimeZone("UTC")); System.out.println(cal.get(Calendar.HOUR_OF_DAY)); </code> 最初のgetをして始めてCalendarの状態が2009年5月12 13時12分30秒(JST)となる。タイムゾーンをUTCにセットして再度getすると2009年5月12 4時12分30秒(UTC)となる。よって最終出力は4となる。 タイムゾーン変換は以下のようにしたほうが分かりやすいかも <code java> Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("Asia/Tokyo")); cal.set(Calendar.YEAR, 2009); cal.set(Calendar.MONTH, 5); cal.set(Calendar.DATE, 12); cal.set(Calendar.HOUR_OF_DAY, 13); cal.set(Calendar.MINUTE, 12); cal.set(Calendar.SECOND, 30); long millis = cal.getTimeInMillis(); Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); cal.setTimeInMillis(millis); System.out.println(cal.get(Calendar.HOUR_OF_DAY)); // 4 </code>
java/calendar.txt
· 最終更新:
2009/12/25 03:01
by
127.0.0.1
ページ用ツール
文書の表示
以前のリビジョン
バックリンク
文書の先頭へ