Java 8 이상부터는 데이터 포맷 형식에서 연도를 표기하는 yyyy외에도 uuuu가 추가되어있다.
먼저 예시 코드와 출력물은 아래와 같다.
private void checkYear(){
LocalDateTime localDateTime = LocalDateTime.of(0, 12, 30, 0, 0);
System.out.println("기원전에서 서기 날짜 출력");
for ( int i = 0 ; i < 5 ; i++ ){
String yyResult = localDateTime.format(DateTimeFormatter.ofPattern("G yyyy-MM-dd"));
String uuResult = localDateTime.format(DateTimeFormatter.ofPattern("G uuuu-MM-dd"));
System.out.println(yyResult + "\t" + uuResult);
localDateTime = localDateTime.plusDays(1);
}
System.out.println("\n기원전, 서기 각각 100년에 대한 포맷 출력");
LocalDateTime localDateTime2 = LocalDateTime.of(-100, 12, 30, 0, 0);
LocalDateTime localDateTime3 = LocalDateTime.of(100, 12, 30, 0, 0);
String yyResult2 = localDateTime2.format(DateTimeFormatter.ofPattern("G yyyy-MM-dd"));
String uuResult2 = localDateTime2.format(DateTimeFormatter.ofPattern("G uuuu-MM-dd"));
System.out.println(yyResult2 + "\t" + uuResult2);
String yyResult3 = localDateTime3.format(DateTimeFormatter.ofPattern("G yyyy-MM-dd"));
String uuResult3 = localDateTime3.format(DateTimeFormatter.ofPattern("G uuuu-MM-dd"));
System.out.println(yyResult3 + "\t" + uuResult3);
}
// 기원전에서 서기 날짜 출력
// 기원전 0001-12-30 기원전 0000-12-30
// 기원전 0001-12-31 기원전 0000-12-31
// 서기 0001-01-01 서기 0001-01-01
// 서기 0001-01-02 서기 0001-01-02
// 서기 0001-01-03 서기 0001-01-03
//
// 기원전, 서기 각각 100년에 대한 포맷 출력
// 기원전 0101-12-30 기원전 -0100-12-30
// 서기 0100-12-30 서기 0100-12-30
첫 번째 출력 결과로 확인할 수 있는 내용으로는 yyyy의 표기인 경우, 서기 1년 1월 1일 전일 은 기원전 0년 12월 31일이 아니라, 기원전 1년 12월 31일이 된다.
두 번째 출력 결과로 확인할 수 있는 내용으로는 기원전 100년을 표기하고 싶었지만, yyyy에서는 음수 처리와 함께 101년으로 변경되었다.
실제로 연도를 가지고 계산을 하거나 표기를 할 때는 uuuu 패턴을 사용하는 것이 안전할 수 있다고 볼 수 있다.
'프로그래밍 > Java' 카테고리의 다른 글
[Java] 진수 변환 (0) | 2021.01.19 |
---|---|
[Java]트리형 메뉴 출력하기 (0) | 2021.01.07 |
[Java] 이름과 핸드폰번호에 대한 마스킹 처리 (0) | 2021.01.01 |
[Java] Caller Trace (호출 추적하기) (0) | 2016.10.06 |
[Java] System.out의 결과를 파일로 출력 (0) | 2016.06.15 |