자바의 정석을 공부하면서 공부내용을 정리했습니다.
🌱 날짜와 시간
Calendar는 추상클래스이기 때문에 직접 객체를 생성할 수 없고, 메서드를 통해서 완전히 구현된 클래스의 인스턴스를 얻어야 한다.
Calendar cal = new Calendar(); // 에러! 추상클래스는 인스턴스를 생성할 수 없다.
// getInstance() 메서드는 Calendar 클래스를 구현한 클래스의 인스턴스를 반환한다.
Calendar cal = Calendar.getInstance();
Calendar 를 Date 로 변환
Calendar cal = Calendar.getInstatnce();
Date d = new Date(cal.getTimeInMillis());
Date를 Calendar로 변환
Date d = new Date();
Calendar cal = Calendar.getInstatnce();
cal.setTime(d);
getInstatnce() 를 통해서 얻은 인스턴스는 기본적으로 현재 시스템의 날짜와 시간에 대한 정보를 가지고 있다.
✔ 두 날짜간의 차이 구하기
두 날짜간의 차이를 얻으려면 두 날짜를 최소단위인 초단위로 변경한 다음에 차이를 구하면된다.
getTimeInMillis() 는 1/1000초 단위로 값을 반환한다.
초단위로 값을 얻기 위해선 1000으로 나눠줘야하고,
일 단위로 값을 얻기 위해선 24 * 60 * 60 * 1000 으로 나누어여 한다. (1일 = 24 * 60 * 60 )
Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();
long difference = (date2.getTimeInMillis() - date1.getTimeInMillis()) / 1000;
System.out.println("그 날(date1) 부터 지금(date2) 까지 " + difference + "초가 지났습니다.");
System.out.println("일(day) 로 계산하면 " + difference / (24*60*60) + "일 입니다.");
add메서드를 이용하면 특정 날짜 또는 시간을 기점으로 해서 일정시간 전후의 날짜와 시간을 알아낼 수 있다.
roll()도 증가 또는 감소 시킬 수 있는데 add 와 차이점은 다른 필드에 영향을 미치지 않는다.
ex. add 메서드로 날짜 필드의 값을 31만큼 증가시켰다면 다음 달로 넘어가므로 월 필드로 1 증가하지만, roll메서드는 월 필드의 값은 변하지 않고 일 필드의 값만 변경된다.
단, 일 필드가 말일 일 때는 roll 메서드를 이용해서 월 필드를 변경하면 일 필드에 영향을 미칠 수 있다.
public class CalendarEx5 {
public static void main(String[] args) {
Calendar date = Calendar.getInstance();
date.set(2022, 0, 31); // 2022년 1월 31일
System.out.println(toString(date));
date.roll(Calendar.MONTH ,1);
System.out.println(toString(date));
}
public static String toString(Calendar date){
return date.get(Calendar.YEAR) + "년 "
+ ( date.get(Calendar.MONTH) + 1 ) + "월 " + date.get(Calendar.DATE) + "일 ";
}
}
// 2월에는 31일이 없기 때문에 2월의 말일인 28일로 자동 변경되었다.
/* 실행결과
2022년 1월 31일
2022년 2월 28일
*/
'Language > JAVA' 카테고리의 다른 글
[JAVA] Chapter 11. Collections Framework (0) | 2022.06.02 |
---|---|
[JAVA] Chapter 9. java.lang 패키지와 유용한 클래스 (0) | 2022.05.28 |
[JAVA] Chapter 8. 예외처리 (0) | 2022.05.27 |
[JAVA] Chapter 7. 객체 지향 프로그래밍Ⅱ (0) | 2022.05.24 |
[JAVA] Chapter 6. 객체 지향 프로그래밍Ⅰ (0) | 2022.05.22 |