webentwicklung-frage-antwort-db.com.de

xMLGregorianCalendar nach Datum konvertieren, z. B. "MM/DD/YYYY hh: mm: ss AM"

Ich habe ein Datum im XMLGregorianCalendar-Format wie "2013-05-16T09: 54: 13", das ich in den Zeitstempel "MM/DD/YYYY hh: mm: ss AM" konvertieren muss, um in Oracle eine Datenbanktabelle mit Java einzufügen.

wie kann ich das in Java machen?

23
Suniel

Sie können dies tun, um eine Date zurückzugeben:

calendar.toGregorianCalendar().getTime()

Ich habe diesen Code aus diesem Tutorial gefunden. Von dort können Sie ein SimpleDateFormat verwenden, um daraus einen String im gewünschten Format zu erstellen. 

Wenn Sie jedoch JDBC verwenden, um das Datum in der Datenbank zu speichern, können Sie die Variable Date möglicherweise direkt mit dieser Methode übergeben:

preparedStatement.setDate(colNum, myDate);
42
Daniel Kaplan

Hier ist eine klarere Antwort:

Rufen Sie die Instanz von Date aus der XMLGregorianCalendar-Instanz ab:

Date date = xmlCalendar.toGregorianCalendar().getTime();

Ich habe diesen Code aus XMLGregorianCalendar nach Datum in Java gefunden.

Formatieren Sie diese Date-Instanz mit dem Format "MM/tt/jjjj hh: mm: ss a". Sie erhalten das Format MM/DD/JJJJ hh: mm: ss AM 

DateFormat  formatter = new SimpleDateFormat("MM/dd/yyyy hh:mm:ss a");
String formattedDate  = formatter.format(date)

Von Datum in String in Java konvertieren

Beim Einfügen der Datenbank würden Sie tun, was Daniel vorschlug

6
David Pham

Wenn Sie Ihr Datum in eine Datenbank einfügen möchten, würde ich zuerst das tun, was Daniel vorgeschlagen hat:

XMLGregorianCalendar xgc=<assume this is initialized>;
Date timestamp=xgc.toGregorianCalendar().getTime();

und später durch ein PreparedStatement als Zeitmarke in Millisekunden (Epochenzeit) einfügen. Auf diese Weise verlieren Sie keine Präzision.

preparedStatement.setTimestamp(colNum,new Timestamp(timestamp.getTime()));
3
ovpiNU

tl; dr

myPreparedStatement.setObject( 
    … , 
    myXGC.toGregorianCalendar()
         .toZonedDateTime()
) ;

Java.time

Der moderne Ansatz verwendet die Java.time-Klassen, die die störenden alten Klassen Date, Calendar und GregorianCalendar ersetzen.

Konvertieren Sie die alten Klassen in Java.time. 

GregorianCalendar gc = myXGC.toGregorianCalendar() ;
ZonedDateTime zdt = gc.toZonedDateTime();

Übergeben Sie Datum-Uhrzeit-Werte an Ihre Datenbank als Datum-Uhrzeit-Objekte und nicht als Zeichenfolgen .

Wenn Ihr JDBC-Treiber mit JDBC 4.2 und höher kompatibel ist, können Sie direkt mit Java.time-Typen arbeiten. 

myPreparedStatement.setObject( … , zdt ) ;

Wenn Ihr Treiber noch nicht kompatibel ist, konvertieren Sie ihn kurz in einen Java.sql-Typ.

myPreparedStatement.setTimestamp( … , Java.sql.Timestamp.from ( zdt.toInstant() ) ) ;
1
Basil Bourque

Bitte benutzen Sie die Funktion unten - übergeben Sie einfach die XMLGregorianCalendar-Instanz und das gewünschte Datumsformat (Formatbeispiel: "DD MMMM yyyy" -> 01. Januar 2017)

public String parseDate(String format,XMLGregorianCalendar XMLdate){
    Date date = XMLdate.toGregorianCalendar().getTime();
    DateFormat  formatter = new SimpleDateFormat(format);
    String formattedDate  = formatter.format(date);
    return formattedDate;
}
0
Arundev

Dies gibt Java.util.Date zurück:

Java.util.Date tempDate = issueDate.toGregorianCalendar().getTime();
0
Noman

Sie können XMLGregorianCalendar in Java.util.Date-Objekt konvertieren, indem Sie die beiden folgenden Codezeilen verwenden: 

Date date = xmlDate.toGregorianCalendar().getTime();
System.out.println("Java.util.date :- " + date);

Verwenden Sie diesen Code, um das Java.slq.Date-Objekt zu konvertieren: - 

long time = xmlDate.toGregorianCalendar().getTime().getTime();
Java.sql.Date sqlDate = new Java.sql.Date(time);

Das vollständige Beispiel finden Sie hier .

0
lalitbhagtani

Verwenden Sie die DateFormat-Klasse in Java. Dies sollte hilfreich sein: http://docs.Oracle.com/javase/6/docs/api/Java/text/DateFormat.html

0
schilippe