java.util.Calendar と TimeZone と java.text.SimpleDateFormat
日本時間の 2011年4月12日 13時50分 (JST) を UTC (Universal Time, Coordinated) に変換して,Tue Apr 12 04:50:00 +0000 2011 (UST) の形で表現する.
import java.io.*; import java.util.GregorianCalendar; import java.util.Calendar; import java.util.TimeZone; import java.text.SimpleDateFormat; import java.util.Locale; public class CalendarTimeZone { static void printCalendar(Calendar cal){ int year = cal.get(Calendar.YEAR); int month = cal.get(Calendar.MONTH)+1; int date = cal.get(Calendar.DATE); int hour = cal.get(Calendar.HOUR_OF_DAY); int minute = cal.get(Calendar.MINUTE); int second = cal.get(Calendar.SECOND); String tz = cal.getTimeZone().getDisplayName(Locale.US); System.out.println(year + "年" + month + "月" + date + "日" + hour + "時" + minute + "分" + second + "秒" + "(" + tz + ")"); } static Calendar makeCalendar(int year, int month, int date, int hour, int minute, int second){ Calendar cal = new GregorianCalendar(year, month-1, date, hour, minute, second); return cal; } //(注意)文字列に変換する際,TimeZone を指定していることに注意 static String Cal2String(Calendar cal, TimeZone tz){ SimpleDateFormat sdf = new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.US); sdf.setTimeZone(tz); String calString = sdf.format(cal.getTime()); return calString; } public static void main(String[] args){ //2011年4月12日 13時50分 (JST) Calendar cal = makeCalendar(2011, 4, 12, 13, 50, 0); printCalendar(cal); //カレンダを "Tue Apr 12 04:50:00 +0000 2011" の文字列形式に変換 String calString = Cal2String(cal, TimeZone.getTimeZone("UTC")); System.out.println(calString); } }
Calendar にセットした時間を単純に表示すると日本時間.一方,java.text.SimpleDateFormat にて setTimeZone() することで UCT の文字列形式が得られる.
2011年4月12日13時50分0秒(Japan Standard Time) Tue Apr 12 04:50:00 +0000 2011
ちなみに,TimeZone を変更した Calendar を保持するだけならば,以下のコードでもよいが,UCT の文字列にしたいという目的ならば上記のコードの方が楽.
Calendar JST2UTC(Calendar jstCal){ long millis = jstCal.getTimeInMillis(); Calendar utcCal = Calendar.getInstance(TimeZone.getTimeZone("UTC")); utcCal.setTimeInMillis(millis); return utcCal; }
参考:以下のサイトにおいて UTC と GMT の違いが説明されている.
http://www.localtime.jp/utc-gmt/