본문 바로가기

개발일지

[java] Date type별 yyyy-MM-DD 문제

반응형

실수였는지 모르고였는지 둘다였는지 모르겠지만 

날짜가 이상하게 출력되고 이상하게 입력되는 문제가 있었습니다.

 

음... 이건 날짜 포맷을 우리가 맞는 형태로 바꾸려는 과정이었는데

날짜가 자꾸 1/1로 바뀌었습니다. 

 

오늘이 2월1일인데 1/1로 바뀌는것 

 

찾아보니 기존에 12월에 올린 것들도 날짜가 이상했던 문제

 

offset을 찾아보자니 날짜가 영 맞지 않았고 

타입을 HH:mm:ss.S로 바꿔주는 형태가 있었는데 이때에 문제가 생긴건지..

너무 뜬금없는 숫자였습니다.

 

하지만 조금 이상한 것이 다른것들은 yyyy-MM-dd HH:mm:ss 로 썼는데

이 문제의 소스에만 yyyy-MM-DD HH:mm:ss 로 쓰길래 찾아봤더니..

 

docs.oracle.com/javase/8/docs/api/java/text/SimpleDateFormat.html

 

SimpleDateFormat (Java Platform SE 8 )

Parses text from a string to produce a Date. The method attempts to parse text starting at the index given by pos. If parsing succeeds, then the index of pos is updated to the index after the last character used (parsing does not necessarily use all charac

docs.oracle.com

D Day in year Number 189
d Day in month Number 10

인용을 하자면

D 는 Day in year

d 는 Day in month 

 

Day in year로 표현하게 되면 어떻게 되느냐 

logger.debug("1/1:"+formatter3.parse("2021-01-01 06:30:00")을 하게 되면 

-> "1/1 :Fri Jan 01 06:00 KST 2021

logger.debug("2/1:"+formatter3.parse("2021-02-01 06:30:00")을 하게 되면

-> "2/1 :Fri Jan 01 06:00 KST 2021

logger.debug("3/1:"+formatter3.parse("2021-03-01 06:30:00")을 하게 되면

-> "3/1 :Fri Jan 01 06:00 KST 2021

logger.debug("4/1:"+formatter3.parse("2021-04-01 06:30:00")을 하게 되면

-> "4/1 :Fri Jan 01 06:00 KST 2021

 

???? 원하던 2월, 3월, 4월은 모두 무시되고 01로 되었기 때문에 무조건 1월 1일로 출력되는 문제였고

이 문제로 인해 로직을 탄 모든 날짜들은 모두 1월이 되어버렸습니다.

 

1/31  은 31

2/10  은 41

2/20  은 51

3/2   은 61

3/12  은 71 

ㅎㅎㅎ 

2021-01-31, 41, 51, 61, 71로 입력시 (yyyy-MM-DD)

 

윗부분은 yyyy-MM-dd 아래부분은 yyyy-MM-DD

yyyy-MM-dd 기억하기..

 

반응형