2013-05-23 14 views
16

Tôi có một ngày ở định dạng XMLGregorianCalendar như "2013-05-16T09: 54: 13" mà tôi phải chuyển đổi thành dấu thời gian "MM/DD/YYYY hh: mm: ss AM "để chèn vào bảng cơ sở dữ liệu oracle bằng java.chuyển đổi XMLGregorianCalendar thành ngày có nghĩa là "MM/DD/YYYY hh: mm: ss AM"

làm cách nào tôi có thể thực hiện điều này trong java?

cảm ơn trước ...

+0

Một bản sao của http://stackoverflow.com/questions/882420/string-to-date-in-different-format-in-java – AurA

+0

Bạn không định dạng timestamp trước khi chèn vào DB. Bạn sử dụng lớp java.util.Date. –

Trả lời

28

Bạn có thể làm điều này để trả lại một Date:

calendar.toGregorianCalendar().getTime() 

tôi thấy mã mà từ this tutorial. Từ đó, bạn có thể sử dụng một số SimpleDateFormat để biến nó thành một chuỗi theo định dạng bạn muốn.

Nhưng, nếu bạn đang sử dụng JDBC để lưu các ngày trong cơ sở dữ liệu, bạn có thể có thể vượt qua trong Date trực tiếp với this method:

preparedStatement.setDate(colNum, myDate); 
+0

Tôi không thể thấy phương thức getTime(). Bạn đang nói về một gói khác với http://docs.oracle.com/javase/7/docs/api/javax/xml/datatype/XMLGregorianCalendar.html? – ilinca

+2

@ilinca phương thức getTime() thuộc về lớp GregorianCalendar. Bạn cần phải phân tích cú pháp XMLGregorianCalendar thành GregorianCalendar bằng cách sử dụng phương thức .toGregorianCalendar() như hiển thị ở trên. – Mathter

2

Nếu bạn muốn chèn ngày của bạn trên một cơ sở dữ liệu đầu tiên tôi sẽ làm những gì Daniel đề nghị:

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

và sau đó chèn nó thông qua một PreparedStatement như Timestamp trong mili giây (thời gian Epoch) . Bằng cách đó bạn sẽ không mất độ chính xác.

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

Dưới đây là câu trả lời rõ ràng hơn:

Nhận thể hiện của ngày từ XMLGregorianCalendar dụ:

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

tôi thấy rằng mã từ Convert XMLGregorianCalendar to Date in Java

Format rằng Ngày dụ với định dạng "MM/dd/yyyy hh: mm: ss a ", bạn sẽ nhận được định dạng MM/DD/YYYY hh: mm: ss AM

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

Từ Convert Date to String in Java

Để chèn cơ sở dữ liệu bạn sẽ làm gì Daniel đề nghị

0

Bạn có thể chuyển đổi XMLGregorianCalendar để java.util.Date Object bằng cách sử dụng hai dòng sau mã: -

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

Để chuyển đổi sang java.slq.Ngày Object sử dụng mã này: -

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

Bạn có thể xem ví dụ hoàn chỉnh here

0

Vui lòng sử dụng chức năng dưới đây - chỉ cần vượt qua dụ XMLGregorianCalendar và ngày định dạng mà bạn muốn (định dạng Ví dụ: "DD MMMM yyyy" - > 1 tháng 1 năm 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

Cách tiếp cận hiện đại sử dụng các lớp java.time đã thay thế các lớp cũ phiền hà Date, CalendarGregorianCalendar.

Chuyển đổi từ các lớp cũ sang java.time.

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

đèo giá trị ngày thời gian tới cơ sở dữ liệu của bạn như ngày thời gian đối tượng chứ không phải là chuỗi.

Nếu trình điều khiển JDBC của bạn tuân thủ JDBC 4.2 trở lên, bạn có thể xử lý trực tiếp với các loại java.time.

myPreparedStatement.setObject(… , zdt) ; 

Nếu trình điều khiển của bạn chưa tuân thủ, hãy chuyển đổi ngắn gọn sang loại java.sql.

myPreparedStatement.setTimestamp(… , java.sql.Timestamp.from (zdt.toInstant())) ;