Richtige Weg, um konvertieren von XMLGregorianCalendar zu GregorianCalendar

Habe ich 2 Klassen. Zunächst enthält Kalender-Feld und Integer-Feld (tz-offset). Zweite enthält XmlGregorianCalendar Feld. Ich möchte zum vergleichen von Datum von firs-Klasse Datum aus der zweiten.

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()) + "]");
}

Habe ich gleich Termine (19. Nov, 9:00 UHR GMT+1) in die Klassen.

Je nach system TZ es zeigt verschiedene Ergebnisse (in GMT TZ):

Debian Lenny, TZ MEZ:

Second  [Nov 19, 2011 7:00:00 AM] - wrong!
First [Nov 19, 2011 8:00:00 AM] -right!

Win7, TZ ist GMT+3:

Second  [Nov 19, 2011 8:30:00 AM] - wrong!
First [Nov 19, 2011 8:00:00 AM] -right!

Was ich falsch mache?

Dank.

UPDATE

1. und 2. Klassen:

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 ist ein org.apache.Unterhaus.lang.SerializationUtils von Apache-commons-lang-lib.

können Sie vereinfachen, dass der Testfall ein wenig? Nehmen Sie sich einen erstklassigen und secondClass und SerializationUtils.Klon
siehe update

InformationsquelleAutor ninja | 2011-11-17

Schreibe einen Kommentar