4 자리 연도 (조다 시간과 함께) 만 말하는 방법은 무엇입니까?

StackOverflow https://stackoverflow.com/questions/1612150

  •  05-07-2019
  •  | 
  •  

문제

Joda가 4 자리를 포함 할 때만 날짜를 구문 분석 할 수있는 방법이 있습니까? 예를 들어:

  • 2009-11-11- 구문 분석해야합니다
  • 09-11-11- 구문 분석해서는 안됩니다

다음 코드를 시도했습니다.

DateTimeFormatterBuilder builder = new DateTimeFormatterBuilder();
DateTimeFormatter formatter = builder.appendYear(4, 4).appendLiteral('-').appendMonthOfYear(1).appendLiteral('-').appendDayOfMonth(1).toFormatter();
formatter.parseDateTime("09-11-11");

0009-11-11로 구문 분석. 분명히 Mindigits Method Appendyear는 날짜를 인쇄 할 때만 서식하는 데만 사용됩니다.
부록을 사용하는 경우 결과는 동일합니다 (). 부록 Century ()를 사용하면 1909 년으로 연도를 구문 분석합니다.

우리는 다양한 유형의 입력을 인식하는 일반적인 데이터 파서를 구현하고 있습니다. 또한 그 예는 실제 거래의 단축 형태 (단순성)입니다. 실제 시나리오는 평일, 몇 달, 단어, 시간, 영역 및 다른 문자를 월, 일 및 연도를 분리하는 다른 캐릭터를 가질 수있는 날짜를 구문 분석합니다. 따라서 정규식을 작성하거나 문자열의 내용/길이를 확인하는 것은 다소 어려울 수 있습니다.

몇 가지 실제 예는 다음과 같이 보일 수 있습니다.

  • 2009-11-11
  • 2009-11-11T15 : 00 : 00
  • 2009/11/11 15:00
  • 그리고 더 많은...
도움이 되었습니까?

해결책

DateTimeFormatterBuilder.appendFixEdDecimal ()이 필요한 것을 잘 할 수 있습니다.

또는 DateTimeParser 인터페이스를 구현하여 원하는 파서를 만들고 DateTimeFormatterBuilder로 전달할 수 있습니다.

다른 팁

날짜 문자열의 길이를 확인할 수 있습니다.

당신은 매우 구체적인 구문 분석기와 형성자를 만들 수 있습니다 DateTimeFormatterBuilder. 대부분의 일반적인 형식은 API의 다른 곳에서 더 쉽게 구할 수 있기 때문에 일반적 으로이 클래스를 직접 사용할 필요가 없지만, 이들은 모두 커버에서 사용하는 빌더 클래스입니다.

날짜로 '0001-01-01'을 입력 한 사용자로부터 무엇을 얻고 싶습니까 (즉, 올해 4 자리를 입력했지만 처음 3 개는 0 이었습니까? '0999-12-31'은 어떻습니까? 그리고 '999-12-31'? 그리고 '10000-01-01'-악명 높은 Y10K1 문제?

  • 그것이 합법적 인 가치라면, 당신은 날짜의 연도 부분 (아마도 다른 구문 분석이 완료된 후)으로 입력 한 사용자의 길이를 발견하고 적어도 (또는 정확히 정확히 있는지 확인하는 것입니다. ?) 네 자리.

  • 그것이 합법적 인 가치가 아니라면, 날짜가 구문 분석 후 연도 가치를 확인하는 데 갇혀 있습니다.

  • 또는 코드를 가져 와서 유효한 연도의 선호하는 정의를 포함하여 수정할 수 있습니다.


1 5000-01-02 전에 Y10K 문제를 해결하기 위해 작업을 시작할 계획이 없습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top