시각 + 시각 = X
시각 - 시각 = O(시간) 결과값의자료형은 -> "시간"
시간 + 시간 = O(시간) //ex) 8시간 + 2시간 = 10시간
시간 - 시간 = O(시간) //ex) 8시간 - 2시간 = 6시간
시각 + 시간 = O(시각) //ex) 2023년 7월 20일 16시 21분 50초 + 3시간 = 3시간 후 특정 시각
시각 - 시간 = O(시각) //ex) 2023년 7월 20일 16시 21분 50초 - 3시간 = 3시간 전 특정 시각
Date date = new Date(); //컴퓨터의 시각을 가져온다.
System.out.println(date);
Mon Aug 07 22:52:08 KST 2023
코드
//현재 시각 인스턴스화
Calendar c1 = Calendar.getInstance();
//연도 보는 방법1
System.out.println(c1.get(1)); //2023
//연도 보는 방법2 : Calendar 상수
System.out.println(c1.get(Calendar.YEAR));
//------------------------------------실제 사용 예제
System.out.println(c1.get(Calendar.YEAR)); //2023 > 년
System.out.println(c1.get(Calendar.MONTH)); //6 > 월(0~11) 월은 0부터 시작하니 주의!!!!!
System.out.println(c1.get(Calendar.DATE)); //20 > 일
System.out.println(c1.get(Calendar.HOUR)); //4 > 시(12H)
System.out.println(c1.get(Calendar.HOUR_OF_DAY)); //16 > 시(24H)
System.out.println(c1.get(Calendar.MINUTE)); //45 > 분
System.out.println(c1.get(Calendar.SECOND)); //49 > 초
System.out.println(c1.get(Calendar.MILLISECOND)); //5 > 밀리초(ms) **java에서 기본적으로 다루는 최소의 시간 단위 = ms**
System.out.println(c1.get(Calendar.AM_PM)); //1 > 오전(0), 오후(1)
System.out.println(c1.get(Calendar.DAY_OF_YEAR)); //201 > 일 > 올해 들어 201일 째
System.out.println(c1.get(Calendar.DAY_OF_MONTH)); //20 > 일 > 이번달 들어 20일 째
System.out.println(c1.get(Calendar.DAY_OF_WEEK)); //5 > 요일 > 1(일) ~ 7(토) > 이번주 들어 5일째 //반환값이 int라 숫자로 돌려줌.
System.out.println(c1.get(Calendar.WEEK_OF_YEAR)); //29 > 주 > 올해들어 29주차
System.out.println(c1.get(Calendar.WEEK_OF_MONTH)); //4 > 주 > 이번달 들어 4주차
//printf() > 형식 문자 > 날짜시간
System.out.printf("%tF\n", c1); //2023-07-20
System.out.printf("%tT\n", c1); //17:15:48
System.out.printf("%tA\n", c1); //목요일 > Locale > 지역 설정에 따라 사용자끼리 다르게 보일 수 있다.
코드
Calendar christmas = Calendar.getInstance(); //현재 시각
christmas.set(Calendar.MONTH, 11); //주의! 월은 0부터 시작하므로 설정 값 -1을 해야한다.
christmas.set(Calendar.DATE, 25);
System.out.printf("%tF %tT\n", christmas, christmas);
//--------------------------------------------------
//내 생일
Calendar birthday = Calendar.getInstance();
birthday.set(1997, 3, 20);
System.out.printf("%tF\n", birthday);
birthday.set(1997, 4, 20, 10, 30);
System.out.printf("%tF %tT\n", birthday, birthday);
2023-12-25 19:00:15
1997-04-20
1997-05-20 10:30:15
코드
Calendar now = Calendar.getInstance(); //현재 시각
System.out.printf("1일차: %tF\n", now);
now.add(Calendar.DATE, 100); //날짜에 100일 더하기
System.out.printf("100일차: %tF\n", now);
//12일 전 날짜 계산
now = Calendar.getInstance(); //현재시각 초기화
now.add(Calendar.DATE, -12);
System.out.printf("12일 전: %tF\n", now);
//지금으로부터 3시간 25분 뒤에 약 복용
now = Calendar.getInstance();
now.add(Calendar.HOUR, 3);
now.add(Calendar.MINUTE, 25);
System.out.printf("약 복용 시간: %tT\n", now);
1일차: 2023-08-07
100일차: 2023-11-15
12일 전: 2023-07-26
약 복용 시간: 02:28:00
시각끼리 연산하면 시간으로 나온다.
코드
//현재
Calendar now = Calendar.getInstance();
//종강일
Calendar end = Calendar.get
end.set(2023, 11, 27);
long nowTick = now.getTimeInMillis();
System.out.println(nowTick); //1,691,417,202,192ms > 1970.01.01 00:00:00으로부터 now까지 흐른 시간
//기준점부터 흘러간 시간
long endTick = end.getTimeInMillis();
System.out.println(endTick); //1,703,636,725,293ms
//수업 남은 시간 계산 = 종강일 - 현재일
long gap = endTick - nowTick;
System.out.printf("수업 남은 시간: %,d\n"
, gap / 1000 / 60 / 60 / 24);
//ms -> s -> m -> h -> d 순서로 나눠주기
1691417202192
1703686002208
수업 남은 시간: 142
코드
//2시간 30분
hour = 2;
int min = 30;
//2시간 40분 + 30분 = 2시간 70분(자리올림을 잘하라!)
hour = 2;
min = 40;
min += 30;
System.out.printf("%d시간 %d분\n", hour, min); //2시간 70분
//몫을 구하는 계산식(시 자리올림), 나머지를 구하는 계산식(분 덮어쓰기)
hour = hour + (min / 60);
min = min % 60;
System.out.printf("%d시간 %d분\n", hour, min); //3시간 10분
2시간 70분
3시간 10분
코드
//현재 시간의 tick
Calendar now = Calendar.getInstance();
System.out.println(now.getTimeInMillis());
//전용 메소드(현재 시간의 tick을 구하는 전용 메소드)
System.out.println(System.currentTimeMillis());
1691417968359
1691417968379