私は2つのクラスを持っています。最初にカレンダーフィールドと整数フィールド(tzオフセット)が含まれています。 2番目にはXmlGregorianCalendarフィールドが含まれます。私は、前のクラスと日付を2番目のクラスから比較したい。XMLGregorianCalendarをGregorianCalendarに変換する正しい方法
Calendar cal1 = (Calendar) SerializationUtils.clone(firstClass.getDepartureDatetime());
cal1.add(Calendar.MINUTE, -firstClass.getDepartureTzOffset());
GregorianCalendar cal2 = secondClass.getDepartureDateTime().toGregorianCalendar();
cal2.add(Calendar.MINUTE, -secondClass.getDepartureDateTime().getTimezone());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(" - Second [" + DateFormat.getDateTimeInstance().format(cal2.getTime()) + "]");
LOGGER.debug(" - First [" + DateFormat.getDateTimeInstance().format(cal1.getTime()) + "]");
}
私はそのクラスで平等な日付(11月19日午前9時)を設定しました。
システムTZによって、それが(GMT TZで)異なる結果を示す:
Debianのレニー、TZはCETである:
Second [Nov 19, 2011 7:00:00 AM] - wrong!
First [Nov 19, 2011 8:00:00 AM] -right!
win7の、TZは、GMT + 3:
Second [Nov 19, 2011 8:30:00 AM] - wrong!
First [Nov 19, 2011 8:00:00 AM] -right!
私は間違っていますか?
ありがとうございました。
第一及び第二のクラス
UPDATE:
public class FirstClass implements Serializable {
private static final long serialVersionUID = -1150341618306402800L;
private Calendar departureDatetime;
private Integer departureTzOffset;
public Calendar getDepartureDatetime() {
return departureDatetime;
}
public void setDepartureDatetime(Calendar departureDatetime) {
this.departureDatetime = departureDatetime;
}
public Integer getDepartureTzOffset() {
return departureTzOffset;
}
public void setDepartureTzOffset(Integer departureTzOffset) {
this.departureTzOffset = departureTzOffset;
}
}
public class SecondClass implements Serializable
{
private final static long serialVersionUID = 12345L;
protected XMLGregorianCalendar departureDateTime;
public XMLGregorianCalendar getDepartureDateTime() {
return departureDateTime;
}
public void setDepartureDateTime(XMLGregorianCalendar value) {
this.departureDateTime = value;
}
}
SerializationUtilsは、Apacheコモンズ・ラングのLIBからorg.apache.commons.lang.SerializationUtilsです。
あなたはそのテストケースを少し簡略化できますか? firstClassとsecondClassとSerializationUtils.cloneを取り出してください – Thilo
@Thiloアップデートを参照してください – ninja