본문 바로가기

검색용 개발 블로그

ZonedDateTime to yyyy-MM-dd

api 로 전달 받은 시간의 형식은

"start_date":"2021-12-01T17:00:00+0900",
"end_date":"2022-12-31T17:00:00+0900",

이거다.. 이건 ZonedDateTime  형식이라고 한다.

 

 

ZonedDateTime(2022-12-31T17:00:00+0900) 에서

yyyy-MM-dd로 바꾸려면 어떻게 해야할까.

 

 

 

1. 답변

 

https://stackoverflow.com/questions/58115984/how-do-i-convert-2019-07-14t183000-000z-to-2021-09-26-043000-pm-using-da

 

위 url에서 답변으로는 처음 시작 형식과 원하는 형식을 각각 선언해줘야한다고 한다.

String date = "2019-07-14T18:30:00.000Z";
SimpleDateFormat inputFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS'Z'");
SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss a");
Date parsedDate = inputFormat.parse(date);
String formattedDate = outputFormat.format(parsedDate);
System.out.println(formattedDate);

 

 

2. 그러나 위의 형식을 지키지 않아도 가능했다.

private SimpleDateFormat dspDateFormat = new SimpleDateFormat("yyyy-MM-dd");

getDate("2022-12-31T17:00:00+0900"); // 2022-12-31

private String getDate(String strEndDate) {
		try {
			Date date = dspDateFormat.parse(strEndDate);
			return dspDateFormat.format(date);
			
		} catch(Exception e) {
			return strEndDate;
		}
	}

 

3. 왜 이렇게 작동하는지 궁금해서 조사

 

	private String getDate(String zoneTime) {
		try {
			System.out.println("zoneTime>>"+zoneTime);
			Date date = dspDateFormat.parse(zoneTime);
			System.out.println("date>>> "+date);
			System.out.println("date.getTime>>> "+date.getTime());
			System.out.println("dspDateFormat.format(date)>> "+dspDateFormat.format(date));
			return dspDateFormat.format(date);
			
		} catch(Exception e) {
			return zoneTime;
		}
	}

 

 

 

4. SimpleDateFormat 별로인가?

 

static 으로 선언된 녀석을 여러 Thread에서 사용하게 만드는 경우에는 문제가 생기긴 합니다 ㅋㅋ

 

DateTimeFormatter라는 상위호환이 있으니 굳이 쓸 이유는 없겠져 ㅋㅋ