2010-01-05 27 views
18

Trong khi cố gắng chuyển đổi định dạng ngày, tôi nhận được một ngoại lệ: ngày không thể đếm được và không biết cách khắc phục sự cố này.Java: ngoại lệ ngày không thể gắn nhãn

Tôi nhận được một chuỗi đại diện cho ngày sự kiện và muốn hiển thị ngày này ở định dạng khác trong GUI.

Những gì tôi đang cố gắng làm là như sau:

private String modifyDateLayout(String inputDate){ 
     try { 
      //inputDate = "2010-01-04 01:32:27 UTC"; 
      Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate); 
      return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
      return "15.01.2010"; 
     } 
    } 

Dù sao dòng

String modifiedDateString = originalDate.toString(); 

là giả. Tôi muốn để có được một chuỗi ngày theo định dạng sau:

dd.MM.yyyy HH: mm: ss

và đầu vào Chuỗi ví dụ như sau:

2010-01-04 01:32:27 UTC

Có ai biết cách chuyển đổi ngày ví dụ (Chuỗi) ở trên thành định dạng chuỗi dd.MM.yyyy HH: mm: ss?

Cảm ơn bạn!

Chỉnh sửa: Tôi đã sửa định dạng ngày nhập sai nhưng vẫn không hoạt động. Trên đây là phương pháp được dán và bên dưới là hình ảnh màn hình từ phiên gỡ lỗi.

alt text http://img683.imageshack.us/img683/193/dateproblem.png

#UPDATE Tôi chạy

String[] timezones = TimeZone.getAvailableIDs(); 

và có UTC String trong mảng. Đó là một vấn đề kỳ lạ.

Tôi đã làm một bẩn hack mà làm việc:

private String modifyDateLayout(String inputDate){ 
    try { 
     inputDate = inputDate.replace(" UTC", ""); 
     Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse(inputDate); 
     return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
    } catch (ParseException e) { 
     e.printStackTrace(); 
     return "15.01.2010"; 
    } 
} 

Nhưng tôi vẫn muốn để chuyển đổi đầu vào gốc mà không cần cắt múi giờ đi.

Mã này được viết cho điện thoại Android sử dụng JDK 1.6.

+0

Tôi biết đây là một chủ đề dài trước đây nhưng để làm rõ những nghi ngờ về ngoại lệ phân tích cú pháp khi "UTC" có định dạng ngày. Mã bị hỏng trong Android. [Báo cáo lỗi Android] (http://code.google.com/p/android/issues/detail?id=14963) – Creniale

Trả lời

39

Cơ bản bạn đang làm ở đây là dựa trên Date#toString() đã có mẫu cố định. Để chuyển đổi một đối tượng Java Date thành một mẫu String có thể đọc được của con người, bạn cần SimpleDateFormat#format().

private String modifyDateLayout(String inputDate) throws ParseException{ 
    Date date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z").parse(inputDate); 
    return new SimpleDateFormat("dd.MM.yyyy HH:mm:ss").format(date); 
} 

Bằng cách này, "ngày unparseable" ngoại lệ có thể đây chỉ được ném bởi SimpleDateFormat#parse(). Điều này có nghĩa là inputDate không có trong mẫu mong đợi "yyyy-MM-dd HH:mm:ss z". Có thể bạn sẽ cần sửa đổi mẫu để khớp với mẫu thực tế của inputDate.

Cập nhật: Được rồi, tôi đã làm một thử nghiệm:

public static void main(String[] args) throws Exception { 
    String inputDate = "2010-01-04 01:32:27 UTC"; 
    String newDate = new Test().modifyDateLayout(inputDate); 
    System.out.println(newDate); 
} 

này in một cách chính xác:

03.01.2010 21:32:27 

(Tôi đang trên GMT-4)

Cập nhật 2: theo chỉnh sửa của bạn, bạn thực sự có một ParseException trên đó. Phần đáng ngờ nhất sẽ là múi giờ của UTC. Đây có phải là thực tế được biết đến tại môi trường Java của bạn không? Phiên bản Java nào và bạn đang sử dụng phiên bản hệ điều hành nào? Kiểm tra TimeZone.getAvailableIDs(). Phải có một UTC ở giữa.

+0

Vấn đề là dòng Date date = formatter.parse (inputDate); ném ngoại lệ. Tôi đã sửa định dạng đầu vào thành yyyy-MM-dd HH: mm: ss z nhưng nó vẫn ném một ngoại lệ. –

+0

Tôi mong rằng, hãy xem bản chỉnh sửa của tôi đã được thêm trước khi bạn nhận xét. Nếu bạn muốn được hỗ trợ thêm về việc tìm đúng mẫu, bạn sẽ cần phải đăng một ví dụ về giá trị ** inputDate' thực tế **. – BalusC

+1

Tôi gặp sự cố này để phân tích cú pháp ngày này: "11/10/2011 06:03:19 chiều tối" – DkAngelito

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