2013-05-23 14 views
16

Mam datę w formacie XMLGregorianCalendar jak "2013-05-16T09: 54: 13", które muszę przekonwertować na sygnaturę czasową "MM/DD/RRRR gg: mm: ss AM "do wstawienia do bazy danych Oracle przy użyciu java.przekonwertować XMLGregorianCalendar do daty tj. "MM/DD/RRRR gg: mm: ss AM"

Jak mogę to zrobić w Javie?

z góry dzięki ...

+0

Duplikat http://stackoverflow.com/questions/882420/string-to-date-in-different-format-in-java – AurA

+0

Nie formatować datownik przed włożeniem do DB. Używasz klasy java.util.Date. –

Odpowiedz

28

Można to zrobić, aby zwróci Date:

calendar.toGregorianCalendar().getTime() 

znalazłem ten kod z this tutorial. Stamtąd możesz użyć numeru SimpleDateFormat, aby przekształcić go w ciąg znaków w pożądanym formacie.

Ale jeśli używasz JDBC, aby zapisać datę w bazie danych, to prawdopodobnie może przejść w Date bezpośrednio this method:

preparedStatement.setDate(colNum, myDate); 
+0

Nie widzę metody getTime(). Czy mówisz o innym pakiecie niż http://docs.oracle.com/javase/7/docs/api/javax/xml/datatype/XMLGregorianCalendar.html? – ilinca

+2

@ilinca Metoda getTime() należy do klasy GregorianCalendar. Musisz przeanalizować XMLGregorianCalendar w kalendarzu gregoriańskim, używając metody .toGregorianCalendar(), jak pokazano powyżej. – Mathter

2

Jeśli chcesz wstawić datę na bazie chciałbym najpierw zrobić co Daniel sugerowanej:

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

a potem wstawić go przez PreparedStatement jako znacznikiem czasu w milisekundach (czasu Epoki) . W ten sposób nie stracisz precyzji.

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

Oto bardziej jednoznacznej odpowiedzi:

Get wystąpienie Data od XMLGregorianCalendar przykład:

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

znalazłem ten kod z Convert XMLGregorianCalendar to Date in Java

formacie data instancji w formacie „MM/dd/rrrr gg: mm: ss a ", otrzymasz MM/DD/RRRR gg: mm: ss format AM

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

Od Convert Date to String in Java

Do wstawiania bazy byś zrobił, co Daniel sugerowaną

0

Można konwertować XMLGregorianCalendar java.util.Date do obiektu za pomocą tych dwóch wierszy kodu: -

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

Aby przekonwertować na java.slq.Data Object użyć tego kodu: -

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

Można zobaczyć pełny przykład here

0

Proszę korzystać z funkcji poniżej - wystarczy zdać instancji XMLGregorianCalendar i format daty, który chcesz (przykład format: "DD MMMM yyyy" - > 01 stycznia 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; 
} 
1

tl; dr

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

ja va.time

Nowoczesne podejście wykorzystuje klasy java.time, które zastąpiły kłopotliwe stare klasy Date, Calendar i GregorianCalendar.

Konwertuj ze starszych klas na java.time.

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

przekazywać wartości daty i czasu do bazy danych jak Date-Time obiektów, a nie jako ciągi.

Jeśli sterownik JDBC jest zgodny z JDBC 4.2 i nowszymi wersjami, możesz obsługiwać bezpośrednio typy java.time.

myPreparedStatement.setObject(… , zdt) ; 

Jeśli sterownik nie jest jeszcze zgodny, należy krótko przekonwertować na typ java.sql.

myPreparedStatement.setTimestamp(… , java.sql.Timestamp.from (zdt.toInstant())) ; 
Powiązane problemy