본문 바로가기
안드로이드 자바

[JAVA][Android] UTC 시간을 로컬 시간으로 변경하기

by teamnova 2024. 8. 3.
728x90

 

안녕하세요 오늘은 협정 세계시인 UTC 시간을 로컬 시간으로 변환하는 방법을 알아보겠습니다. 

 

각 나라마다 시간이 다르기 때문에 우리는 소프트웨어를 개발할 때 한국 뿐 아니라

전세계에서 서비스를 이용하는 유저들의 현지 시간이 다르다는 것을 고려하여야 합니다. 

 

방법은 간단합니다. 

세계 어디에서나 동일한 국제 표준시를 사용하여 로컬에서 현지 시간으로 변경해 주는 것입니다. 

자바에서는 UTC 시간과 기기 위치 기반 로컬 시간을 반환하는 함수들을 제공합니다. 

우리는 이 함수들을 사용하여 쉽게 형변환을 할 수 있습니다. 

 

 

UTC 란?

Universal Time Coordinated 의 약자로 1972년 1월 1일부터 시행된 국제 표준시를 의미합니다.
그리니치 평균시(GMT) 에 기반하므로, GMT 로 불리기도 합니다. 

 

영국을 기준(UTC+0:00)으로 각 지역의 시차를 규정한 것으로
한국의 경우 영국보다 9 시간 빠르기 때문에 UTC+9:00 로 표기할 수 있습니다. 

 

 

 

먼저 로컬 시간 기반 UTC 시간을 구하는 방법입니다. 
이렇게 UTC 로 변경한 시간을 서버에 저장하여 통일된 시간 정보를 가지고 데이터를 관리할 수 있습니다. 

       // UTC 시간 구하기 (UTC+0:00)
       String getCurrentUTCTime (){
            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'");
            sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

            java.util.Date date = new java.util.Date();
            try {
                date = sdf.parse(sdf.format(new Date()));
            } catch (ParseException e) {
                e.printStackTrace();
            }
            SimpleDateFormat outputFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            outputFormat.setTimeZone(TimeZone.getTimeZone("UTC"));
            return outputFormat.format(date);
        }

 

 

 

다음으로는 UTC 시간을 로컬 시간으로 변경하는 방법입니다.  

문자열에 담긴 UTC 시간을 매개변수로 받아서 로컬 시간으로 변경해줍니다. 

이 로컬 시간은 유저가 보는 시간이 됩니다. 

        
   // UTC -> local 시간으로 형변환하기 
   String convertUTCtoLocaltime(String utcTime) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); // Z는 UTC 시간을 나타냄. ISO 8601 표준에 의거.
        sdf.setTimeZone(TimeZone.getTimeZone("UTC"));

        SimpleDateFormat localFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); // 현지 시간을 위한 포맷

        try {
            Date date = sdf.parse(utcTime); // 가지고 온 utc time string 값을 date 로 형변환
            localFormat.setTimeZone(TimeZone.getDefault()); // 현지 시간을 반환하도록 기존 UTC 데이트 폼을 변경 해줌.
            return localFormat.format(date); 
        } catch (ParseException e) {
            e.printStackTrace();
            return utcTime;
        }

    }

 

 

감사합니다