▶ Calendar
날짜와 시간에 대한 데이터를 손쉽게 처리할 수 있는 클래스(추상클래스)
■ 현재 날짜, 시각 정보 조회
Calendar cal = Calendar.getInstance();
현재 로컬 컴퓨터상의 시스템 상 지역정보를 바탕으로 해당 지역의 시간정보를 가져온다.
그레고리력 == 국제표준시간 (한국은 그레고리력을 사용)
로컬 컴퓨터 상의 지역정보가 그레고리달력이 아닌 경우 명시적으로 그레고리력 객체 생성
Calendar cal = new GregorianCalendar();
이때 cal을 출력해보면 아래와 같은 식이 나온다
System.out.println(cal);
java.util.GregorianCalendar[time=1681225569017,areFieldsSet=true,areAllFieldsSet=true,lenient=true,zone=sun.util.calendar.ZoneInfo[id="Asia/Seoul",offset=32400000,dstSavings=0,useDaylight=false,transitions=30,lastRule=null],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2023,MONTH=3,WEEK_OF_YEAR=15,WEEK_OF_MONTH=3,DAY_OF_MONTH=12,DAY_OF_YEAR=102,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=2,AM_PM=0,HOUR=0,HOUR_OF_DAY=0,MINUTE=6,SECOND=9,MILLISECOND=17,ZONE_OFFSET=32400000,DST_OFFSET=0]
때문에 깔끔하게 현재 날짜와 시각 정보를 조회하려면 printCalendar() 함수를 사용해야한다.
■ printCalendar();
printCalendar() 함수를 사용하면 아래와 같은 결과가 나온다.
printCalendar(cal);
<결과>
2023/04/12 00:10:38
■ 현재 날짜만 조회
System.out.println(cal1.get(Calendar.YEAR));
System.out.println(cal1.get(Calendar.MONTH)); // 0월 == 1월
System.out.println(cal1.get(Calendar.DATE));
<결과>
2023
3 // 글을 쓰는 현재는 4월이지만 Calendar의 특성상 -1 되어 3월로 반환된 것
11
이때 Calendar의 MONTH는 0월부터 시작한다.
즉, 우리가 생각하는 1월은 0월로 반환된다.
■ 시(12, 24), 분, 초
System.out.println(cal1.get(Calendar.HOUR)); // 12시간 기준
System.out.println(cal1.get(Calendar.HOUR_OF_DAY)); // 24 시간 기준
System.out.println(cal1.get(Calendar.MINUTE));
System.out.println(cal1.get(Calendar.SECOND));
<결과>
12 // 12시간 기준 오전 12시
0 // 24시 기준 오전 12시
0 // 0분
1 // 1초
■ 요일
System.out.println(cal.get(Calendar.DAY_OF_WEEK));
4 // 글쓰기 현재 기준 수요일
현재 로컬 컴퓨터상의 시스템 상 지역정보를 바탕으로 요일에 맞는 숫자를 반환해준다.
일요일 = 1
월요일 = 2
화요일 = 3
수요일 = 4
목요일 = 5
금요일 = 6
토요일 = 7
▶ 특정일로 Calendar객체 생성하는 방법
첫 번째 방법
Calendar cal1 = Calendar.getInstance();
cal1.set(2023, 0, 1, 0, 0, 0); // 2023년 1월 1일
printCalendar(cal1);
<결과>
2023/01/01 00:00:00
두 번째 방법
Calendar cal2 = new GregorianCalendar(2024, 0, 1, 0, 0, 0); // 2024년 1월 1일
printCalendar(cal2);
<결과>
2024/01/01 00:00:00
■ 날짜 차이 계산하기
밀리초 단위로 변환해서 차이를 구하고, 다시 초/분/시/일 단위로 환산해주면 된다.
Calendar now = Calendar.getInstance();
Calendar cal = new GregorianCalendar(2024, 0, 1, 0, 0, 0);
long num1 = now.getTimeInMillis(); // 1970년 1월 1일 ~ 흐른 시간을 밀리초로 반환
long num2 = cal.getTimeInMillis();
// mills / 1000(초) / 60(분) / 60(시) / 24(일)
long diff = (num2 - num1) / 1000 / 60 / 60 / 24;
System.out.println(diff);
<결과>
263 //
▶ java.util.Date 클래스
- 날짜와 시간에 대한 정보를 담을 수 있는 클래스
- 자바 개발 초창기에 급하게 만들어져서 완성도가 높지 않은 클래스(다국적으로 쓰기에 적합하지 않음)
■ 기본 생성자를 통한 Date객체 생성
현재 날짜 및 시간정보를 가져온다.
Date today = new Date();
System.out.println(today);
<결과>
Wed Apr 12 00:19:39 KST 2023
■ 내가 원하는 날짜 생성 (2023년 6월 19일)
방법 1. 년, 월, 일 생성자를 활용하는 방법
내부적으로 내가 전달한 년도 + 1900 => 세팅하고자 하는 년도 - 1900
Date date1 = new Date(2023 - 1900, 6 - 1, 19);
System.out.println("매개변수 생성자 : " + date1);
<결과>
매개변수 생성자 : Mon Jun 19 00:00:00 KST 2023
방법 2. long타입 생성자를 사용하여 생성하는 방법
alendar cal2 = new GregorianCalendar(2024, 6 - 1, 19, 0, 0, 0);
long mills = cal2.getTimeInMillis();
Date date2 = new Date(mills);
System.out.println("long타입 생성자 : " + date2);
long타입 생성자 : Wed Jun 19 00:00:00 KST 2024
long이란 unix second를 매개변수로 받는 생성자(1970년 1월 1일부터 흐른 밀리초)이다.
▶ java.text.SimpleDateFormat 클래스
- 내 입맛대로 형식을 지정한 문자열을 받고자 할 때 사용할 수 있는 클래스
Date date = new Date();
// 1. 형식을 지정한 SimpleDateFormat 객체 생성
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 (E) HH시 mm분 ss초");
// 2. sdf 객체에서 재공하는 format메서드 호출 시 Date객체 전달 => 포멧으로 지정한 String값이 반환
String formatDate = sdf.format(date);
System.out.println(formatDate);
<결과>
2023년 04월 12일 (수) 00시 48분 43초
▶ 숫자값 형식 지정
DecimalFormat() 함수를 사용
- # 해당자리에 데이터가 없는 경우 생략
- 0 해당자리에 데이터가 없는 경우 0으로 표시해라 라는 의미
double num = 1234567890.123;
DecimalFormat df = new DecimalFormat("₩#,###.000000");
System.out.println(df.format(num));
<결과>
₩1,234,567,890.123000
'JAVA' 카테고리의 다른 글
JAVA (20) UnCheckedException (0) | 2023.04.12 |
---|---|
JAVA (19) 예외처리 (0) | 2023.04.12 |
JAVA (18-6) API (Wapper) (0) | 2023.04.11 |
JAVA (18-5) API (StringTokenizer) (0) | 2023.04.11 |
JAVA (18-4) API (StringBuffer, StringBuilder) (0) | 2023.04.11 |