2014-12-19 15 views
21

DateTimeFormmater dường như không để xử lý ngày chữ số duy nhất của tháng:DateTimeFormatter Hỗ trợ cho đơn ngày Digit của tháng và tháng Năm

String format = "MM/dd/yyyy"; 
String date = "5/3/1969"; 
System.out.println(new SimpleDateFormat(format).parse(date)); 
System.out.println(LocalDate.parse(date, DateTimeFormatter.ofPattern(format))); 

Trong ví dụ này, SimpleDateFormat phân tích một cách chính xác ngày, nhưng DateTimeFormatter ném một ngoại lệ. Nếu tôi sử dụng ngày đệm không, ví dụ: "05/03/1969", cả hai đều hoạt động. Tuy nhiên, nếu ngày của tháng hoặc tháng trong năm là một chữ số, thì DateTimeFormatter sẽ ném một ngoại lệ.

Định dạng DateTimeFormatter đúng để phân tích cả ngày một và hai chữ số của tháng và tháng trong năm là gì?

+0

Bạn đã giải quyết vấn đề này chưa? Tôi cũng đang xem xét một giải pháp java8 để phân tích cú pháp 1 hoặc 2 chữ số tháng, hoặc 2 hoặc 4 chữ số năm. – user607455

Trả lời

35

Từ the documentation:

Số: Nếu đếm các chữ cái là một, thì giá trị là đầu ra bằng cách sử dụng số lượng tối thiểu của các chữ số và không có đệm.

Vì vậy, trình định dạng định dạng bạn muốn là M/d/yyyy, sử dụng các biểu mẫu thư đơn. Tất nhiên, nó sẽ vẫn phân tích cú pháp ngày String s như "12/30/1969" chính xác như đối với các giá trị ngày/tháng này, hai chữ số là "số chữ số tối thiểu".

Sự khác biệt quan trọng là MMdd yêu cầu không đệm, không phải là Md không thể xử lý các giá trị lớn hơn 9 (mà có thể là một chút ... không bình thường).

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