2014-10-16 23 views
6

Tôi cần phải phân tích cú pháp một chuỗi cho đến nay trong java. chuỗi của tôi có định dạng sau:Chuỗi phân tích cú pháp cho đến nay: Ký tự mẫu bất hợp pháp 'T'.

2014-09-17T12:00:44.0000000Z 

nhưng java ném ngoại lệ sau khi cố gắng phân tích định dạng như vậy ... java.lang.IllegalArgumentException: Illegal pattern character 'T'.

Bất kỳ ý tưởng nào về cách phân tích cú pháp đó?

Cảm ơn bạn!

+3

Làm cách nào để phân tích cú pháp? –

+1

current_date = formatter.parse (ngày) – mbezunartea

+0

Thêm đối tượng định dạng cũng vào đây –

Trả lời

12

Với đầu vào của bạn của 2014-09-17T12:00:44.0000000Z, nó không phải là đủ để thoát khỏi thư T chỉ. Bạn cũng phải xử lý dấu vết Z. Nhưng lưu ý rằng, điều này Z KHÔNG phải là một chữ, nhưng có ý nghĩa của UTC+00:00 bù đắp múi giờ theo ISO-8601-standard. Vì vậy, thoát Z là không chính xác.

SimpleDateFormat xử lý char đặc biệt này Z theo biểu tượng mẫu X. Vì vậy, giải pháp cuối cùng trông giống như:

SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSSSSSX"); 
Date d = sdf.parse("2014-09-17T12:00:44.0000000Z"); 
System.out.println(d); // output: Wed Sep 17 14:00:44 CEST 2014 

Lưu ý rằng thời gian đồng hồ khác nhau phù hợp với múi giờ CEST (toString() sử dụng hệ thống múi giờ), và kết quả là tương đương với UTC-time 12:00:44. Hơn nữa, tôi đã phải chèn bảy ký hiệu S để xử lý chính xác đầu vào của bạn mà giả vờ có độ chính xác xuống 100ns (mặc dù Java trước 8 chỉ có thể xử lý mili giây).

+0

nhưng một nhận xét, bạn cần phải thay thế ký tự X cuối cùng bằng 'Z' trong hàm tạo SimpleDateFormat. Giải pháp tốt, đã làm việc cho tôi –

+0

@VictorPonomarenko Ký hiệu X được giới thiệu với Java 7. Đối với Java 6, tôi không chắc liệu Z hoạt động như ý nghĩa thay thế nếu chữ "Z" được phân tích cú pháp sẽ được nhận dạng là UTC + 00! Có lẽ nó là tốt hơn để sử dụng workaround cho Java 6 để thoát Z (giải thích nó chỉ là chữ) VÀ để đặt khu vực để "GMT" trên 'SimpleDateFormat'-đối tượng. –

+0

trên android Tôi nhận được ngoại lệ thời gian chạy, khi để lại ký tự X, nhưng sau khi thay thế cho 'Z' hoạt động tốt (android hiện hoạt động trên java 7) –

7

Bạn phải thoát khỏi nhân vật 'T':

SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", Locale.US); 
    format.setTimeZone(TimeZone.getTimeZone("UTC")); 
    Date parse = format.parse("2014-09-17T12:00:44.0000000Z"); 

dùng trả lời cho: What is this date format? 2011-08-12T20:17:46.384Z

+0

Cảm ơn câu trả lời của bạn, bây giờ tôi không có ngoại lệ tương tự, nhưng điều này: "java.text.ParseException: Unparseable date:" Date "". Tôi nghĩ Định dạng ngày chưa được xác định rõ ... – mbezunartea

1

Hãy thử điều này.

import java.text.ParseException; 
import java.text.SimpleDateFormat; 
import java.util.Date; 

public class DateClass { 
    public static void main(String[] args) throws ParseException { 
     SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"); 
     Date d = sdf.parse("2014-09-17T12:00:44.0000000Z"); 
     System.out.println(d); //output Wed Sep 17 12:00:44 IST 2014 
    } 
} 
Các vấn đề liên quan