리눅스

Java에서 시간을 확인하는 방법

변군이글루 2025. 5. 28. 15:48
반응형

Java에서 시간을 확인하는 방법

테스트 환경

$ lsb_release -d
Description:    Ubuntu 24.04.1 LTS

$ java --version
java 21.0.7 2025-04-15 LTS
Java(TM) SE Runtime Environment (build 21.0.7+8-LTS-245)
Java HotSpot(TM) 64-Bit Server VM (build 21.0.7+8-LTS-245, mixed mode, sharing)

시간 확인

date
Wed May 28 03:28:07 PM KST 2025

시스템 시간대 확인

timedatectl
               Local time: Wed 2025-05-28 15:28:49 KST
           Universal time: Wed 2025-05-28 06:28:49 UTC
                 RTC time: Wed 2025-05-28 06:28:49
                Time zone: Asia/Seoul (KST, +0900)
System clock synchronized: yes
              NTP service: active
          RTC in local TZ: no

/etc/localtime 확인

$ ls -l /etc/localtime
lrwxrwxrwx 1 root root 30 May 26 14:21 /etc/localtime -> /usr/share/zoneinfo/Asia/Seoul

zoneinfo 확인

$ ls -l /usr/share/zoneinfo/Asia/Seoul
-rw-r--r-- 1 root root 617 Mar 27 02:28 /usr/share/zoneinfo/Asia/Seoul
$ strings /usr/share/zoneinfo/Asia/Seoul
TZif2
5qx 
TZif2
KST-9

Java 시간 확인

Java 파일 생성

cat <<EOF > ShowTime.java
import java.time.ZoneId;

public class ShowTime { // 클래스 이름을 ShowTime으로 변경
    public static void main(String[] args) {
        // JVM의 기본 타임존 확인
        ZoneId defaultZoneId = ZoneId.systemDefault();
        System.out.println("JVM Default ZoneId: " + defaultZoneId.getId());
    }
}
EOF
더보기

---

ZoneId 목록 파일 저장

import java.time.ZonedDateTime;
import java.time.ZoneId;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.io.IOException;
import java.util.stream.Collectors;

public class ShowTime {
    public static void main(String[] args) {
        // 현재 타임존과 시간 출력
        ZoneId defaultZoneId = ZoneId.systemDefault();
        ZonedDateTime currentTime = ZonedDateTime.now(defaultZoneId);
        System.out.println("Current TimeZone: " + defaultZoneId.getId());
        System.out.println("Current Time: " + currentTime);

        // ZoneId 목록 파일 출력 (콘솔 출력 없음)
        try {
            Files.write(
                Paths.get("zoneids.txt"),
                ZoneId.getAvailableZoneIds()
                      .stream()
                      .collect(Collectors.toList())
            );
            System.out.println("\nZoneId 목록이 zoneids.txt 파일에 저장되었습니다.");
        } catch (IOException e) {
            System.err.println("ZoneId 목록 파일 저장 중 오류 발생: " + e.getMessage());
        }
    }
}

---

컴파일

javac ShowTime.java

실행

java ShowTime
JVM Default ZoneId: Etc/UTC

Java(.java, .class) 파일 삭제

rm ShowTime.java ShowTime.class

/etc/timezone 파일 변경

/etc/timezone 확인

더보기

---

$ cat /etc/timezone 
Etc/UTC

---

/etc/timezone 파일을 수정

echo "Asia/Seoul" | sudo tee /etc/timezone

tzdata 재구성

sudo dpkg-reconfigure tzdata

/etc/timezone 확인

$ cat /etc/timezone
Asia/Seoul
$ java ShowTime
JVM Default ZoneId: Asia/Seoul

 

JVM의 타임존은 user.timezone 속성이 명시되지 않은 경우, 운영체제의 타임존 설정을 따릅니다.

일반적으로 Java는 시스템 타임존을 결정할 때 /etc/timezone 파일의 값을 참조하는 것으로 보입니다.

 

반응형