날짜와 시간 조회 및 조작 1
package practice.time;
import java.time.LocalDateTime;
import java.time.temporal.ChronoField;
public class GetTimeMain {
public static void main(String[] args) {
LocalDateTime dt = LocalDateTime.of(2025, 3, 23, 12, 35, 59);
System.out.println("YEAR = " + dt.get(ChronoField.YEAR));
System.out.println("MONTH_OF_YEAR = " + dt.get(ChronoField.MONTH_OF_YEAR));
System.out.println("DAY_OF_WEEK = " + dt.get(ChronoField.DAY_OF_WEEK));
System.out.println("HOUR_OF_DAY = " + dt.get(ChronoField.HOUR_OF_DAY));
System.out.println("MINUTE_OF_HOUR = " + dt.get(ChronoField.MINUTE_OF_HOUR));
System.out.println("SECOND_OF_MINUTE = " + dt.get(ChronoField.SECOND_OF_MINUTE));
// 편의 메서드
System.out.println("=== 편의 메서드 사용 ===");
System.out.println("YEAR = " + dt.getYear());
System.out.println("MONTH_OF_YEAR = " + dt.getMonthValue());
System.out.println("DAY_OF_WEEK = " + dt.getDayOfWeek());
System.out.println("HOUR_OF_DAY = " + dt.getHour());
System.out.println("MINUTE_OF_HOUR = " + dt.getMinute());
System.out.println("SECOND_OF_MINUTE = " + dt.getSecond());
}
}
실행결과
YEAR = 2025
MONTH_OF_YEAR = 3
DAY_OF_MONTH = 23
HOUR_OF_DAY = 12
MINUTE_OF_HOUR = 35
SECOND_OF_MINUTE = 59
=== 편의 메서드 사용 ===
YEAR = 2025
MONTH_OF_YEAR = 3
DAY_OF_WEEK = 23
HOUR_OF_DAY = 12
MINUTE_OF_HOUR = 35
SECOND_OF_MINUTE = 59
TemporalAccessor.get(TemporalField field)
- LocalDateTime을 포함한 특정 시점의 시간을 제공하는 클래스는 모두 TemporalAccessor인터페이스를 구현
- get(TemporalField field)을 호출할 때 어떤 날짜와 시간 필드를 조회할 지 TemporalField의 구현체인 ChronoField를 인수로 전달하면된다.
편의 메서드사용
- dt.get(ChronoField.DAY_OF_MONTH) -> dt.getDayOfMonth
- 자주 사용하는 조회 필드는 간단한 편의 메서드를 제공
날짜와 시간 조작
package practice.time;
import java.time.LocalDateTime;
import java.time.Period;
import java.time.temporal.ChronoUnit;
public class ChangeTimePlus {
public static void main(String[] args) {
LocalDateTime dt = LocalDateTime.of(2025, 3, 23, 13, 8, 59);
System.out.println("dt = " + dt);
LocalDateTime plusDt1 = dt.plus(10, ChronoUnit.YEARS);
System.out.println("plusDt1 = " + plusDt1);
// 편의 메서드 사용
LocalDateTime plusDt2 = dt.plusYears(10);
System.out.println("plusDt2 = " + plusDt2);
Period period = Period.ofYears(10);
LocalDateTime plusDt3 = dt.plus(period);
System.out.println("plusDt3 = " + plusDt3);
}
}
실행 결과
dt = 2025-03-23T13:08:59
plusDt1 = 2035-03-23T13:08:59
plusDt2 = 2035-03-23T13:08:59
plusDt3 = 2035-03-23T13:08:59
Temporal plus
- LocalDateTime을 포함한 특정 시점의 시간을 제공하는 클래스는 모두 Temporal 인터페이스를 구현
- plus(long amountToAdd, ChronoUnit unit)를 호출할 때 더할 숫자와 시간의 단위를 전달하면 된다.
- 불변이므로 반환값을 받아야함.
- 편의 메서드 제공
- dt.plus(10, ChronoUnit.YEARS) -> dt.plusYears(10)
날짜와 시간 조작2
package practice.time;
import java.time.DayOfWeek;
import java.time.LocalDateTime;
import java.time.temporal.ChronoField;
import java.time.temporal.TemporalAdjuster;
import java.time.temporal.TemporalAdjusters;
public class ChangeTimeWithMain {
public static void main(String[] args) {
LocalDateTime dt = LocalDateTime.of(2025, 3, 23, 13, 14, 59);
System.out.println("dt = " + dt);
LocalDateTime changeDt1 = dt.with(ChronoField.YEAR, 2020);
System.out.println("changeDt1 = " + changeDt1);
LocalDateTime changeDt2 = dt.withYear(2020);
System.out.println("changeDt2 = " + changeDt2);
// TemporalAdjuster 사용
LocalDateTime with1 = dt.with(TemporalAdjusters.next(DayOfWeek.FRIDAY));
System.out.println("기준 날짜" + dt);
System.out.println("다음 금요일: " + with1);
LocalDateTime with2 = dt.with(TemporalAdjusters.lastInMonth(DayOfWeek.SUNDAY));
System.out.println("같은 달의 마지막 일요일 = " + with2);
}
}
실행결과
dt = 2025-03-23T13:14:59
changeDt1 = 2020-03-23T13:14:59
changeDt2 = 2020-03-23T13:14:59
기준 날짜2025-03-23T13:14:59
다음 금요일: 2025-03-28T13:14:59
같은 달의 마지막 일요일 = 2025-03-30T13:14:59
Temporal.with
- Temporal.with()를 사용하면 날짜와 시간의 특정필드의 값만 변경할 수 있다.
- 편의 메서드 제공
- dt.with(ChronoUnit.YEAR, 2020) -> dt.withYear(2020)
TemporalAdjusters
- 다음 금요일, 이번달의 마지막 일요일 등과 같이 복잡한 날짜를 계산하고 싶다면 TemporalAdjuster사용.
DayOfWeek
- 월, 화, 수, 목, 금, 토, 일을 나타내는 열거형
날짜와 시간 문자열 파싱과 포멧팅
package practice.time;
import java.time.LocalDate;
import java.time.format.DateTimeFormatter;
public class FormattingMain1 {
public static void main(String[] args) {
// 포멧팅: 날짜를 문자열로
LocalDate date = LocalDate.of(2025, 3, 23);
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy년 MM월 dd일");
String formatedDate = date.format(formatter);
System.out.println("날짜와 시간 포멧팅: " + formatedDate);
// 파싱: 문자를 날짜로
String input = "2030년 01월 01일";
LocalDate parsedDate = LocalDate.parse(input, formatter);
System.out.println("문자열 파싱 날짜와 시간: " + parsedDate);
}
}
실행결과
날짜와 시간 포멧팅: 2025년 03월 23일
문자열 파싱 날짜와 시간: 2030-01-01
출처: 김영한 자바 중급 1
'Java' 카테고리의 다른 글
| Java 중급 1 - 중첩클래스, 내부 클래스(2) (0) | 2025.04.13 |
|---|---|
| Java 중급 1 - 중첩클래스, 내부 클래스(1) (0) | 2025.04.12 |
| Java 중급 1 - 날짜와 시간(2) (0) | 2025.03.19 |
| Java 중급 1 - 날짜와 시간(1) (0) | 2025.03.16 |
| Java 중급 1 - 열거형 Enum (0) | 2025.02.24 |