ฉันจะแปลงสตริงเป็น a ได้LocalDate
อย่างไร?
ฉันเคยเห็นตัวอย่างเช่น:
LocalDate dt = new LocalDate("2005-11-12");
แต่สตริงของฉันเป็นเหมือน:
2005-nov-12
ฉันจะแปลงสตริงเป็น a ได้LocalDate
อย่างไร?
ฉันเคยเห็นตัวอย่างเช่น:
LocalDate dt = new LocalDate("2005-11-12");
แต่สตริงของฉันเป็นเหมือน:
2005-nov-12
คำตอบ:
ในขณะที่คุณใช้ Joda Time คุณควรใช้DateTimeFormatter
:
final DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy-MMM-dd");
final LocalDate dt = dtf.parseLocalDate(yourinput);
หากใช้ Java 8 หรือใหม่กว่าให้อ้างอิงคำตอบของ hertzi
ตั้งแต่ Java 1.8 คุณสามารถทำได้โดยไม่ต้องมีไลบรารีเพิ่มเติมโดยใช้คลาสjava.time ดูการสอน
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);
ไวยากรณ์เกือบจะเหมือนกัน
คุณอาจต้องเปลี่ยนจาก DateTime เป็น LocalDate
ใช้ Joda Time:
DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MMM-dd");
DateTime dateTime = FORMATTER.parseDateTime("2005-nov-12");
LocalDate localDate = dateTime.toLocalDate();
การจัดรูปแบบวันที่และเวลาดำเนินการโดยorg.joda.time.format.DateTimeFormatter class
. สามคลาสมีวิธีการจากโรงงานในการสร้างฟอร์แมตและนี่คือหนึ่ง อื่น ๆ คือISODateTimeFormat
และDateTimeFormatterBuilder
.
DateTimeFormatter format = DateTimeFormat.forPattern("yyyy-MMM-dd");
LocalDate lDate = new LocalDate().parse("2005-nov-12",format);
final org.joda.time.LocalDate class
เป็นระดับ datetime ไม่เปลี่ยนรูปเป็นตัวแทนของวันที่ไม่มีเขตเวลาที่ LocalDate
มีความปลอดภัยต่อเธรดและไม่เปลี่ยนรูปโดยมีเงื่อนไขว่าลำดับเหตุการณ์เป็นเช่นกัน คลาส Chronology มาตรฐานทั้งหมดที่ให้มานั้นปลอดภัยต่อเกลียวและไม่เปลี่ยนรูป
DateTimeFormatter
มีรูปแบบในตัวที่สามารถใช้เพื่อแยกวิเคราะห์ลำดับอักขระได้โดยตรง เป็นกรณีที่มีความละเอียดอ่อนพฤศจิกายนจะใช้งานได้อย่างไรก็ตามพฤศจิกายนและพฤศจิกายนจะไม่ทำงาน:
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
ให้วิธีสร้างฟอร์แมตเตอร์แบบกำหนดเอง ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่, พ.ย. , พ.ย. และ พ.ย. จะถือว่าเหมือนกัน
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
}