GMT時刻を任意のタイムゾーン時刻への変換方法
Date型のGMT時刻をOSで設定したタイムゾーンに応じたローカル時刻に変換してくれる
ことを期待して下記サンプル(SimpleDateFormatにTimeZoneを設定)を作成しました。
しかし、変換前後で時刻は変わりませんでした。
GMT時刻=2010/06/13 09:15:30 を作成。OSのタイムゾーンを日本に設定し、変換。
変換後の時刻は9時間後の2010/06/13 18:15:30を期待したのですが変換前後で変化は
ありませんでした。下記がそのサンプルなのですが何か問題がありますでしょうか。
また、サンプルではOSからタイムゾーンを取得しているのですがブラウザのタイムゾーンを
取得することはできるのでしょうか。HTTP request headersにはタイムゾーン情報は無く
JavaScriptを経由してとらないといけないという記述をどこかで見たことはあるのですが・・・。
【サンプル】
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.TimeZone;
public class TimeZoneTest {
private static SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
cal.set(Calendar.YEAR, 2010);
cal.set(Calendar.MONTH, 5);
cal.set(Calendar.DAY_OF_MONTH, 13);
cal.set(Calendar.HOUR_OF_DAY, 9);
cal.set(Calendar.MINUTE, 15);
cal.set(Calendar.SECOND, 30);
Date todayDate = cal.getTime();
System.out.println("GMT時刻=" + formatter.format(todayDate).toUpperCase()); // GMT時刻=2010/06/13 09:15:30
String convertDate =convertTime(todayDate); // OSのTimeZoneId=Asia/Tokyo にて変換
System.out.println("ローカル時刻=" + convertDate); // ローカル時刻=2010/06/13 09:15:30 何故???
}
public static String convertTime(Date todayDate) {
String timeZoneId = TimeZone.getDefault().getID();
System.out.println("OSのTimeZoneId=" + timeZoneId); // OSのTimeZoneId=Asia/Tokyo
formatter.setTimeZone(TimeZone.getTimeZone(timeZoneId));
return formatter.format(todayDate).toUpperCase();
}
}
お礼
ご回答有難うございます。 i Calのバージョンは2.0.3です。 確かに環境設定にて1日の開始時間の変更を すると背面に色が付いてますね。 では開始時間は正午から始めるということは できないのでしょうか。お分かりなら引き続き お願いいたします。