2012年10月26日金曜日

[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
*/
---

0 件のコメント:

コメントを投稿