LocalDate에 대한 문자열


102

문자열을 LocalDate어떻게?

다음과 같은 예를 보았습니다.

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

하지만 내 문자열은 다음과 같습니다.

2005-nov-12

답변:


78

Joda Time을 사용할 때 다음을 사용해야합니다 DateTimeFormatter.

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

Java 8 이상을 사용하는 경우 hertzi의 답변 을 참조하십시오.


또한 "yyyy-MMM-dd"형식에 대한 수정 사항을 제출했습니다. YYYY는 연대이며 (더 심각하게는) DD는 연중 일입니다.
Spencer Kormos

대답은 약간 잘못되었습니다 ... joda 시간의 경우 사용할 클래스는 DateTimeFormatter가 아닌 DateTimeFormat입니다. 즉, DateTimeFormat.ofPattern ( "yyyy-MM-dd"). parseLocalDate (yourInput);
Dan Haywood

188

java.time

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);

구문은 거의 동일합니다.


java.time.format.DateTimeParseException : '2005-nov-12'텍스트를 색인 5에서 구문 분석 할 수 없음
Atte Juvonen

3
이것은 기본 로케일이 'Nov'의 'N'이 대문자가 될 것으로 예상하기 때문에 발생합니다.
hertzi

이 접근 방식에 대한 자세한 내용은 유사한 질문에 대한 답변 을 참조하십시오 .
Basil Bourque

14

DateTime에서 LocalDate로 이동해야 할 수 있습니다.

Joda 시간 사용 :

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

2
이 답변은 Java SE가 아닌 Joda를 나타냅니다.
DavidS

9

날짜 시간 형식화는 org.joda.time.format.DateTimeFormatter class. 세 개의 클래스는 포맷터를 생성 하는 팩토리 메서드를 제공 하며 이것은 하나입니다. 나머지는 ISODateTimeFormatDateTimeFormatterBuilder입니다.

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 클래스는 스레드로부터 안전하며 변경할 수 없습니다.


1

DateTimeFormatter 문자 시퀀스를 구문 분석하는 데 직접 사용할 수있는 내장 형식이 있습니다. 대소 문자를 구분하며 Nov는 작동하지만 nov 및 NOV는 작동하지 않습니다.

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포맷터를 만드는 사용자 지정 방법을 제공합니다. 대소 문자를 구분하지 않습니다. Nov, nov 및 NOV는 동일하게 처리됩니다.

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
}

1
SO에 오신 것을 환영합니다. 귀하의 의견에 감사드립니다! 답변을 수정하고 더 많은 설명을 제공하고 질문과의 관계, 솔루션을 어디서 얻었으며 왜 작동합니까? 더 안내를 참조 stackoverflow.com/help/how-to-answer을
B - RIAN
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.