이 질문은 How to parse ZonedDateTime with default zone?과 유사하지만 추가 조건이 있습니다.시간이없는 문자열을 ZonedDateTime의 로컬 형식으로 구문 분석하는 방법은 무엇입니까?
영국 형식의 날짜 인 "3/6/09"를 나타내는 문자열 매개 변수가 있습니다. 시간이없고 날짜 만 포함되어 있습니다. 하지만 시간대가 포함될 수 있습니다. 그리고 저는 이것을 ZonedDateTime
으로 파싱하고 싶습니다.
public static ZonedDateTime parse(String value) {
DateTimeFormatter formatter = DateTimeFormatter.ofLocalizedDateTime(SHORT).withLocale(Locale.UK).withZone(ZoneId.systemDefault());
TemporalAccessor temporalAccessor = formatter.parseBest(value, ZonedDateTime::from, LocalDateTime::from, LocalDate::from);
if (temporalAccessor instanceof ZonedDateTime) {
return ((ZonedDateTime) temporalAccessor);
}
if (temporalAccessor instanceof LocalDateTime) {
return ((LocalDateTime) temporalAccessor).atZone(ZoneId.systemDefault());
}
return ((LocalDate) temporalAccessor).atStartOfDay(ZoneId.systemDefault());
}
는하지만, 그것은 예외와 함께 실패합니다
java.time.format.DateTimeParseException: Text '3/6/2009' could not be parsed at index 6
그것은 나를 위해 버그, 또는하지?
홈페이지 이의이다 : 당신은'DateTimeFormatter를 사용합니다. ofLocalizedDateTime (...) '입력에 적어도 시간 또는 시간 구성 요소가 있어야합니다. 또 다른 관찰 :'DateTimeFormatter.ofLocalizedDate (...)'가 실패하는 동안 old pre8-code'Date d = DateFormat.getDateInstance (DateFormat.SHORT, Locale.UK) .parse (input); 어쩌면 오라클이 Threeten 라이브러리의 SHORT 형식을 변경했을 수도 있습니다. 당신은 아마도 명백한 패턴을 선호하고 다시 시도해야합니다. 그건 그렇고, instanceof - 표현과 같은 코드는 오히려 내 눈을 아프게 (죄송합니다). –
과거의 긍정적 인 경험 만하지는 않았지만 입력의 선택적 부분을 보완하기 위해'DateTimeFormatterBuilder.parseDefaulting()'및/또는 선택 섹션을 실험 해 볼 수도 있습니다. –