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) 계산이 필요할 때 | 간단한 타이밍/성능 을 측정할 때 |
참고
728x90
반응형
LIST