[Java][time] LocalDate와 LocalTime 클래스
2022. 6. 16. 16:48ㆍJAVA/Language
1. LocalDate와 LocalTime 클래스 : 인스턴스 생성
LocalDate와 LocalTime 클래스는 java.time 패키지의 가장 기본이 되는 클래스입니다.
LocalDate와 LocalTime 인스턴스 생성방법 : now(), of(), parse()
LocalDate today = LocalDate.now();
LocalTime now = LocalTime.now();
LocalDate birthDate = LocalDate.of(1999, 12, 31);
LocalTime birthTime = LocalTime.of(23, 59, 59);
LocalDate birthDate = LocalDate.parse("1999-12-31");
LocalTime birthTime = LocalTime.parse("23:59:59");
2. LocalDate와 LocalTime 클래스의 특정필드의 값 가져오기 : get(TemporalField), getXXX()
특정 필드의 값을 가져오는 getXXX()
getXXX() 메서드를 사용하여 LocalDate와 LocalTime 인스턴스의 필드의 값을 반환할 수 있습니다.
클래스 | 메서드 | 설명(1999-12-31 23:59:59) |
LocalDate | int getYear() | 년도(1999) |
int getMonthValue() | 월(12) | |
Month getMonth() | 월(DECEMBER), getMonth().getValue() = 12 | |
int getDayOfMonth() | 일(31) | |
int getDayOfYear() | 같은 해의 1월 1일부터 몇번째 일(365) | |
DayOfWeek getDayOfWeek() | 요일(FRIDAY) getDayOfWeek().getValue() = 5 | |
int lengthOfMonth() | 같은 달의 총 일수 (31) | |
int lengthOfYear() | 같은 해의 총 일수 (365), 윤년이면 366 | |
boolean isLeapYear() | 윤년여부 확인 (false) | |
LocalTime | int getHour() | 시(23) |
int getMinute() | 분(59) | |
int getSecond() | 초(59) | |
int getNano() | 나노초(0) |
TemporalField 인터페이스를 이용한 특정 필드 가져오기 : get(TemporalField), getLong(TemporalField)
get(TemporalField) 메서드를 이용하면 날짜 또는 시간의 단위를 매개변수에 넣어주면 그에 맞는 필드값을 가져옵니다. 표에 나오는 ChronoField 열거형은 TemporalField 인터페이스의 구현입니다.
TemporalField(ChronoField) | 설명 |
ERA | 시대 |
YEAR_OF_EAR, YEAR | 년 |
MONTH_OF_YEAR | 월 |
DAY_OF_WEEK | 요일(1:월요일, 2:화요일, ..., 7:일요일) |
DAY_OF_MONTH | 일 |
AMPM_OF_DAY | 오전/오후 |
HOUR_OF_DAY | 시간(0~23) |
CLOCK_HOUR_OF_AMPM | 시간(1~12) |
MINUTE_OF_HOUR | 분 |
SECOND_OF_MINUTE | 초 |
MILLI_OF_SECOND | 밀리초(천분의 일초) |
MICRO_OF_SECOND | 마이크로초(만분의 일초) |
NANO_OF_SECOND | 나노초(10억분의 일초) |
DAY_OF_YEAR | 그 해의 몇번째 날 |
사용할 수 있는 필드는 클래스마다 다릅니다. 예를 들어 LocalDate는 날짜를 표현하기 위한 것이므로, MINUTE_OF_HOUR와 같이 시간에 관련된 필드는 사용할 수 없습니다.
birthDate.get(ChronoField.YEAR);
3. LocalDate와 LocalTime 필드의 값 변경하기 : with(), plus(), minus()
with 메서드
날짜와 시간에서 특정 필드 값을 변경하려면, 다음과 같이 with로 시작하는 메서드를 사용하거나 with() 메서드를 사용하여 단위와 값을 설정하여 변경할 수 있습니다.
with() 메서드 형식
LocalDate with(TemporalField field, long newValue);
with으로 시작하는 메서드들
LocalDate withYear(int year)
LocalDate withMonth(int month)
LocalDate withDayOfMonth(int dayOfMonth)
LocalTime withHour(int hour)
LocalTime withMinute(int minute)
LocalTime withSecond(int second)
LocalTime withNano(int nanoOfSecond)
plus 메서드
plus 메서드는 LocalDate 또는 LocalTime 인스턴에 특정한 일자와 시간을 추가하는 메서드입니다.
plus() 메서드 형식
LocalTime plus(TemporalAmount amountToAdd)
LocalTime plus(long amountToAdd, TemporalUnit unit)
LocalDate plus(TemporalAmount amountToAdd)
LocalDate plus(long amountToAdd, TemporalUnit unit)
plus로 시작하는 메서드들
LocalDate plusYears(long yearsToAdd)
LocalDate plusMonths(long monthsToAdd)
LocalDate plusDays(long daysToAdd)
LocalDate plusWeeks(long weeksToAdd)
LocalTime plusHours(long hoursToAdd)
LocalTime plusMinutes(long minutesToAdd)
LocalTime plusSeconds(long seoncsToAdd)
LocalTime plusNanos(long nanosToAdd)
LocalTime.truncatedTo() 메서드
지정된 시간 단위보다 작은 단위의 필드를 0으로 변환시킵니다.
LocalTime time = LocalTime.of(12, 34, 56); // 12시 34분 56초
time = time.truncatedTo(ChronoUnit.HOURS); // 시(hour)보다 작은 단위를 0으로
System.out.println(time); // 12:00
열거형 ChornoUnit에 정의된 상수 목록
TemporalUnit(ChronoUnit) | 설명 |
FOREVER | Long.MAX_VALUE초(약 3천억년) |
EARS | 1,000,000,000년 |
MILLENNIA | 1,000년 |
CENTURIES | 100년 |
DECADES | 10년 |
YEARS | 년 |
MONTHS | 월 |
WEEKS | 주 |
DAYS | 일 |
HALF_DAYS | 반나절 |
HOURS | 시 |
MINUTES | 분 |
SECONDS | 초 |
MILLIS | 밀리초(천분의 일초) |
MICROS | 마이크로초(만분의 일초) |
NANOS | 나노초(10억분의 일초) |
4. 날짜와 시간의 비교 : isAter(), isBefore(), isEqual()
메서드 형식
boolean isAfter(ChronoLocalDate other)
boolean isBefore(ChronoLocalDate other)
boolean isEqual(ChornoLocalDate other) - LocalDate에만 존재
- A.isAfter(B) : A가 B보다 일자 또는 시간이 앞서면 true 반환, 아니면 false 반환
- A.isBefore(B) : A가 B보다 일자 또는 시간이 느리면 true 반환, 아니면 false 반환
- A.isEqual(B) : A와 B의 일자가 동일하면 true 반환, 아니면 false 반환
5. LocalDate와 LocalTime 클래스의 예제
public class NewTimeEx1 {
public static void main(String[] args) {
LocalDate today = LocalDate.now(); // 오늘 날짜
LocalTime now = LocalTime.now(); // 현재 시간
LocalDate birthDate = LocalDate.of(1998, 12, 31); // 1998년 12월 31일
LocalTime birthTime = LocalTime.of(23, 59, 59); // 23시 59분 59초
System.out.println("today=" + today);
System.out.println("now=" + now);
System.out.println("birthDate=" + birthDate);
System.out.println("birthTime=" + birthTime);
System.out.println(birthDate.withYear(2000)); // 2000-12-31
System.out.println(birthDate.plusDays(1)); // 1999-01-01
System.out.println(birthDate.plus(1, ChronoUnit.DAYS)); // 1999-01-01
// 23:59:59 -> 23:00
System.out.println(birthTime.truncatedTo(ChronoUnit.HOURS));
// 특정 ChornoField의 범위를 알아내는 방법
System.out.println(ChronoField.CLOCK_HOUR_OF_DAY.range()); // 1-24
System.out.println(ChronoField.HOUR_OF_DAY.range()); // 0-23
LocalDate date1 = LocalDate.of(2000, 1, 1);
LocalDate date2 = LocalDate.of(2001, 12, 31);
LocalTime time1 = LocalTime.of(1, 30);
LocalTime time2 = LocalTime.of(3, 30);
System.out.println("date1.isAfter() : " + date1.isAfter(date2));
System.out.println("date1.isBefore() : " + date1.isBefore(date2));
System.out.println("date1.isEqual() : " + date1.isEqual(date2));
System.out.println("time1.isAfter() : " + time1.isAfter(time2));
System.out.println("time1.isBefore() : " + time1.isBefore(time2));
}
}
today=2022-06-16
now=16:44:05.332444900
birthDate=1998-12-31
birthTime=23:59:59
2000-12-31
1999-01-01
1999-01-01
23:00
1 - 24
0 - 23
date1.isAfter() : false
date1.isBefore() : true
date1.isEqual() : false
time1.isAfter() : false
time1.isBefore() : true
References
source code : https://github.com/yonghwankim-dev/java_study/tree/main/ch10
[도서] Java의 정석, 남궁 성 지음
'JAVA > Language' 카테고리의 다른 글
[Java][time] LocalDateTime & ZonedDateTime 클래스, TemporalAdjusters 클래스 (0) | 2022.06.20 |
---|---|
[Java][time] Instant 클래스 (0) | 2022.06.16 |
[Java][time] 형식화 클래스 : DecimalFormat, SimpleDateFormat, ChoiceFormat, MessageFormat (0) | 2022.06.16 |
[Java][time] 날짜와 시간 : Calendar, Date (0) | 2022.06.16 |
[Java] 8. 예외처리(exception handling) (0) | 2022.06.08 |