2016-12-28 3 views
2

형식 "yyMMdd"DateTimeFormatter을 사용하면 이상한 일이 발생합니다 ... LocaleDate.of(0,1,5)"010105"으로 서식이 지정되지만 "000105"는 LocalDate.of(2015, 1, 5)으로 정확하게 구문 분석됩니다. 왜 그거야 ?? 테스트를 위해DateTimeFormatter는 LocalDate.of (0,1,5)를 "010105"로 구문 분석합니까?

:

@Test 
public void testYear2000() { 
    LocalDate localDate = LocalDate.of(0, 1, 5); 
    String format = DateTimeFormatter.ofPattern("yyMMdd").format(localDate); 

    assertThat(format, is("000105")); // fail! it is "010105" 

    LocalDate parse = LocalDate.parse("000105", DateTimeFormatter.ofPattern("yyMMdd")); 

    assertThat(parse, is(LocalDate.of(2000, 1, 5))); //pass 
} 

답변

3

귀하의 혼란이 여기에 사실에서 온다 :

지정한
LocalDate.of(0, 1, 5); 

년 제로, 수천 년 2000 년 이전 인 :

LocalDate.of(2000, 1, 5); 

마지막으로 000105을 출력합니다.

업데이트 : @Meno Hochschild가 더 자세한 설명을 추가했으며 또한 this 좋은 질문을 참조하십시오.

4

@ Lachezar Balev의 정답에 대한 보충 설명을 추가합니다. 0 년 (2 천년 이상 전)을 yy 패턴으로 인쇄한다는 의미는 다음과 같습니다. 은 1 계기의 그레고리 안 0 년에 해당하는 두 자리 양식의 연대를 사용합니다 (). 그러므로 1 년이 형식 출력 010105로 표시됩니다.

패턴 uuMMdd (u = proleptic gregorian year)를 사용했다면 출력은 실제로 기대치 000105와 일치하지만 잘못된 입력으로 인해 여전히 기금 적으로 잘못되었습니다.

관련 문제