틱(Tick), 에포크(Epoch), 타임 스탬프 : 특정 시각으로부터 흐른 누적 시간
// 날짜 덧셈
Calendar now=Calendar.getInstance();
now.add(Calendar.DATE, 100);
System.out.printf("%tF\n", now);
now.add(Calendar.MINUTE, 45);
System.out.printf("%tT\n", now);
now.add(Calendar.HOUR, 3);
System.out.printf("%tT\n", now);
// 시각-시간 뺄셈 : add메소드에 숫자만 음수로!
Calendar now=Calendar.getInstance();
now.add(Calendar.DATE, -100);
System.out.printf("%tF\n", now);
now.add(Calendar.MINUTE, -45);
System.out.printf("%tT\n", now);
now.add(Calendar.HOUR, -3);
System.out.printf("%tT\n", now);
// 시각-시각 뺄셈(Tick으로 계산)
// ex. 올해 크리스마스까지 남은 날짜 계산하기.
Calendar now=Calendar.getInstance();
long nowTick=now.getTimeInMillis();
long christmasTick=christmas.getTimeInMillis();
System.out.printf("올해 크리스마스는 %d일 남았습니다.\n", (christmasTick-nowTick)/1000/60/60/24);
시간과 시간의 덧셈은 Calendar를 사용하면 안된다. Int를 사용하여 해결한다.
import java.util.Date;
Date date=new Date(); # 현재 컴퓨터의 시각을 date에 저장
Calendar c1=Calendar.getInstance();
System.out.println(c1.get(Calendar.YEAR)); // 2020
System.out.println(c1.get(Calendar.MONTH)); // 0~11
System.out.println(c1.get(Calendar.DATE)); // 20
System.out.println(c1.get(Calendar.HOUR)); // 0(12시간표시)
System.out.println(c1.get(Calendar.MINUTE)); // 19
System.out.println(c1.get(Calendar.SECOND)); // 44
System.out.println(c1.get(Calendar.MILLISECOND)); // 419(1/1000)
System.out.println(c1.get(Calendar.AM_PM)); // 오전(0), 오후(1)
System.out.println(c1.get(Calendar.DAY_OF_MONTH)); // 20, 일
System.out.println(c1.get(Calendar.DAY_OF_YEAR)); // 294, 올해 며칠
System.out.println(c1.get(Calendar.DAY_OF_WEEK)); // 3, 이번주 며칠 -> 요일
System.out.println(c1.get(Calendar.HOUR_OF_DAY)); // 12 -> 12시(24시간표시)
System.out.println(c1.get(Calendar.WEEK_OF_YEAR)); // 43 -> 올해 몇주차인지
Calendar now=Calendar.getInstance();
// 2020-10-20
System.out.printf("%tF\n", now);
// 15:08:10
System.out.printf("%tT\n", now);
// 현재 날짜 입력받기
Calendar birthday=Calendar.getInstance();
// 내 생일로 수정(각각 set)
birthday.set(Calendar.YEAR, 1990);
birthday.set(Calendar.MONTH, 1);
birthday.set(Calendar.DATE, 1);
System.out.printf("%tF\n", birthday);
// 내 생일로 수정(통째로)
birthday.set(1990, 1, 1);
System.out.printf("%tF\n", birthday);
// 시, 분, 초까지 수정
birthday.set(1990, 1, 1, 23, 42, 32);
System.out.printf("%tF %tT\n", birthday, birthday);