>source

두 개의 다른 형식으로 간다는 문자열로 날짜 시간을 파싱해야합니다.

  • 19861221235959z
  • 1986-12-21T23 : 59 : 59z

다음 DateTimeFormatter 패턴은 첫 번째 종류의 날짜 문자열을 제대로 구문 분석합니다.

DateTimeFormatter.ofPattern ("uuuuMMddHHmmss[,S][.S]X")

그러나 대시로 두 번째로 실패하고 콜론 및 T가 예상되지 않습니다.

나의 시도는 다음과 같이 선택적 섹션을 사용하는 것이 었습니다.

DateTimeFormatter.ofPattern ("uuuu[-]MM[-]dd['T']HH[:]mm[:]ss[,S][.S]X")

예기치 않게, 이것은 두 번째 종류의 날짜 문자열 (대시를 가진 하나)을 구문 분석하지만 첫 번째 종류는

java.time.format.DateTimeParseException: Text '19861221235959Z' could not be parsed at index 0

선택 사항은 선택 사항으로 평가되지 않는 것처럼 ...

19861221235959는 올해 인 것처럼 보입니다. 파싱 ​​할 때 4 자리 멈추지 않으면 서식을 지정할 때 4 자리 숫자 만 있습니다.

Peter Lawrey2021-06-16 09:43:47

@Peter Lawrey 당신은 그 위에 조금 더 정교해질 수 있습니까? 나는 당신의 포인트를 이해하지 못합니다

Cec2021-06-16 09:43:47

나는 그것이 일할 것임을 당신의 시점을 취하지 만, 당신이 내용이나 길이를 엿보고 하나 또는 다른 형식을 시도해야합니다.

Peter Lawrey2021-06-16 09:43:47

감사합니다. 당신이 제안한 해결 방법을 알려주는 해결 방법을 알려주고 문자열 콘텐츠로 인한 차별을 낼 것입니다. 이것이 Java의 실제 버그인지 궁금합니다 ...

Cec2021-06-16 09:43:47

첫 번째 형식은 모든 후속 필드가 고정 된 폭이면 첫 번째 필드가 가변 폭이면 첫 번째 필드가 가변 폭이 될 수있는 "인접한 값 구문 분석"을 사용합니다. 필드가 대시에 의해 구분되기 때문에 두 번째 형식은 인접한 값 구문 분석을 사용하지 않습니다 (이들은 인접하지 않습니다!). docs.oracle.com/javase/8/docs/api/java/time/format/...를 참조하십시오.

JodaStephen2021-06-16 09:43:47
  • 이전 .net : Visual Studio의 바로 가기가 XAML code로 바로 뒤에서 전환 할 수 있습니까?
  • 다음 MySQL : 업데이트 트리거가 모든 쿼리를 위해 작동하지 않기 전에