[Java] UTC 時間と SimpleDateFormat の不思議 ================================================================================ UTC 時間を表示するときに、SimpleDateFormat を使って表示すると、JST 時間で表示さ れる。System.out.printf()で %tT とすると、ちゃん と UTC として表示される。なぜ? オブジェクトは、ただしく UTC として作られている。 □ UTCSample.java --- package jp.rutles.sample; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.TimeZone; public class UTCSample { public static void main(String[] args) { SimpleDateFormat fmt = new SimpleDateFormat( "yyyy 年 M 月 d 日 (E) HH:mm:ss"); Calendar today = Calendar.getInstance(); System.out.println(today); System.out.println(fmt.format(today.getTime())); System.out.printf("%1$tF %1$tT%n%n", today); TimeZone tz = TimeZone.getTimeZone("UTC"); Calendar utc = Calendar.getInstance(tz); System.out.println(utc); System.out.println(fmt.format(utc.getTime())); System.out.printf("%1$tF %1$tT%n%n", utc); } } /* 実行結果 java.util.GregorianCalendar[time=1330561100890,areFieldsSet=true,areAllFieldsSet =true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Tokyo",offset=324000 00,dstSavings=0,useDaylight=false,transitions=10,lastRule=null],firstDayOfWeek=1, minimalDaysInFirstWeek=1,ERA=1,YEAR=2012,MONTH=2,WEEK_OF_YEAR=9,WEEK_OF_MONTH=1, DAY_OF_MONTH=1,DAY_OF_YEAR=61,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR= 9,HOUR_OF_DAY=9,MINUTE=18,SECOND=20,MILLISECOND=890,ZONE_OFFSET=32400000,DST_OFF SET=0] 2012 年 3 月 1 日 (木) 09:18:20 2012-03-01 09:18:20 java.util.GregorianCalendar[time=1330561100906,areFieldsSet=true,areAllFieldsSet =true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="UTC",offset=0,dstSavings= 0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInF irstWeek=1,ERA=1,YEAR=2012,MONTH=2,WEEK_OF_YEAR=9,WEEK_OF_MONTH=1,DAY_OF_MONTH=1, DAY_OF_YEAR=61,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0, MINUTE=18,SECOND=20,MILLISECOND=906,ZONE_OFFSET=0,DST_OFFSET=0] 2012 年 3 月 1 日 (木) 09:18:20 2012-03-01 00:18:20 */ --- 以上