Date, Calendar 를 사용하여 날짜 나타내기
자바에서 날짜를 나타낼때는 Date, Calendar 를 사용한다.
1. Date 클래스를 사용하여 현재시각 나타내기
날짜 타입 format 설명
------------------------------------------------------------------------------------------------
%tF 날짜를 yyyy-mm-dd 형식으로 포맷
%tT 날짜의 시각을 HH:MM:SS 형식으로 포맷
%tp 오전, 오후를 출력
%tA 요일명 출력
%tY 4자리 년도만 출력
%tB 월의 이름(January, February ...)출력
%tm 월의 01,02,03 ~~ 10,11,12 로 출력
%td 일수를 1~31 로 출력
%te %td와 동일함
%tk 시간을 0~23 으로 출력
%tl 시간을 1~12 으로 출력
%tM 분을 00~59 으로 출력
%tS 초를 00~59 으로 출력
%tZ 타임존을 출력(한국은 KST로 나옴).
------------------------------------------------------------------------------------------------
Date now = new Date(); // 현재시각
System.out.println("1. 현재시각: " + now);
// 1. 현재시각: Tue Jun 21 22:28:09 KST 2022
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("2. 현재시각: " + df.format(now));
// 2. 현재시각: 2022-06-21 22:28:09
String currentTime = String.format("%tF %tT %tA %tZ", now, now, now, now);
System.out.println( "3. 현재시각: " + currentTime );
// 3. 현재시각: 2022-06-21 22:28:09 화요일 KST
==============================================================================
2. Calendar 클래스를 사용하여 현재시각 나타내기
→ Date 클래스 보다 조금더 향상시켜서 나온 것이 Calendar 클래스이다.
간단한 날짜표현에는 Date 클래스를 사용하는 것이 더 나을 수 있으며,
두개 날짜사이의 날짜연산을 할 경우에는 메소드기능이 더 많이 추가된
Calendar 클래스를 사용하는 것이 나을 수 있다.
→ 주의해야할 것은 get(Calendar.MONTH)로 얻어오는 값의 범위가 1~12가 아닌, 0~11 이라는 것이다.
그래서 get(Calendar.MONTH)로 얻어오는 값이 0이면 1월을 의미하고 11이면 12월을 의미한다.
그러므로 현재월을 표현하려면 ( currentDate.get(Calendar.MONTH) + 1 ) 으로 해야한다.
괄호없이 currentDate.get(Calendar.MONTH) + 1로 하면 이상한 값이 나온다. (괄호유무조심!!)
Calendar currentDate = Calendar.getInstance();
// 현재날짜와 시간을 얻어온다.
int year = currentDate.get(Calendar.YEAR);
int month = currentDate.get(Calendar.MONTH); // 0~11, 0=>1월
int month_2 = (currentDate.get( Calendar.MONTH) +1 ); // 1~12, 1=>1월
String str_month = (month_2<10)?"0"+month_2:String.valueOf(month_2);
// 해당 월이 한자리 숫자이면 앞에 0을 추가하여 두자리로 만듦
System.out.println("올해의 연도: " + year);
// 올해의 연도: 2022
System.out.println("월(0~11, 0=>1월): " + month);
// 월(0~11, 0=>1월): 5
System.out.println("월(1~12): " + str_month);
// 월(1~12): 06
System.out.println("이 해의 몇 째 주: " + currentDate.get(Calendar.WEEK_OF_YEAR));
// 이 해의 몇 째 주: 26
System.out.println("이 달의 몇 째 주: " + currentDate.get(Calendar.WEEK_OF_MONTH));
// 이 달의 몇 째 주: 4
// 아래의 Calendar.DATE 와 Calendar.DAY_OF_MONTH 는 같은 것이다.
int day = currentDate.get(Calendar.DATE);
String strDay = day<10?"0"+day:String.valueOf(day);
System.out.println("이 달의 몇 일: " + currentDate.get(Calendar.DATE));
// 이 달의 몇 일: 21
System.out.println("이 달의 몇 일: " + currentDate.get(Calendar.DAY_OF_MONTH));
// 이 달의 몇 일: 21
System.out.println("이 달의 몇 일: " + strDay);
// 이 달의 몇 일: 21
System.out.println("이 해의 몇 일: " + currentDate.get(Calendar.DAY_OF_YEAR));
// 이 해의 몇 일: 172
// 1:일요일, 2:월요일, 3:화요일, 4:수요일, 5:목요일, 6:금요일, 7:토요일
System.out.println("요일(1~7, 1:일요일): " + currentDate.get(Calendar.DAY_OF_WEEK));
// 요일(1~7, 1:일요일): 3
System.out.println("이 달의 몇 째 요일: " + currentDate.get(Calendar.DAY_OF_WEEK_IN_MONTH));
// 이 달의 몇 째 요일: 3
System.out.println("오전_오후(0:오전, 1:오후): " + currentDate.get(Calendar.AM_PM));
// 오전_오후(0:오전, 1:오후): 1
System.out.println("시간(0~11): " + currentDate.get(Calendar.HOUR));
// 시간(0~11): 10
System.out.println("시간(0~23): " + currentDate.get(Calendar.HOUR_OF_DAY));
// 시간(0~23): 22
System.out.println("분(0~59): " + currentDate.get(Calendar.MINUTE));
// 분(0~59): 28
System.out.println("초(0~59): " + currentDate.get(Calendar.SECOND));
// 초(0~59): 9
System.out.println("1000분의 1초(0~999): " + currentDate.get(Calendar.MILLISECOND));
// 1000분의 1초(0~999): 418
// 천분의 1초를 시간으로 표시하기 위해 3600000으로 나누었다.(1시간 = 60 * 60초)
System.out.println("TimeZone(-12~+12): " + (currentDate.get(Calendar.ZONE_OFFSET)/(60*60*1000)));
// TimeZone(-12~+12): 9
// 이 달의 마지막 일을 찾는다.
System.out.println("이 달의 마지막 날: " + currentDate.getActualMaximum(Calendar.DATE) );
// 이 달의 마지막 날: 30
currentDate = Calendar.getInstance();
SimpleDateFormat dateft = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
// === 어제시각 나타내기 ===
currentDate.add(Calendar.DATE, -1);
System.out.println( "어제시각 => " + dateft.format(currentDate.getTime()) );
// dateft.format(Date date) 이므로 Calendar currentDate 을 Date 형식으로 바꾸어 주는 것이
// currentDate.getTime() 이다.
// 어제시각 => 2022-06-20 22:28:09
// === 현재시각 나타내기 ===
currentDate = Calendar.getInstance();
System.out.println( "현재시각 => " + dateft.format(currentDate.getTime()) );
// 현재시각 => 2022-06-21 22:28:09
// === 내일시각 나타내기 ===
currentDate.add(Calendar.DATE, +1);
System.out.println( "내일시각 => " + dateft.format(currentDate.getTime()) );
// 내일시각 => 2022-06-22 22:28:09