wms's Programming&Study

나라별 시간대가 필요할 때 LocalDateTime to ZonedDateTime 본문

Programming/JAVA

나라별 시간대가 필요할 때 LocalDateTime to ZonedDateTime

wms2275 2023. 1. 1. 21:51

이슈사항

백엔트 서버에서 사용하는 시간은 LocalDateTime을 사용했다.
프론트 쪽에 전달해줄때도 LocalDateTime 형식으로 전달해주었다.
하지만 LocalDateTime 형식으로 전달해주게 되면 타임존을 모르기 때문에
나라별 자동으로 시간대를 바꾸어주지 못한다.

 

해결방안

LocalDateTime 형식은 예시로 2023-01-01T20:49:09.698591 이렇게 나오는데
ZonedDateTime은 LocalDateTime 형식에 뒤에 Z가 붙어서 2023-01-01T20:49:09.698591Z 이런 형태로 나온다.

LocalDateTime은 ISO 8601의 기본 형식이다. 해당 시간이 로컬 시간 임을 의미한고
ZonedDateTime의 마지막 뒤에 붙어 있는 Z가 시간대를 나타내는 time-zone이다.
해당 시간이 UTC(GMT) 시간 임을 의미한다.
따라서 LocalDateTime에 시간대(time-zone)를 추가하면, ZonedDateTime이 된다.

시간대(time-zone)까지 다뤄야 하고 접속 나라에 따라 지역별로 시간대를 알아야할 때
ZonedDateTime 클래스를 사용하면 된다.

 

해결

아래와 같이 LocalDateTime에 ZoneId를 UTC로 지정해주면 로컬 시간에 타임존을 추가한 형식으로 만들 수 있다.

LocalDateTime localDateTime = LocalDateTime.now();
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, ZoneOffset.UTC);



 

참고 사이트

https://jongmin92.github.io/2018/06/06/Java/java-date-time/