Java

[Java] 시간 사용하기

yooverd 2025. 5. 8. 21:03
728x90
반응형
SMALL

Java 에서 현재 날짜와 시각을 얻는 여러 방법에 대해 알아보자.

 


 

1. LocalDateTime

java.time.LocalDateTime 클래스 를 활용하는 방법 가장 친숙할 것이다.

// 지역(local)시간 : 2025-05-08T21:30:00
LocalDateTime.now();

 

특징

  • 시간대 정보를 따로 갖고있지 않음
    => 데이터로써 저장하여 사용할 때, 다른 시간대에서 적절히 사용하지 못할 가능성이 있으므로 유의
    ex) 글로벌 서비스 데이터에서 2025-05-08T21:30:00 라는 시간이 어디에서 발생된건지 알 수 없음
  • 달력 기반의 날짜시간 정보

 

2. ZonedDateTime

java.time.ZonedDateTime 클래스를 활용하는 방법이 있다.

now 메서드 호출 시, 시간대 ID 값을 함께 보내주면 된다.

해당 값은 IANA Time Zone Database 에 등록된 지역 기반 시간대 ID 이다.

(위키피디아에서 목록을 간편하게 확인해볼 수 있다. : https://en.wikipedia.org/wiki/List_of_tz_database_time_zones)

// 지정한 시간대의 날짜시간 정보 : 2025-05-08T16:30:00+09:00[Asia/Seoul]
ZonedDateTime.now(ZoneId.of("Asia/Seoul"));

// 지원 가능한 타임존ID 확인 방법
ZoneId.getAvailableZoneIds().stream().sorted().forEach(System.out::println);

 

특징

  • 시간대 정보를 갖고있음
  • 달력 기반의 날짜/시간 정보

 

3. System

java.lang.System 클래스를 활용하는 방법이 있다.

// epoch time(밀리초) 반환 :  1746677372214 와 같은 형태
System.currentTimeMillis();

 

특징

  • long 타입 반환
  • epoch time 기반의 형태
Epoch Time (에포크 타임)
1970년 1월 1일 0시(UTC) 이후로 경과한 시간을 초, 밀리초, 나노초 등의 단위로 표현한 것

 

4. Instant 활용

java.time.Instant 클래스를 활용하는 방법이 있다.

Instant는 타임스탬프를 객체화 한 것으로 

// UTC 기준의 날짜시간 : 2025-05-08T06:24:32.000Z
Instant.now();

 

 

 

특징

  • epoch time 기반의 형태

 

정리

  LocalDateTime ZonedDateTime Instant System.currentTimeMillis()
시간대 정보 X O X X
표현 형식 yyyy-MM-ddTHH:mm:ss yyyy-MM-ddTHH:mm:ss+09:00[Asia/Seoul] 2025-05-08T01:15:00Z long 숫자값
( 예: 1746678912000)
장점 사람 친화적, 날짜 계산이 쉬움 전 세계 사용자 시간 관리에 적합 시점 비교, 시간차 계산에 적합 가볍고 빠름, 성능 측정 등에 적합
단점 서버/시간대가 다르면 다른 의미가 될 수 있음 상대적으로 무겁고 복잡 사람에게는 읽기 불편 (시간대 없음) 날짜/시간 연산 불편, 타임존 없음
사용 목적 사람이 읽는 데이터가 필요할 때 글로벌한 시각을 저장하고 사용할 때 정확한 시점 (UTC) 계산이 필요할 때 간단한 타이밍/성능 을 측정할 때

 

 

 

참고

https://salmonworld.tistory.com/218

https://m.blog.naver.com/techtrip/221672212122

728x90
반응형
LIST