본문 바로가기
Java

자바 시간 라이브러리

by 어떻게말이름이히힝 2025. 3. 27.

출처 : Overview (The Java™ Tutorials > Date Time > Standard Calendar)

클래스 출력
Instant 2013-08-20T15:16:26.355Z
LocalDate 2013-08-20
LocalDateTime 2013-08-20T08:16:26.937
ZonedDateTime 2013-08-21T00:16:26.941+09:00[Asia/Tokyo]
LocalTime 08:16:26.943
MonthDay --08-20
Year 2013
YearMonth 2013-08
Month AUGUST
OffsetDateTime 2013-08-20T08:16:26.954-07:00
OffsetTime 08:16:26.957-07:00
Duration PT20H (20 hours)
Period P10D  (10 days)

 

 

Instant

Instant는 UTC 기준의 정확한 순간을 표현하는 클래스로 해당 클래스 자체에는 시간대 정보가 없어서

LocalDateTime 또는 ZonedDateTime으로 변환해야 사람이 읽기 쉬움

- 현재시간 

import java.time.Instant;
Instant timestamp = Instant.now();

 

- 현재시간에 +1시간 

Instant oneHourLater = Instant.now().plus(1, ChronoUnit.HOURS);

 

- 1970년 1월 1일 00:00:00 UTC 이후로 몇 초가 흘렀는지
Instant.ofEpochSecond(0L) -> 1970년 1월 1일 00:00:00 UTC

.until(Instant.now(), ChronoUnit.SECONDS) → 두 시간 차이를 초 단위로 계산

long secondsFromEpoch = Instant.ofEpochSecond(0L).until(Instant.now(),
                        ChronoUnit.SECONDS);

 

- 출력

import java.time.Instant;

public class InstantExample {
    public static void main(String[] args) {
        Instant now = Instant.now();
        System.out.println(now);
    }
}

 

- 실행 결과

2025-03-27T12:34:56.789Z

 

 

Date

날짜 정보만을 다루는 네 가지 클래스 제공(LocalDate, YearMonth, MonthDay, Year)

- LocalDate 기본 사용법

import java.time.LocalDate;
import java.time.Month;

public class LocalDateExample {
    public static void main(String[] args) {
        LocalDate date = LocalDate.of(2025, Month.MARCH, 27);
        // 2025년 3월 27일
        
        System.out.println("날짜: " + date);
    }
}

 

날짜: 2025-03-27

 

- 특정 날짜 찾기

import java.time.LocalDate;
import java.time.Month;

public class LocalDateExample {
    public static void main(String[] args) {
        LocalDate date = LocalDate.of(2025, Month.MARCH, 27);
        // 2025년 3월 27일
        TemporalAdjuster adj = TemporalAdjusters.next(DayOfWeek.WEDNESDAY);
        // 현재 날짜 이후 가장 가까운 수요일을 찾아줌
        LocalDate nextWed = date.with(adj);
        
        System.out.printf("현재 날짜: %s, 다음 수요일: %s%n", date, nextWed);
    }
}

 

현재 날짜: 2025-03-27, 다음 수요일: 2025-04-02

 

- 특정 날짜 요일 확인(현재 시스템의 지역 시간대를 기준으로 계산됨)

import java.time.LocalDate;
import java.time.Month;
import java.time.DayOfWeek;

public class DayOfWeekExample {
    public static void main(String[] args) {
        LocalDate date = LocalDate.of(2025, Month.MARCH, 27);
        // 2025년 3월 27일

        DayOfWeek dayOfWeek = date.getDayOfWeek();
        
        System.out.println("2025년 3월 27일은 " + dayOfWeek);
    }
}

 

2025년 3월 27일은 THURTHDAY

 

- LocalDate 간 차이 계산(Period)

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

public class DayOfWeekExample {
    public static void main(String[] args) {
        LocalDate today = LocalDate.now();

        LocalDate targetDate = LocalDate.of(2030, 1, 1);
        
        Period period = Period.between(today, targetDate);
        
        System.out.printf("2030년 1월 1일까지 %d년 %d개월 %d일 남음%n",
                          period.getYears(), period.getMonths(), period.getDays());
    }
}

 

2030년 1월 1일까지 4년 9개월 5일 남음

 

Date and Time

날짜와 시간을 다루는 클래스

- LocalTime 시간만 다루는 클래스

LocalTime nowSec = LocalTime.now(); 
//현재 시간 가져오기
nowSec.getHour(); 
//nowSec의 시간만 가져옴 int
nowSec.getMinute();
//nowSec의 분만 가져옴 int
nowSec.getSecond();
//nowSec의 초만 가져옴 int

 

- 특정 시간 만들어 출력하기

LocalTime timeOne = LocalTime.of(9,0);
LocalTime timeTwo = LocalTime.of(22,30);
System.out.println("시간 1 : " + timeOne);
System.out.println("시간 2 : " + timeTwo);

 

시간 1 : 09:00
시간 2 : 21:30

 

- LocalDateTime 날짜와 시간을 함께 다루는 클래스

LocalDateTime.now();
//현재 날짜와 시간 가져옴
LocalDateTime.of(2025, Month.MARCH, 27, 16, 00);
//2025년 3월 27일 16:00 으로 설정
LocalDateTime.ofInstant(Instant.now(), ZoneId.systemDefault())
//Instant(UTC기준)를 시스템의 로컬 시간대로 변환

 

Period and Duration

- Duration 시간의 길이를 나타냄, 초 또는 나노초

Instant t1 = Instant.now();
Thread.sleep(2000); 
Instant t2 = Instant.now();

long ns = Duration.between(t1, t2).toNanos();
System.out.println("시간 차이(나노초): " + ns);

 

시간 차이(나노초): 2000123456

 

- ChronoUnit - LocalDate 사이의 날짜 차이 구하기

import java.time.LocalDate;
import java.time.temporal.ChronoUnit;

public class ChronoUnitDaysExample {
    public static void main(String[] args) {
        LocalDate date1 = LocalDate.of(2025, 3, 1);
        LocalDate date2 = LocalDate.of(2025, 3, 27);

        long daysBetween = ChronoUnit.DAYS.between(date1, date2);
        System.out.println("두 날짜 사이의 일 수: " + daysBetween + "일");
    }
}

 

두 날짜 사이의 일 수: 26일

 

ChronoUnit.NANOS : 나노초 단위

ChronoUnit.MICROS : 마이크로초 단위

ChronoUnit.MILLIS : 밀리초 단위

ChronoUnit.SECONDS : 초 단위

ChronoUnit.MINUTES : 분 단위

ChronoUnit.HOURS : 시간 단위

ChronoUnit.DAYS : 일(day) 단위

ChronoUnit.WEEKS : 주(week) 단위

ChronoUnit.MONTHS : 월(month) 단위

ChronoUnit.YEARS : 년(year) 단위

ChronoUnit.DECADES : 10년 단위

ChronoUnit.CENTURIES : 100년 단위

 

- Period 

 

Period.between(startDate, endDate)  : 두 날짜 간의 Period 객체 생성

getYears() : 차이 나는 "년" 반환

getMonths() : 차이 나는 "월" 반환

getDays() : 차이 나는 "일" 반환

plusYears(n), plusMonths(n), plusDays(n) : 해당 단위만큼 추가

minusYears(n), minusMonths(n), minusDays(n) : 해당 단위만큼 감소

 

 

'Java' 카테고리의 다른 글

[Java] 형 변환 (Conversion)  (0) 2024.10.22