시간의 단위와 시간 필드
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 객체로 반환
- 현재 ChronoUnit의 기간을 Duration 객체로 반환
- between(Temporal, Temporal)
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부터의 일 수
- ERA


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 |