2013-01-03 34 views
5

Tôi đang gặp một số sự cố khi chuyển đổi đối tượng lịch sang lịch XMLGregorian theo định dạng YYYY-MM-DD HH:mm:ss.Chuyển đổi Lịch thành XMLGregorianCalendar với định dạng cụ thể

mã hiện tại của tôi là:

Calendar createDate = tRow.getBasic().getDateCreated(0).getSearchValue(); 
Date cDate = createDate.getTime(); 
GregorianCalendar c = new GregorianCalendar(); 
c.setTime(cDate); 
XMLGregorianCalendar date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(c); 

mà trả về một ngày 2013-01-03T11:50:00.000-05:00.

Tôi muốn đọc 2013-01-03 11:50:00.

Tôi đã kiểm tra một loạt bài đăng, sử dụng DateFormat để phân tích cú pháp biểu diễn chuỗi ngày, tuy nhiên ngày của tôi được cung cấp cho tôi dưới dạng đối tượng Lịch chứ không phải chuỗi.

Tôi đánh giá cao việc di chuyển đúng hướng để giúp tôi hình dung điều này.

Trả lời

2

Một XMLGregorianCalendar có một chuỗi đại diện W3C cụ thể mà bạn không thể thay đổi.

Tuy nhiên, bạn có thể định dạng Date bằng SimpleDateFormat.

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
String dateStr = dateFormat.format(cDate); 

Bạn có thể nhận được một đối tượng Date từ một đối tượng XMLGregorianCalendar như sau:

xmlCalendar.getGregorianCalendar().getDate() 
+1

Tôi không cần để có được một ngày từ một XMLGregorianCalendar, nhưng thay vì thiết lập nó. XMLGregorianCalendar được yêu cầu bởi một dịch vụ web nhận. –

+0

Phải, nếu bạn muốn định dạng ngày khác với mặc định thì bạn cần sử dụng đối tượng 'Ngày'. Bạn bắt đầu với một trong số đó, vì vậy bạn không cần XMLGregorianCalendar chút nào. –

+0

Vâng, tôi đã hy vọng tôi có thể tránh chỉnh sửa các lớp được tạo từ XMLGreg ... thành Ngày, nhưng có vẻ như tôi phải anyways –

1

DateFormat#format nhận tham số Object. Từ bộ nhớ, nó nên chấp nhận một đối tượng Calendar, nếu không, nó sẽ chấp nhận một đối tượng Date, vì vậy bạn có thể sử dụng Calendar#getTime như một kịch bản trường hợp nặng hơn

Bạn có thể sử dụng một thể hiện của SimpleDateFormat để xác định một định dạng tùy chỉnh. Điều này sẽ đảm bảo rằng kết quả luôn giống nhau đối với các hệ thống khác nhau

0

Bạn đã thấy hướng dẫn này có thể hữu ích không?

http://www.vogella.com/articles/JavaDateTimeAPI/article.html

Speicifcally mã này là một ví dụ điển hình:

// Format the output with leading zeros for days and month 
SimpleDateFormat date_format = new SimpleDateFormat("yyyyMMdd"); 
System.out.println(date_format.format(cal1.getTime())); 
Các vấn đề liên quan