Ein bug in Java XMLGregorianCalendar Umwandlung in ein Java-util.Datum?

Schreibe ich ein Datum/Uhrzeit-Wert in eine XML-Datei durch das Lesen eines Datums aus dem RAP-basierte Benutzeroberfläche als Java-Date-Objekt, und übergeben Sie es als eine XMLGregorianCalendar Objekt zu der eigentlichen Datei, code zu schreiben. Die entsprechenden Klassen werden automatisch generiert und ich habe keine Kontrolle über Sie. Das Datum habe ich eingetragen war:

03-03-1933:03:03:03.

Es wurde umgewandelt, um die folgende Zeichenfolge, wenn in die Datei geschrieben:

1933-03-03T03:03:03.161+05:53

Nun, wenn ich lese das Datum zurück, um es in die Benutzeroberfläche zum Bearbeiten, es erschienen dort:

03-03-1933:03:03:23

Beachten Sie die zusätzlichen 20 Sekunden Hinzugefügt, um den tatsächlichen Wert für Sekunden.

Warum ist das passiert? Ist es einige Fehler in der API? Jede Hilfe wird sehr geschätzt!

Relevante code:

1) Umwandlung zu XMLGregorianCalendaraus Date:

GregorianCalendar calendar = new GregorianCalendar(); 
calendar.setTimeInMillis(date.getTime());
XMLGregorianCalendar date2;
date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(calendar);

//pass 'date2' to file writing code

2) Umstellung auf Date aus XMLGregorianCalendar:

XMLGregorianCalendar cal = getDateFromFile(); //XML date read from file
Date date = cal.toGregorianCalendar().getTime();

//show Date object in UI, dateCtrl and timeCtrl are SWT DateTime objects

GregorianCalendar calendar = new GregorianCalendar();  
calendar.setTime( date );

dateCtrl.setDate( calendar.get( GregorianCalendar.YEAR ),
    calendar.get( GregorianCalendar.MONTH ),
    calendar.get( GregorianCalendar.DAY_OF_MONTH ) );

timeCtrl.setTime( calendar.get( GregorianCalendar.HOUR_OF_DAY ),
    calendar.get( GregorianCalendar.MINUTE ),
    calendar.get( GregorianCalendar.SECOND) );
  • Es ist etwas seltsam gehen auf in der zweiten Zeile von Schritt 1: konvertieren Sie Ihre Date zu einem GegorianCalendar erscheint, um ihm eine sehr seltsame Zeit-zone: +05:53. Seltsam ist auch, dass es einen offset von 161 Millisekunden. Könnten Sie code zeigt, wie Sie erstellt date? Auf meinem Rechner date2 Ergebnisse in 1933-03-03T03:03:03.000+01:00 (was ist richtig für mein Amsterdam time zone).
  • Hi, danke für die Antwort. Ich verwende zwei SWT-DateTime-Objekte. Ein um das Datum zu erhalten und die anderen bekommen die Zeit. Hier ist der relevante code: int Tag = dateCtrl.getDay(); int Monat = dateCtrl.getMonth(); int Jahr = dateCtrl.getYear(); int hrs = timeCtrl.getHours(); int Minuten = timeCtrl.getMinutes(); int Sekunden = timeCtrl.getSeconds(); Calendar Calendar = Calendar.getInstance(); calendar.set(Jahr, Monat, Tag, Stunden, Minuten, Sekunden); Date Date = calendar.getTime();
  • Kann das sein, in Bezug auf Indien die Zeitzone ist UTC+05:30, aber XMLGregorianCalendar::getTimezone() zurück int (für die Anzahl der Stunden von der UTC-offset)? Dies scheint eine Schwäche geben. Auch von Interesse wäre, Nepal (UTC+05:45) und Afghanistan (UTC+04:30).
InformationsquelleAutor shrini1000 | 2010-11-26
Schreibe einen Kommentar