본문 바로가기
Java

Java 에서 Time 정리

by fygoo-826 2025. 2. 3.
728x90
반응형

 서버 개발을 하다보면 날짜와 시간이 필요한 경우가 많다. 개념은 쉽지만 코드레벨에서는 이해를 정확히 하지 못해 날짜와 시간을 다루는 것은 생각보다 복잡할 수 있다. 대표적으로 복잡한 사례는 (1) 여러 가지 조건(윤년, 썸머타임 등), (2) Token 만료 기한 확인 등이 있다. 실제로 이 로직을 오류를 낸 경험이 있다. 이러한 복잡한 상황을 처리하기 위해 자바의 java.time 패키지와 같은 시간 라이브러리를 사용해야 한다. 오늘은 Time 에 대해서 개념을 이해하기 위한 아주아주 기초 지식을 정리해보고자 한다.


 

타임존

 타임존은 UTC(협정 세계시)를 기준으로 변환되는 시간을 나타낸다. 예를 들어, 한국의 타임존은 Asia/Seoul로, 이는 UTC 기준으로 +09:00이다. 타임존을 통해 각 지역의 시간을 정확히 정의하고 서로의 시간 차이를 계산할 수 있다.

 

Java. 에서 날짜 및 시간 관련 클래스

자바의 시간 라이브러리는 다양한 날짜 및 시간 관련 클래스를 포함하고 있다.

  • LocalDate: 연도, 월, 일을 다룰 수 있는 클래스
  • LocalTime: 시, 분, 초를 다룰 수 있는 클래스
  • LocalDateTime: 날짜와 시간을 모두 다룰 수 있는 클래스

이러한 클래스는 Local로 시작하는 이유는 세계 시간대를 고려하지 않고, 특정 지역의 날짜와 시간만을 다루기 때문이다.

 

LocalDate 예제 코드

import java.time.LocalDate;

public class LocalDateExample {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();
        LocalDate tomorrow = today.plusDays(1);

        System.out.println("오늘 날짜: " + today);
        System.out.println("내일 날짜: " + tomorrow);
    }
}

 

Epoch Time
에포크 시간(Epoch Time)은 1970년 1월 1일을 기준으로 경과한 시간을 초 단위로 표현하는 방법이다. 이 방법을 사용하면 각 국가의 시간 규칙에 관계없이 일관된 시간 계산을 제공한다.

예제: Instant 사용하기

import java.time.Instant;

public class EpochExample {
    public static void main(String[] args) {
        Instant now = Instant.now();
        long epochTime = now.getEpochSecond();
        
        System.out.println("현재 에포크 시간(초): " + epochTime);
    }
}

 

시간 간격의 개념
시간 간격을 나타내는 클래스를 사용할 수 있다. 이를 통해 특정 시점의 시간과 시간 간격을 정확하게 다룰 수 있다.

Period: 일, 월, 년 단위로 날짜 간격을 나타내는 클래스
Duration: 초, 밀리초 등의 단위로 시간을 나타내는 클래스

 

예제: Period와 Duration 사용하기

import java.time.LocalDate;
import java.time.Period;
import java.time.Duration;

public class PeriodDurationExample {
    public static void main(String[] args) {
        LocalDate startDate = LocalDate.of(2023, 1, 1);
        LocalDate endDate = LocalDate.of(2023, 12, 31);
        
        Period period = Period.between(startDate, endDate);
        System.out.println("두 날짜 사이의 기간: " + period.getDays() + "일");

        Duration duration = Duration.between(Instant.now(), Instant.now().plusSeconds(3600)); 
        System.out.println("60분의 Duration: " + duration.toMinutes() + "분");
    }
}

 

비교 구문 예제코드

import java.time.LocalDate;

public class DateComparisonExample {
    public static void main(String[] args) {
        LocalDate date1 = LocalDate.of(2023, 5, 20);
        LocalDate date2 = LocalDate.of(2023, 8, 15);

        System.out.println("date1이 date2보다 이전인가? " + date1.isBefore(date2));
        System.out.println("date1과 date2가 같은 날인가? " + date1.isEqual(date2));
    }
}

주요 메서드

  • of(): 특정 날짜나 시간을 생성하는 메서드
  • now(): 현재 날짜 또는 시간을 생성하는 메서드
  • plusXxx(): 년, 월, 일 등을 더하는 메서드
  • isBefore(), isAfter(): 다른 날짜 시간과 비교하는 메서드
  • isEqual(): 시간적으로 같은지를 비교하는 메서드
  • Period.between(), Duration.between(): 시작과 끝 날짜/시간 객체를 인자로 받아서 간격 객체를 반환하는 메서드

마무리

 자바의 time 라이브러리는 날짜와 시간을 처리하는 데 필요한 많은 기능을 제공한다. 이러한 클래스를 적절히 활용하면 더욱 정확하고 일관된 시간 계산을 수행할 수 있다. 시간 라이브러리의 사용법을 다 외우기보다는 주요 기능과 접근 방법을 이해하고 필요할 때마다 찾아서 사용하는 것이 좋다.

728x90
반응형

'Java' 카테고리의 다른 글

Java 에서 Exception  (1) 2025.02.04
Java 에서 중첩 클래스  (1) 2025.02.03
Java 에서 Enum  (1) 2025.02.02
Wrapper 클래스  (0) 2025.02.02
Java 에서 final keyword 란!?  (0) 2025.01.29