프로그램/Java

[Java] 국가별 TimeZone(시간대) 처리 방법

neorc 2025. 3. 14. 16:01
세계 각국의 시간대(TimeZone)를 고려하는 것은 국제적인 서비스 개발에서 필수적인 요소입니다. Java에서는 TimeZone과 ZonedDateTime을 활용하여 국가별 시간대를 정확하게 처리할 수 있습니다. 🌏🕒
이 글에서는 Java에서 국가별 시간대(TimeZone) 처리 방법을 코드 예제와 함께 설명하겠습니다

시스템 기본 TimeZone 가져오기

Java에서는 TimeZone.getDefault()를 사용하여 현재 시스템의 기본 시간대를 가져올 수 있습니다.

import java.util.TimeZone;

public class DefaultTimeZoneExample {
    public static void main(String[] args) {
        TimeZone defaultZone = TimeZone.getDefault();
        System.out.println("현재 시스템의 기본 시간대: " + defaultZone.getID());
    }
}

✔ 실행하면 시스템 설정에 따라 Asia/Seoul, America/New_York 등과 같은 값이 출력됩니다.


특정 국가의 TimeZone 가져오기

Java에서는 특정한 국가 또는 지역의 시간대를 가져올 수 있습니다.

import java.util.TimeZone;

public class SpecificTimeZoneExample {
    public static void main(String[] args) {
        TimeZone timeZone = TimeZone.getTimeZone("America/New_York");
        System.out.println("뉴욕의 시간대: " + timeZone.getID());
    }
}

TimeZone.getTimeZone("America/New_York") → 뉴욕의 시간대를 가져옵니다. ✔ 다른 나라의 시간대를 가져오려면 IANA TimeZone ID를 사용하면 됩니다.


모든 TimeZone ID 출력하기

Java에서 지원하는 모든 시간대(TimeZone) ID 목록을 확인할 수도 있습니다.

import java.util.TimeZone;

public class AllTimeZones {
    public static void main(String[] args) {
        String[] availableIDs = TimeZone.getAvailableIDs();
        for (String id : availableIDs) {
            System.out.println(id);
        }
    }
}

✔ 실행하면 전 세계의 모든 시간대 목록이 출력됩니다.


ZonedDateTime을 이용한 국가별 시간 변환

Java 8 이상에서는 ZonedDateTimeZoneId를 활용하여 국가별 시간 변환이 가능합니다.

import java.time.ZonedDateTime;
import java.time.ZoneId;

public class ZonedDateTimeExample {
    public static void main(String[] args) {
        ZonedDateTime nowInKorea = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));
        ZonedDateTime nowInLondon = nowInKorea.withZoneSameInstant(ZoneId.of("Europe/London"));

        System.out.println("서울 시간: " + nowInKorea);
        System.out.println("런던 시간: " + nowInLondon);
    }
}

ZonedDateTime.now(ZoneId.of("Asia/Seoul")) → 현재 서울의 시간을 가져옵니다. ✔ withZoneSameInstant(ZoneId.of("Europe/London")) → 같은 순간의 런던 시간을 변환합니다. ✔ ZonedDateTime을 사용하면 서머타임(DST)도 자동으로 처리됩니다.


UTC(협정 세계시) 변환하기

서버에서는 UTC 기준 시간을 유지하는 것이 일반적입니다. Java에서는 UTC로 변환할 수 있습니다.

import java.time.ZonedDateTime;
import java.time.ZoneId;

public class UTCExample {
    public static void main(String[] args) {
        ZonedDateTime nowUTC = ZonedDateTime.now(ZoneId.of("UTC"));
        System.out.println("현재 UTC 시간: " + nowUTC);
    }
}

✔ UTC(세계 표준시)로 변환하면 시간대에 관계없이 일정한 시간값을 유지할 수 있습니다.


결론 (Conclusion)

Java에서 국가별 시간(TimeZone) 처리 방법을 정리하면 다음과 같습니다.

TimeZone.getDefault() → 시스템 기본 시간대 가져오기

TimeZone.getTimeZone("ID") → 특정 국가의 시간대 설정

TimeZone.getAvailableIDs() → 모든 시간대 목록 확인

ZonedDateTime.now(ZoneId.of("ID")) → Java 8 이상에서 국가별 시간 가져오기

withZoneSameInstant(ZoneId.of("ID")) → 다른 시간대로 변환하기

ZoneId.of("UTC") → UTC(세계 표준시) 변환하기