2014-04-17 13 views
6

Một trong những API bên ngoài chúng tôi sử dụng đòi hỏi phải có định dạngJava SimpleDateFormat cho YYYY-MM-DDThh: mm: ssTZD

"YYYY-MM-DDThh:mm:ssTZD"

để được thông qua trong

XMLGregorianCalendar

đối tượng. Tôi không chắc chắn nếu có bất cứ điều gì trong Java hỗ trợ "T". Tôi đã tự hỏi, nếu một ngày có thể được phân tích cú pháp sang định dạng trên trong Java? Một ví dụ về một ngày hợp lệ họ đã cung cấp là

"2009-07-16T19:20:30-05:00" ............

Update: 

     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZZZ");   
     GregorianCalendar gc = new GregorianCalendar(); 
     String dateString = sdf.format(gc.getTime());  
     gc.setTime(sdf.parse(dateString));  
     XMLGregorianCalendar date2 = DatatypeFactory.newInstance().newXMLGregorianCalendar(gc); 

Output:

2014-04-17T13: 11: 30.000 01: 00

+0

Kiểm tra cập nhật câu trả lời của tôi –

Trả lời

15

Sử dụng JodaTime'sDateTimeFormat API với "yyyy-MM-dd'T'HH:mm:ssZ" ngày mẫu

String date = "2009-07-16T19:20:30-05:00"; 
String pattern = "yyyy-MM-dd'T'HH:mm:ssZ"; 
DateTimeFormatter dtf = DateTimeFormat.forPattern(pattern); 
DateTime dateTime = dtf.parseDateTime(date); 
System.out.println(dateTime); // 2009-07-16T19:20:30-05:00 
+0

gì nếu tôi có mô hình như thế này "yyyy-MM-DDThh: mm: SSZ" (T không dấu nháy đơn), Có cách nào để khắc phục để phân tích điều này để đối tượng Date? –

2

Bạn cần phải đặt nó trong dấu nháy đơn.

Hãy thử

YYYY-mm-dd'T'hh:MM:ssZ 
+0

Xin chào Pete, tôi đã thử nó nhưng bằng cách nào đó nó gắn thêm "000". Vui lòng xem câu trả lời cập nhật của tôi. – Abidi

3

Hãy thử Java 8 LocalDateTime.parse

Bạn cũng có thể sử dụng threeten nếu bạn đang ở trên một sớm Version Java.

Ví dụ: DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ssZ").format(yourLocalDateTime)

0

Có, bạn can.Try formatter ngày này.

DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); 
Các vấn đề liên quan