꾸준하게 기록하기
article thumbnail
자바의 정석을 공부하면서 공부내용을 정리했습니다.

 

🌱 날짜와 시간

 

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일
*/

 

😀 예제 코드 깃 주소

728x90
profile

꾸준하게 기록하기

@:_:

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!