2012-02-11 10 views
3

"yyMMdd"文字列にjava XmlGregorianCalendarをフォーマットする必要があります。 私の実装:私はログに表示さ何XmlGregorianCalendarタイムゾーンの問題を書式設定する

XMLGregorianCalendar date = getDate(); //getting the date 

if (date != null) { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyMMdd"); 

     LOG.debug("Parsing date..."); 
     LOG.debug("XML Date: " + date); 
     LOG.debug("XML Date timezone: " + date.getTimezone()); 

     GregorianCalendar gc = date.toGregorianCalendar(); 

     LOG.debug("Gregorian calendar: " + gc.toString()); 
     LOG.debug("Gregorian calendar timezone id: " + gc.getTimeZone().getID()); 

     Date d = gc.getTime(); 

     LOG.debug("Date: " + d.toString()); 

     String formatted = sdf.format(d); 

     LOG.debug("Formatted: " + formatted); 
} 

Parsing date... 
XML Date: 1943-04-15T00:00:00.000Z 
XML Date timezone: 0 
Gregorian calendar: java.util.GregorianCalendar[time=?,areFieldsSet=false,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="GMT+00:00",offset=0,dstSavings=0,useDaylight=false,transitions=0,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=1943,MONTH=3,WEEK_OF_YEAR=1,WEEK_OF_MONTH=1,DAY_OF_MONTH=15,DAY_OF_YEAR=1,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=0,SECOND=0,MILLISECOND=0,ZONE_OFFSET=0,DST_OFFSET=0] 
Gregorian calendar timezone id: GMT+00:00 
Date: Wed Apr 14 20:00:00 EDT 1943 
Formatted: 430414 

4月、15は私が間違ってやっている4月、14として解析されたのですか?私はタイムゾーンを設定する必要がありますか?

答えて

4

4月15日の深夜UTCと解析されました。その後、4月14日に午後8時にフォーマットされました。EDT EDTはUTCより4時間遅れているので正しいです。

Date.toString()は常に現地タイムゾーン使用することに注意してください - Dateオブジェクトは、それが中にいた時間帯の概念がありません

あなたのフォーマットされた値は、あなたの避難所「として、デフォルトのタイムゾーンを使用してです。時間帯を指定していません。カレンダーの値(gc)はUTCですが、フォーマットすると、フォーマッタからタイムゾーンが適用されます(Dateの値をフォーマットすると、にはのタイムゾーンがありません)。

達成しようとしていることは明確ではありませんが、うまくいけば助けになると思います。それ以外の場合は、可能であればJoda Timeを使用することを強くお勧めします。これは、これをはるかに明確にします。

+0

私はXmlCalendarからタイムゾーンで解析しようとしていました。今、私は自分のフォーマッタにタイムゾーンを設定すべきであることを理解しました。説明をありがとう。 – ninja

関連する問題