2011-06-20 24 views
13

trong Java, cách phân tích chuỗi ngày có chứa một chữ cái không đại diện cho một mẫu?java SimpleDateFormat

 
"2007-11-02T14:46:03+01:00" 
 
String date ="2007-11-02T14:46:03+01:00"; 
String format = "yyyy-MM-ddTHH:mm:ssz"; 
new SimpleDateFormat(format).parse(date); 

Exception in thread "main" java.lang.IllegalArgumentException: Illegal pattern character 'T' 
    at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:769) 
    at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:576) 
    at java.text.SimpleDateFormat.(SimpleDateFormat.java:501) 
    at java.text.SimpleDateFormat.(SimpleDateFormat.java:476) 
+1

Lưu ý rằng câu hỏi về phân tích ngày ISO 8601 là một câu hỏi thường gặp và được trả lời. Tìm kiếm "Java ISO 8601 date" hoặc một cái gì đó tương tự và bạn sẽ tìm thấy nhiều câu trả lời. – Jesper

+0

Ví dụ: http://stackoverflow.com/questions/6279647/converting-a-string-to-date-almost-done/6280206#6280206 – Jesper

Trả lời

5

Thời gian bạn đang cố gắng để phân tích dường như là trong ISO 8601 format. SimpleDateFormat không may không hỗ trợ tất cả các định danh múi giờ giống như ISO 8601. Nếu bạn muốn có thể xử lý đúng tất cả các biểu mẫu được chỉ định trong ISO, điều tốt nhất cần làm là sử dụng Joda time.

Ví dụ này là thẳng ra khỏi user guide:

DateTime dt = new DateTime("2004-12-13T21:39:45.618-08:00"); 
+0

điều này không hoạt động, +01: 00 cần phải là +0100 để joda hoạt động. – user775187

+1

@user - bạn nói đúng, phiên bản ISO không thích dấu hai chấm. Tin tốt là bạn có thể truyền phiên bản với dấu hai chấm thẳng đến hàm tạo 'DateTime'. –

19

Bạn có thể thử

String format = "yyyy-MM-dd'T'HH:mm:ssz"; 

tham khảo: từ Javadoc

Văn bản có thể được trích dẫn sử dụng dấu nháy đơn (') để tránh việc giải thích.

+1

Chỉ hoạt động nếu chuỗi chứa 'GMT'. Giống như thế này: String date = "2007-11-02T14: 46: 03GMT + 01: 00"; –

+0

@Hendra đúng hoặc phải là 'Chuỗi ngày =" 2007-11-02T14: 46: 03 + 0100 ";' 'SimpleDateTime' là khá hạn chế trong các tình huống như vậy mà tôi đoán nếu bạn (OP) don ' t có nhiều quyền kiểm soát đối với đầu vào, sử dụng các thư viện như thời gian joda sẽ làm việc tốt nhất. –

0
String testDate = "2007-11-02T14:46:03+01:00"; 
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssz"); 
Date date = formatter.parse(testDate); 
System.out.println(date); 

Bạn có thể thử tương tự như trên

Bạn có thể sử dụng sau đây link để tham khảo

+0

không, điều này ném ParseException – user775187

0

Nếu bạn không quan tâm về múi giờ, bạn có thể sử dụng phương pháp này.

public static Date convertToDate(String strDate) throws ParseException { 
    Date date = null; 
    if (strDate != null) { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss"); 
     date = sdf.parse(strDate); 
    } 
    return date; 
    } 

Tôi không biết nếu nó vẫn hữu ích cho bạn, nhưng tôi gặp phải cùng một vấn đề ngay bây giờ, và sau một chút tôi đi lên với điều này.

Các vấn đề liên quan