Java를 사용하여 현재 시간과 과거 시간을 ISO 8601 형식(예: 2025-07-13T15:00:00Z
)으로 출력하는 방법에 대해 정리해보았습니다. 특히, UTC 기준으로 현재 시간과 3시간 전 시간을 구하는 예제를 중심으로 설명드리겠습니다.
1. 문제 상황
로그나 데이터 처리, 외부 API와의 연동 시 국제 표준 시간 형식인 ISO 8601을 사용하는 경우가 많습니다.
예를 들어, 2025-07-13T15:00:00Z
와 같은 형식은 UTC(협정 세계시)를 기준으로 한 ISO 포맷입니다.
이 글에서는 현재 시간과 현재로부터 3시간 전 시간을 자바 코드로 계산하고, 이를 ISO 8601 형식으로 출력하는 방법을 알아봅니다.
2. 해결 방법
사용 도구
java.time.Instant
java.time.temporal.ChronoUnit
java.time.format.DateTimeFormatter
이 세 가지 클래스와 인터페이스를 조합하면 쉽게 구현할 수 있습니다.
전체 코드 예시
import java.time.Instant;
import java.time.temporal.ChronoUnit;
import java.time.format.DateTimeFormatter;
public class TimeExample {
public static void main(String[] args) {
// 현재 UTC 시간
Instant now = Instant.now();
// 3시간 전 UTC 시간
Instant threeHoursAgo = now.minus(3, ChronoUnit.HOURS);
// ISO 8601 포맷으로 출력
DateTimeFormatter formatter = DateTimeFormatter.ISO_INSTANT;
System.out.println("현재 시간: " + formatter.format(now));
System.out.println("3시간 전 시간: " + formatter.format(threeHoursAgo));
}
}
3. 코드 설명
Instant.now()
는 현재의 UTC 시간을 구합니다.now.minus(3, ChronoUnit.HOURS)
는 현재 시간에서 3시간 전을 계산합니다.DateTimeFormatter.ISO_INSTANT
를 통해 **Z(=UTC)**가 포함된 ISO 8601 포맷으로 문자열 출력이 가능합니다.
4. 실행 결과 예시
실행 시 아래와 같은 출력이 나타납니다(실제 시간은 실행 시점 기준으로 달라집니다):
현재 시간: 2025-07-13T18:00:00Z
3시간 전 시간: 2025-07-13T15:00:00Z
5. 확장 응용
- 만약 다른 시간대(예: KST, PST 등)의 시간으로 출력하고 싶다면
ZonedDateTime
이나OffsetDateTime
을 사용할 수 있습니다. - 또한
ChronoUnit.MINUTES
,DAYS
등을 사용하면 분 단위, 일 단위로도 쉽게 응용이 가능합니다.
마무리
시간 관련 로직은 다양한 개발 상황에서 자주 등장합니다. Java 8 이후로는 java.time
패키지를 통해 훨씬 직관적이고 안전하게 시간 계산이 가능하므로 활용해 보시길 추천드립니다.
반응형
'개발 (Development) > Java' 카테고리의 다른 글
[Java] Spring Boot 2.x + Java 11 환경에서 JPA Native Query와 DTO 매핑 문제 해결 기록 (4) | 2025.08.03 |
---|---|
[Java] PostgreSQL의 timestamptz를 Java MyBatis에서 Instant로 받는 방법 (2) | 2025.07.28 |
[Java] MyBatis foreach에서 빈 배열이 들어올 경우 예외를 방지하는 방법 (2) | 2025.07.20 |
[Java/SpringBoot] 서버 간 API 호출 오류: Connection reset 에러 분석 및 해결 방법 (0) | 2025.07.13 |
[Java] LinkedHashMap에서 특정 값을 가진 항목 제거하는 방법 (0) | 2025.07.05 |