[Java] ISO 8601 형식의 시간 출력하기 (현재 시간과 과거 시간 구하기)

2025. 7. 20. 22:05·개발 (Development)/Java

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
'개발 (Development)/Java' 카테고리의 다른 글
  • [Java] Spring Boot 2.x + Java 11 환경에서 JPA Native Query와 DTO 매핑 문제 해결 기록
  • [Java] PostgreSQL의 timestamptz를 Java MyBatis에서 Instant로 받는 방법
  • [Java] MyBatis foreach에서 빈 배열이 들어올 경우 예외를 방지하는 방법
  • [Java/SpringBoot] 서버 간 API 호출 오류: Connection reset 에러 분석 및 해결 방법
LoopThinker
LoopThinker
모르는 것을 알아가고, 아는 것을 더 깊게 파고드는 공간
  • LoopThinker
    CodeMemoir
    LoopThinker
  • 전체
    오늘
    어제
    • 분류 전체보기 (231)
      • 개발 (Development) (165)
        • Algorithm (1)
        • Angular (1)
        • AWS (6)
        • DeepSeek (2)
        • Docker (7)
        • Git (3)
        • Java (34)
        • JavaScript (4)
        • Kafka (5)
        • Kubernetes (4)
        • Linux (7)
        • PostgreSQL (38)
        • Python (31)
        • React (3)
        • TypeScript (3)
        • Vue.js (5)
        • General (11)
      • 데이터 분석 (Data Analysis) (1)
      • 알고리즘 문제 풀이 (Problem Solving.. (27)
      • 자격증 (Certifications) (24)
        • ADsP (14)
        • 정보처리기사 (4)
        • Linux Master (5)
        • SQLD (1)
      • 기술 동향 (Tech Trends) (11)
      • 기타 (Others) (3)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    자바
    Linux master
    백준알고리즘
    Linux
    deepseek
    DevOps
    Spring boot
    docker
    PostgreSQL
    Kafka
    백준자바
    Vue.js
    데이터분석
    java
    javascript
    springboot
    Kubernetes
    MyBatis
    ADsP
    AWS
    pandas
    JPA
    timescaledb
    백준
    오답노트
    리눅스 마스터 2급 2차
    리눅스 마스터 2급
    백준온라인저지
    python
    JSON
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
LoopThinker
[Java] ISO 8601 형식의 시간 출력하기 (현재 시간과 과거 시간 구하기)
상단으로

티스토리툴바