java.time - 날짜와 시간을 다루는데 필요한 핵심 클래스 제공
java.time패키지의 핵심 클래스
LocalDate | 날짜를 나타내는 클래스 |
LocalTime | 시간을 나타내는 클래스 |
LocalDateTime | 날짜, 시간을 모두 표현하는 클래스 |
ZonedDateTime | 날짜, 시간, 장소까지 표현하는 클래스 |
Period | 두 날짜 간의 차이를 표현하기 위한 클래스 |
Duration | 두 시간의 차이를 표현하기 위한 클래스 |
이 클래스들의 특징은 String 클래스처럼 불변
-> 날짜나 시간을 변경하는 메서드들은 기존의 객체를 변경하는 대신 항상 새로운 객체를 반환(그래서 대입연산자 필요!)
객체 생성하기
1. now( ) 현재 날짜와 시간을 저장하는 객체 생성
import java.time.*;
public class DateTime {
public static void main(String[] args) {
// 1. now( ) 현재 날짜, 시간, 장소 출력
LocalDate date1 = LocalDate.now();
System.out.println(date1); // 2022-01-01
LocalTime time1 = LocalTime.now();
System.out.println(time1); // 19:52:16.795588800
LocalDateTime dateTime1 = LocalDateTime.now();
System.out.println(dateTime1); //2022-01-01T19:53:06.364487
ZonedDateTime zonedDateTime1 = ZonedDateTime.now();
System.out.println(zonedDateTime1); //2022-01-01T19:54:35.160073800+09:00[Asia/Seoul]
2. .of( ) 사용자 지정으로 설정
import java.time.*;
public class DateTime {
public static void main(String[] args) {
// 2. of( ) 사용자 지정 출력
LocalDate date2 = LocalDate.of(2022,11,06);
System.out.println(date2); // 2022-11-06
LocalTime time2 = LocalTime.of(01,20,30);
System.out.println(time2); // 01:20:30
// LocalDateTime dateTime2 = LocalDateTime.of(2022,11,06,01,20,30); // 아래코드와 동일
LocalDateTime dateTime2 = LocalDateTime.of(date2,time2);
System.out.println(dateTime2); // 2022-11-06T01:20:30
// ZonedDateTime zonedDateTime2 = ZonedDateTime.of(date2,time2,ZoneId.of("Asia/Seoul")); // 아래코드와 동일
ZonedDateTime zonedDateTime2 = ZonedDateTime.of(dateTime2,ZoneId.of("Asia/Seoul"));
System.out.println(zonedDateTime2); // 2022-11-06T01:20:30+09:00[Asia/Seoul]
-> now( )와 of( )는 static 메서드로 구현
특정 필드의 값 가져오기 get.----( )
간단히 get—( )메서드로 호출이 가능 월의 범위는 1~12, 요일은 월1 ~ 일7
LocalDate | date2.getYear( ) | 년도(2022) |
date2.getMonthValue( ) | 월(11) – 숫자 | |
date2.getMonth( ) | 월(NOVEMBER) – 영어 | |
date2.getDayOfMonth( ) | 일(6) | |
date2.getDayOfYear( ) | 같은 해의 1월 1일부터의 일수(310) | |
date2.getDayOfWeek( ) | 요일(SUNDAY) | |
date2.get.lengthOfMonth( ) | 30(11월의 총 일수) | |
date2.get.lengthOfYear( ) | 365(같은 해의 총 일수), 윤년이면 366 | |
date.isLeapYear( ) | false(윤년여부 확인) |
LocalTime | time2.getHour( ) | 1(시) |
time2.getMinute( ) | 20(분) | |
time2.getSecond( ) | 30(초) | |
time2.getNano( ) | 0(나노초) |
필드의 값 변경하기
날짜와 시간에서 특정 필드 값을 변경하려면 with로 시작하는 메서드 사용한다.
date2 = date2.withYear(2023); // 년도를 2023년으로 변경
System.out.println(date2.getYear()); // 2023
date2 = date2.withMonth(12); // 월을 12월로 변경
System.out.println(date2.getMonth()); // DECEMBER
date2 = date2.withDayOfMonth(7); // 일을 7일로 변경
System.out.println(date2.getDayOfMonth()); // 7
time2 = time2.withHour(2); // 시를 2시로 변경
System.out.println(time2.getHour()); // 2
time2 = time2.withMinute(21); // 분을 21분으로 변경
System.out.println(time2.getMinute()); // 21
time2 = time2.withSecond(31); // 초를 31초로 변경
System.out.println(time2.getSecond()); // 31
Period
두 날짜의 차이를 나타내는 period는 between( )으로 얻을 수 있음
System.out.println(date1); // 2022-01-01
System.out.println(date2); // 2023-12-07
Period period = Period.between(date1, date2);
System.out.println(period); // P1Y11M6D
Period period2 = Period.between(date2, date1);
System.out.println(period2); // P-1Y-11M-6D
LocalDate의 toEpochDay( )는 period를 사용하지 않고, 두 날짜 사이의 일 수를 편하게 계산할 수 있다.
LocalDate date3 = LocalDate.now(); // 2022.01.01
LocalDate date4 = LocalDate.of(2022, 12, 31);
long period3 = date4.toEpochDay() - date3.toEpochDay();
System.out.println(period3); // 364
'Java' 카테고리의 다른 글
BufferedReader, BufferedWriter, StringTokenizer (0) | 2022.01.17 |
---|---|
재귀호출( recursive call) (0) | 2022.01.13 |
ChoiceFormat과 MessageFormat (0) | 2022.01.08 |
Math클래스의 round와 random 메소드 (0) | 2021.12.29 |