XMLGregorianCalendarの使い方

JAX-WSの日付型を扱う場合、XMLGregorianCalendarで扱うことになります。
そのXMLGregorianCalendarに関して書こうとおもいます。
まずインスタンスの生成に方法です。
DatatypeFactoryクラスを利用してインスタンスを取得します。

DatatypeFactory factory = DatatypeFactory.newInstance();
XMLGregorianCalendar xmlGregorianCalendar = new factory.newXMLGregorianCalendar();

その後に、必要な情報を設定して行くことになります。
XMLGregorianCalendarのクラスフィールドには、年,月,日,時,分,秒,ミリ秒などのエリアがあります。
それぞれに対応したgeter,seterがあります。
それを使って値を取得したり、設定したりします。
Calendarから変換したりする場合は、こんな感じです。

Calendar calendar = Calendar.getInstance();
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH) + 1;
int day = calendar.get(Calendar.DATE);
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
int second = calendar.get(Calendar.SECOND);
int millisecond = calendar.get(Calendar.MILLISECOND);
xmlGregorianCalendar.setYear(year);
xmlGregorianCalendar.setMonth(month);
xmlGregorianCalendar.setDay(day);
xmlGregorianCalendar.setHour(hour);
xmlGregorianCalendar.setMinute(minute);
xmlGregorianCalendar.setSecond(second);
xmlGregorianCalendar.setMillisecond(millisecond);
xmlGregorianCalendar.setTimezone(540);

その逆の場合

Calendar calendar = Calendar.getInstance();
int year = xmlGregorianCalendar.getYear();
int month = xmlGregorianCalendar.getMonth();
int day = xmlGregorianCalendar.getDay();
int hour = xmlGregorianCalendar.getHour();
int minute = xmlGregorianCalendar.getMinute();
int second = xmlGregorianCalendar.getSecond();
int millisecond = xmlGregorianCalendar.getMillisecond();
calendar.set(year, month-1, day, hour, minute, second);
calendar.set(Calendar.MILLISECOND, millisecond);