Làm cách nào để chuyển đổi một chuỗi thành một chuỗi ký tự LocalDate
?
Tôi đã thấy các ví dụ như:
LocalDate dt = new LocalDate("2005-11-12");
Nhưng chuỗi của tôi giống như:
2005-nov-12
Làm cách nào để chuyển đổi một chuỗi thành một chuỗi ký tự LocalDate
?
Tôi đã thấy các ví dụ như:
LocalDate dt = new LocalDate("2005-11-12");
Nhưng chuỗi của tôi giống như:
2005-nov-12
Câu trả lời:
Khi bạn sử dụng Joda Time, bạn nên sử dụng DateTimeFormatter
:
final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinput);
Nếu sử dụng Java 8 trở lên, hãy tham khảo câu trả lời của hertzi
Kể từ Java 1.8, bạn có thể đạt được điều này mà không cần thêm thư viện bằng cách sử dụng các lớp java.time . Xem Hướng dẫn .
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);
Mặc dù vậy, cú pháp gần giống nhau.
Bạn có thể phải chuyển từ DateTime sang LocalDate.
Sử dụng Joda Time:
DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd");
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12");
LocalDate localDate = dateTime.toLocalDate();
Định dạng ngày giờ được thực hiện bởi org.joda.time.format.DateTimeFormatter class
. Ba lớp cung cấp các phương thức gốc để tạo các bộ định dạng và đây là một. Những người khác là ISODateTimeFormat
và DateTimeFormatterBuilder
.
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ờ . LocalDate
là thread-safe và bất biến , với điều kiện Niên là là tốt. Tất cả các lớp Chronology tiêu chuẩn được cung cấp đều an toàn theo luồng và không thay đổi.
DateTimeFormatter
có các định dạng được tạo sẵn có thể được sử dụng trực tiếp để phân tích một chuỗi ký tự. Phân biệt chữ hoa chữ thường, tháng 11 sẽ hoạt động tuy nhiên nov và NOV sẽ không hoạt động:
DateTimeFormatter pattern = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
try {
LocalDate datetime = LocalDate.parse(oldDate, pattern);
System.out.println(datetime);
} catch (DateTimeParseException e) {
// DateTimeParseException - Text '2019-nov-12' could not be parsed at index 5
// Exception handling message/mechanism/logging as per company standard
}
DateTimeFormatterBuilder
cung cấp cách tùy chỉnh để tạo một định dạng. Nó không phân biệt chữ hoa chữ thường, tháng 11, tháng 11 và tháng 11 sẽ được coi như nhau.
DateTimeFormatter f = new DateTimeFormatterBuilder().parseCaseInsensitive()
.append(DateTimeFormatter.ofPattern("yyyy-MMM-dd")).toFormatter();
try {
LocalDate datetime = LocalDate.parse(oldDate, f);
System.out.println(datetime); // 2019-11-12
} catch (DateTimeParseException e) {
// Exception handling message/mechanism/logging as per company standard
}