본문 바로가기
Java

Java 중급 1 - 날짜와 시간(2)

by KongJiHoon 2025. 3. 19.

시간의 단위와 시간 필드

 

1. 시간의 단위 - TemporalUnit, ChronoUnit

  • TemporalUnit 인터페이스는 날짜와 시간을 측정하는 단위를 나타내며 주로 사용되는 구현체는
    java.time.temporal.ChronoUnit 열거형으로 구현
  • ChronoUnit은 다양한 시간 단위를 제공
  • 주요 메서드
    • between(Temporal, Temporal)
      • 두 객체 사이의 시간을 현재 ChronoUnit 단위로 측정하여  반환
    • isDateBased()
      • 현재 ChronoUnit이 날짜 기반 단위인지(ex) Day, Week, Month, Year) 여부를 반환
    • isTimeBased()
      • 현재 ChronoUnit이 시간기반 단위인지(ex) Hour, Minutes, Seconds) 여부를 반환
    • isSupportedBy(Temporal) 
      • 주어진 Temporal 객체가 현재 ChronoUnit 단위를 지원하는지 여부를 반환한다. 
    • getDuration() 
      • 현재 ChronoUnit의 기간을 Duration 객체로 반환 
        •  

 

ChronoUnitMain

package practice.time;

import java.time.LocalTime;
import java.time.temporal.ChronoUnit;

public class ChronoUnitMain {

    public static void main(String[] args) {


        ChronoUnit[] chronoUnits = ChronoUnit.values();

        // ChronoUnit 모든 단위 출력
        for (ChronoUnit values : chronoUnits) {
            System.out.println("value = " + values);
        }

        System.out.println("HOURS = " + ChronoUnit.HOURS);
        System.out.println("HOURS.Duration = " + ChronoUnit.HOURS.getDuration().getSeconds());
        System.out.println("DAYS = " + ChronoUnit.DAYS);
        System.out.println("DAYS.Duration = " + ChronoUnit.DAYS.getDuration().getSeconds());

        // 차이 구하기

        LocalTime lt1 = LocalTime.of(1, 10, 0);
        LocalTime lt2 = LocalTime.of(1, 20, 0);

        long secondsBetween = ChronoUnit.SECONDS.between(lt1, lt2);
        System.out.println("secondsBetween = " + secondsBetween);

        long minutesBetween = ChronoUnit.MINUTES.between(lt1, lt2);
        System.out.println("minutesBetween = " + minutesBetween);


    }
}

 

실행결과

value = Nanos
value = Micros
value = Millis
value = Seconds
value = Minutes
value = Hours
value = HalfDays
value = Days
value = Weeks
value = Months
value = Years
value = Decades
value = Centuries
value = Millennia
value = Eras
value = Forever
HOURS = Hours
HOURS.Duration = 3600
DAYS = Days
DAYS.Duration = 86400
secondsBetween = 600
minutesBetween = 10

 

 

2. 시간 필드 - ChronoField

  • 날짜 및 시간을 나타내는 데 사용되는 열거형이다. 날짜와 시간의 특정 부분을 나타낸다.
  • 연도 관련 필드
    • ERA
      • 연대. 서기 또는 기원전
    • YEAR_OF_ERA
      • 연대 내의 연도
    • YEAR
      • 연도
    • EPOCH_DAY
      • 1970-01-01부터의 일 수

 

 

ChronoFieldMain

package practice.time;

import java.time.temporal.ChronoField;

public class ChronoFieldMain {


    public static void main(String[] args) {

        ChronoField[] values = ChronoField.values();

        // ChronoField의 단위와 그 단위의 범위출력
        for (ChronoField field : values) {
            System.out.println(field + ", range = " + field.range());
        }

        System.out.println("MONTH_OF_YEAR.range() = " + ChronoField.MONTH_OF_YEAR.range());

        System.out.println("DAY_OF_YEAR.range() = " + ChronoField.DAY_OF_YEAR.range());


    }

}

 

실행결과

NanoOfSecond, range = 0 - 999999999
NanoOfDay, range = 0 - 86399999999999
MicroOfSecond, range = 0 - 999999
MicroOfDay, range = 0 - 86399999999
MilliOfSecond, range = 0 - 999
MilliOfDay, range = 0 - 86399999
SecondOfMinute, range = 0 - 59
SecondOfDay, range = 0 - 86399
MinuteOfHour, range = 0 - 59
MinuteOfDay, range = 0 - 1439
HourOfAmPm, range = 0 - 11
ClockHourOfAmPm, range = 1 - 12
HourOfDay, range = 0 - 23
ClockHourOfDay, range = 1 - 24
AmPmOfDay, range = 0 - 1
DayOfWeek, range = 1 - 7
AlignedDayOfWeekInMonth, range = 1 - 7
AlignedDayOfWeekInYear, range = 1 - 7
DayOfMonth, range = 1 - 28/31
DayOfYear, range = 1 - 365/366
EpochDay, range = -365243219162 - 365241780471
AlignedWeekOfMonth, range = 1 - 4/5
AlignedWeekOfYear, range = 1 - 53
MonthOfYear, range = 1 - 12
ProlepticMonth, range = -11999999988 - 11999999999
YearOfEra, range = 1 - 999999999/1000000000
Year, range = -999999999 - 999999999
Era, range = 0 - 1
InstantSeconds, range = -9223372036854775808 - 9223372036854775807
OffsetSeconds, range = -64800 - 64800
MONTH_OF_YEAR.range() = 1 - 12
DAY_OF_YEAR.range() = 1 - 365/366

 

** 위에서 설명한 두 인터페이스는 단독으로 사용하기 보다는 주로 날짜와 시간을 조회하거나 조작할 때 사용한다.

 

 

출처: 김영한 자바 중급 1편

'Java' 카테고리의 다른 글

Java 중급 1 - 중첩클래스, 내부 클래스(1)  (0) 2025.04.12
Java 중급 1 - 날짜와 시간(3)  (0) 2025.03.23
Java 중급 1 - 날짜와 시간(1)  (0) 2025.03.16
Java 중급 1 - 열거형 Enum  (0) 2025.02.24
Java 중급 1 - Wrapper Class  (0) 2025.02.24