LocalDate
클래스 : 날짜 관련 기능 제공
LocalTime
클래스 : 시각 관련 기능 제공
LocalDateTime
클래스 : 날짜 및 시각 관련 기능 제공
toString()
메서드 오버라이딩 되어 있음now
메서드 호출하여 현재 시스템 정보 가져오고, of
메서드 호출하여 날짜 및 시각 정보 설정 가능
getXXX()
메서드 호출하여 항목별 정보 가져옴
-> XXX : 가져올 정보 종류
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
public class A {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
System.out.println(date);
// 2022-11-29 : 오늘 날짜 출력됨
LocalTime time = LocalTime.now();
System.out.println(time);
// 16:00:18.271361700 : 시스템 시각 정보 리턴받음
LocalDateTime datetime = LocalDateTime.now();
System.out.println(datetime);
// 2022-11-29T16:00:56.414298700 : 날짜 시각 정보 리턴받음
}
}
LocalDate date = LocalDate.of(1998, 6, 18); // 연, 월, 일시 저장
System.out.println(date);
LocalTime time = LocalTime.of(8, 34, 1); // 시, 분, 초 저장
System.out.println(time);
LocalDateTime datetime = LocalDateTime.of(2002, 3, 5, 12, 46, 34);
// 연, 월, 일, 시 한번에 저장해도 되고
System.out.println(datetime);
LocalDateTime datetime2 = LocalDateTime.of(date, time);
// 아까 만들어둔 date와 time 써도 된다!
System.out.println(datetime2);
int year = date.getYear();
int month = date.getMonthValue();
// getMonthValue() 사용해야 함!
// getMonth()는 Month 타입 객체가 리턴됨!
int day = date.getDayOfMonth();
System.out.println(year + "/" + month + "/" + day);
int hour = time.getHour();
int min = time.getMinute();
int sec = time.getSecond();
System.out.println(hour + ":" + min + ":" + sec);
enum 타입 객체인 Month 타입으로 관리
-> 각 월의 이름이 상수로 제공됨
Month month = date.getMonth();
System.out.println(month); // toString() 생략됨
String monthName = month.toString();
// 변수에 저장할 때는 꼭 toString() 붙어야 함!
System.out.println(monthName);
Month 객체를 영어식 표현, 한국식 표현으로 변환
⭐ 영어로 변환
System.out.println(month.getDisplayName(TextStyle.SHORT, Locale.ENGLISH));
System.out.println(month.getDisplayName(TextStyle.FULL, Locale.ENGLISH));
System.out.println(month.getDisplayName(TextStyle.NARROW, Locale.ENGLISH));
📌 출력
Jun // short
June // full
J // narrow
⭐ 한국어로 변환
System.out.println(month.getDisplayName(TextStyle.NARROW, Locale.KOREA));
System.out.println(month.getDisplayName(TextStyle.FULL, Locale.KOREA));
System.out.println(month.getDisplayName(TextStyle.SHORT, Locale.KOREA));
📌 출력
6월
6월
6월
// 한국어는 다 똑같이 출력됨
plusXXX()
와 minusXXX()
메서드 활용하여 연산 가능LocalDate today = LocalDate.now();
System.out.println(today.plusMonths(2));
// 현재 날짜로부터 2개월 지난 날짜 리턴
System.out.println(today.plusDays(4));
// 현재 날짜로부터 4일 지난 날짜 리턴
System.out.println(today.minusDays(20));
// 현재 날짜로부터 20일 전의 날짜 리턴
System.out.println(today.plusMonths(1).plusDays(23));
// 두 개 연결해서 사용도 가능
compareTo()
: 현재 객체 날짜가 대상 객체보다 이전이면 음수, 이후면 양수, 같으면 0 리턴
isAfter()
: 설정된 날짜가 현재 날짜보다 미래인지 판별
isBefore()
: 설정된 날짜가 현재 날짜보다 과거인지 판별
isEqual()
: 설정된 날짜가 현재 날짜와 동일한지 판별
LocalDate date2 = LocalDate.of(2000, 1, 1);
LocalDate date3 = LocalDate.now();
System.out.println(date2.compareTo(date3)); // -22
System.out.println(date2.isAfter(date3)); // false
System.out.println(date2.isBefore(date3)); //true
System.out.println(date2.isEqual(date3)); //false
until()
: 두 객체 간의 날짜 및 시간 차이 게산
파라미터로 대상 객체와 항목 정보 지정
-> 항목 정보는 ChronoUnit 객체(enum타입)의 XXX 상수 사용
long result = date2.until(date3, ChronoUnit.YEARS); // 년도 차이 계산
System.out.println(result);
long result2 = date2.until(date3, ChronoUnit.MONTHS); // 월 차이 계산
System.out.println(result2);
long result3 = date2.until(date3, ChronoUnit.DAYS); // 일 차이 계산
System.out.println(result3);
날짜 또는 시각 정보를 원하는 형식으로 변환
SimpleDateFormat
클래스 : Date 타입 객체에 대한 형식화
DateTimeFormatter
클래스 : LocalXXX 타입 객체에 대한 형식화
기호 | 의미 | 표현 | 예 |
---|---|---|---|
y | 연도 | yyyy, yy | 2022, 22 |
M | 월 | MMM, MM | 02월, 02 |
d | 일 | dd | 03 |
E | 요일 | EEEE, E | 화요일, 화 |
H | 시(24시) | HH | 15 |
K | 시(12시) | KK | 3 |
m | 분 | mm | 02 |
s | 초 | ss | 34 |
a | 오전 / 오후 | a | 오전 또는 오후 |
- SimpleDateFormat 클래스 사용
SimpleDateFormat
인스턴스 생성 후 파라미터로 패턴 문자열 전달Date today = new Date();
System.out.println(today);
// 기본 표현 형식으로 출력됨
// Tue Nov 29 17:23:01 KST 2022
String pattern = "yyyy년 MM월 dd일 EEEE";
// 형식 지정 문자를 사용해서 패턴 문자열 생성
SimpleDateFormat sdf = new SimpleDateFormat(pattern);
// SimpleDateFormat 인스턴스 생성해서 파라미터로 패턴 문자열 전달
System.out.println(sdf.format(today));
// 2022년 11월 29일 화요일
// 형식에 맞게 변환됨
String formatToday = sdf.format(today);
// String 타입 변수에 저장 가능
pattern = "yyyy/MM/dd(E) a HH:mm:ss";
SimpleDateFormat sdf2 = new SimpleDateFormat(pattern);
System.out.println(sdf2.format(today));
// 2022/11/29(화) 오후 17:23:01
- DateTimeFormatter 클래스 사용
ofPattern()
메서드 호출하여 파라미터로 패턴 문자열 전달
패턴 문자열은 SimpleDateFormat
클래스와 동일하게 사용
LocalTime
과 LocalDate
클래스 사용 시 패턴 문자열이 존재하지 않는 정보를 포함하지 않도록 해야함
format()
메서드 호출해서 파라미터로 DateTimeFormatter
객체 전달
LocalDateTime now = LocalDateTime.now();
System.out.println(now);
// 기본 표현 형식으로 출력됨
// 2022-11-29T17:31:18.983273600
String pattern = "yyyy/MM/dd(E) a HH:mm:ss";
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(pattern);
System.out.println(now.format(dtf));
// 2022/11/29(화) 오후 17:32:32