본문 바로가기
3. 웹개발/3_1_1 JAVA

[Java] 실수할 수 있는 날짜 형식(YYYY vs yyyy)

by 갓대희 2020. 12. 30.
반응형

[Java] 실수할 수 있는 날짜 형식(YYYY vs yyyy)

 

안녕하세요. 갓대희 입니다. 이번 포스팅은 [ [Java] 착각하기 쉬운 날짜 형식 (YYYY) ] 입니다. : ) 

 

0.YYYY vs yyyy

▶ 0. 결론

 - 결론부터 말하자면 일반적인 상황에서는 Date Format에 "YYYY"를 사용하지 않도록 하자.

 - 예를들어 오늘이 2020년 12월 31일(목) 인경우 예를 들어 보자면 다음과 같이 결과가 나온다.

Date date = new Date();                                                     // Thu Dec 31 01:33:05 KST 2020
System.out.println(new SimpleDateFormat("YYYYMMdd").format(date));          // 2021-12-31
System.out.println(new SimpleDateFormat("yyyyMMdd").format(date));          // 2020-12-31

 > "yyyy" : 기대한 대로 2020-12-31 출력

 > "YYYY" : 기대한 결과와 다르게 2021-12-31 출력

 

▶ 1. 작성 예시

 - 적절하지 않은 사용 예

Date date = new Date();                                                 // Thu Dec 31 01:33:05 KST 2020
String result = new SimpleDateFormat("YYYYMMdd").format(date);          // 2021-12-31

 

 - 적절한 사용 예

Date date = new Date();                                                 // Thu Dec 31 01:33:05 KST 2020
String result = new SimpleDateFormat("yyyyMMdd").format(date);          // 2020-12-31

 

 - 의도에 따라서는 올바른 사용 예

Date date = new Date();                                                 // Thu Dec 31 01:33:05 KST 2020
String result = new SimpleDateFormat("YYYY-ww").format(date);          // 2021-01 (2021년의 01주)

 

※ JavaDoc 참고

 - https://docs.oracle.com/javase/8/docs/api/java/util/GregorianCalendar.html#week_year

A week year is in sync with a WEEK_OF_YEAR cycle.
All weeks between the first and last weeks (inclusive) have the same week year value.
Therefore, the first and last days of a week year may have different calendar year values.

For example, January 1, 1998 is a Thursday.
If getFirstDayOfWeek() is MONDAY and getMinimalDaysInFirstWeek() is 4 
(ISO 8601 standard compatible setting), 
then week 1 of 1998 starts on December 29, 1997, and ends on January 4, 1998. 
The week year is 1998 for the last three days of calendar year 1997. 
If, however, getFirstDayOfWeek() is SUNDAY, then week 1 of 1998 starts on January 4, 1998,
and ends on January 10, 1998; 
the first three days of 1998 then are part of week 53 of 1997 and their week year is 1997.
1 주일은 WEEK_OF_YEAR주기와 동기화됩니다. 
첫 주와 마지막 주 (포함) 사이의 모든 주에는 동일한 주 연도 값이 있습니다. 
따라서 한주의 첫 번째 날과 마지막 날은 다른 역년 값을 가질 수 있습니다.

예를 들어, 1998 년 1 월 1 일은 목요일입니다. 
getFirstDayOfWeek ()가 MONDAY이고 getMinimalDaysInFirstWeek ()가 4 
(ISO 8601 표준 호환 설정)이면 1998 년의 1주는 1997 년 12 월 29 일에 시작하여 
1998 년 1 월 4 일에 끝납니다. 주 연도는 지난 3 일 동안 1998 년입니다. 
그러나 getFirstDayOfWeek ()가 SUNDAY이면 1998 년 1 주차는 1998 년 1 월 4 일에 시작하여 
1998 년 1 월 10 일에 끝납니다. 
1998 년의 처음 3 일은 1997 년 53 주차의 일부이며 주연도는 1997 년입니다.

 

다음 내용 참고 : rules.sonarsource.com/java/RSPEC-3986

반응형

댓글0