2012-01-05 21 views
72

Làm cách nào để chuyển đổi chuỗi thành LocalDate?Chuỗi để LocalDate

Tôi đã thấy ví dụ như:

LocalDate dt = new LocalDate("2005-11-12"); 

Nhưng chuỗi của tôi là như sau:

2005-nov-12 

Trả lời

62

Khi bạn sử dụng Joda Thời gian, bạn nên sử dụng DateTimeFormatter:

final DateTimeFormatter dtf = DateTimeFormat.forPattern("yyyy-MMM-dd"); 
final LocalDate dt = dtf.parseLocalDate(yourinput); 

Nếu sử dụng Java 8 hoặc mới hơn, sau đó tham khảo hertzi's answer

+1

+1 để sử dụng DateTimeFormatter.parseLocalDate(), mặc dù người dùng đang tìm kiếm tháng có 3 chữ cái. –

+1

Rất tiếc ... Đã sửa lỗi, cảm ơn (sẽ dạy tôi đọc thêm) – fge

+0

Cũng đã gửi bản chỉnh sửa cho định dạng "yyyy-MMM-dd". YYYY là năm của thời đại, và (hơn egregiously) DD là ngày trong năm. –

10

Bạn có thể phải đi từ DateTime để LOCALDATE.

DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd"); 
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12"); 
LocalDate localDate = dateTime.toLocalDate(); 
+1

cảm ơn bạn. điều này là hoàn hảo khi sử dụng các phiên bản cũ thiếu 'LocalDate.parse' và' DateTimeFormatter.parseLocalDate' – thedarklord47

6

Datetime định dạng được thực hiện bởi các org.joda.time.format.DateTimeFormatter class . Ba lớp cung cấp các phương thức nhà máy để tạo các trình định dạng và đây là một phương thức. Những người khác là ISODateTimeFormatDateTimeFormatterBuilder.

DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MMM-dd"); 
LocalDate lDate = new LocalDate().parse("2005-nov-12",format); 

final org.joda.time.LocalDate class là một lớp datetime bất biến đại diện cho một ngày không có múi giờ. LocalDatean toàn và không thay đổi được, với điều kiện là Chronology cũng vậy. Tất cả các lớp Chronology tiêu chuẩn được cung cấp đều an toàn và không thay đổi được.

132

Kể từ Java 1.8, bạn có thể đạt được điều này mà không có một thư viện thêm:

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MMM-dd"); 
formatter = formatter.withLocale(putAppropriateLocaleHere); // Locale specifies human language for translating, and cultural norms for lowercase/uppercase and abbreviations and such. Example: Locale.US or Locale.CANADA_FRENCH 
LocalDate date = LocalDate.parse("2005-nov-12", formatter); 

Cú pháp là gần như nhau mặc dù.

+0

java.time.format.DateTimeParseException: Văn bản '2005-nov-12' không thể được phân tích cú pháp tại chỉ mục 5 –

+3

Điều này xảy ra vì Locale mặc định của bạn mong đợi 'N' của 'Nov' là chữ hoa. – hertzi

+0

Xem [Câu trả lời của tôi] (http://stackoverflow.com/a/38904830/642706) cho một câu hỏi tương tự để thảo luận thêm về cách tiếp cận này. –

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