일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
- 자바
- 상속
- 개발자
- 개발
- 생성자
- 사용자 정의 예외처리
- Java
- for문
- 추상화
- 비전공자
- exception
- 가위바위보프로그램
- 독학
- userDefineException
- 코딩
- 캐스팅연산자
- 취준생
- Date Class
- super 생성자
- 부모 생성자
- 알고리즘
- AoutoBoxing
- 클래스의구조
- do~while문
- 백앤드
- 예외던지기
- 예외처리
- 국비지원
- Calendar Class
- 프로그래머스
- Today
- Total
유난스런 개발 기록
[JAVA] Day-11 _ 캘린더 클래스와 데이트 클래스(Calendar Class & Date Class) 본문
day-11
캘린더 클래스 (Calendar Class)
&
데이트 클래스(Date Class)
Calendar Class(캘린더 클래스)란 ?
- 자바에서 날짜를 나타낼 때는 Date, Calendar 를 사용한다.
- Calendar 클래스는 Date 클래스를 조금 더 향상시켜 나온 것이다.
- 간단한 날짜를 표현할 때는 Date 클래스가 나을 수 있다.
- 하지만 두 개의 날짜 간의 연산을 할 경우 메소드기능이 더 많이 추가 된 Calendar 클래스가 더 나을 수 있다.
Calendar Class를 알아보기 전, 먼저 Date Class를 사용해보자.
Date Class
package my.day11.c.calendar;
import java.util.Date;
import my.util.MyUtil;
public class Calendar_main {
public static void main(String[] args) {
// === 1. Date 클래스를 사용하여 현재시각 나타내기 ===
Date now = new Date(); // 현재시각
System.out.println("현재시각1 : "+ now);
// Tue Jan 17 09:28:10 KST 2023
SimpleDateFormat sdfmt = new SimpleDateFormat("yyyy=MM-dd HH;mm:ss");
// System.out.println("현재시각2 : " sdfmt.format(now)); // 오류 확인해보기
String currentTime = String.format("%tF %tT %tA %tZ", now, now, now, now);
System.out.println("현재시각3 : " + currentTime);
//2023-01-17 09:31:36 화요일 KST
/*
<참고>
날짜 타입 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로 나옴).
*/
}// end of main()--------------------------------------
}
위와 같이 Date Class를 통해 다양한 타입의 현재시간 알아보기를 코드로 작성해봤다.
날짜 타입 format에 적어 둔 것처럼 출력하고자 하는 내용을 format에서 찾아 넣어주면 된다.
이번에는 Calendar Class를 사용해보자.
Calendar Class
package my.day11.c.calendar;
import java.text.SimpleDateFormat;
public class Calendar_main {
public static void main(String[] args) {
Calendar currentDate = Calendar.getInstance();
// 현재 날짜와 시간을 얻어온다.
int year = currentDate.get(Calendar.YEAR);
// int month = currentDate.get(Calendar.MONTH); // 0 ~ 11
int month = currentDate.get(Calendar.MONTH)+1; // 1 ~ 12
// 월의 경우 +1을 꼭 해줘야 한다.
}// end of main()--------------------------------------
}
사실 사용법엔 크게 어려움이 없을 것이다.
다만 신경을 써줄 부분은
Caledar로 MONTH를 받아올 때 +1을 꼭 해줘야 한다는 것이다.
왜냐하면
get(Calendar.MONTH)로 얻어오는 값의 범위가 1~12가 아닌, 0~11 이기 때문이다.
해당 코드를 출력하면 블로그 업로드 날짜를 기준으로 1이 출력 된다.
하지만
대부분의 공식적인 문서나 프로그램에서는 일의 자리 숫자의 경우 앞에 "0"을 넣어서 표기해준다.
그렇다면 0은 어떻게 넣어줄까?
삼항연산자를 이용해보자
String str_month = (month < 10)?"0"+month:String.valueOf(month);
// 삼항연산자를 이용해 월 앞에 0을 붙여주자. String타입으로 바꿔줘서
// 값을 받아온 month가 10보다 작다면 String타입으로 변환해준 month앞에 0을 붙여 출력해준다는 코드다.
String 타입으로 형변환을 해주고, 삼항연산자를 이용해 새로운 변수에 담아 출력하면 된다.
몇가지를 더 출력해보자.
package my.day11.c.calendar;
import java.text.SimpleDateFormat;
public class Calendar_main {
public static void main(String[] args) {
Calendar currentDate = Calendar.getInstance();
// 현재 날짜와 시간을 얻어온다.
int year = currentDate.get(Calendar.YEAR);
// int month = currentDate.get(Calendar.MONTH); // 0 ~ 11
int month = currentDate.get(Calendar.MONTH)+1; // 1 ~ 12
// 월의 경우 +1을 꼭 해줘야 한다.
String str_month = (month < 10)?"0"+month:String.valueOf(month);
// 삼항연산자를 이용해 월 앞에 0을 붙여주자. String타입으로 바꿔줘서
System.out.println("올 해의 년도 : " + year); // 올 해의 년도 : 2023
System.out.println("월 : " + month); // 월 : 1
System.out.println("월 : " + str_month); // 월 : 01
System.out.println("이 해의 몇 째 주 : " + currentDate.get(Calendar.WEEK_OF_YEAR));
// 이 해의 몇 째 주 : 3
System.out.println("이 달의 몇 째 주 : " + currentDate.get(Calendar.WEEK_OF_MONTH));
// 이 달의 몇 째 주 : 3
// Calendar.DATE 와 Calendar.DAY_OF_MONTH 는 같은 것이다.
System.out.println("이 달의 몇 일 : " + currentDate.get(Calendar.DATE));
// 이 달의 몇 일 : 17
System.out.println("이 달의 몇 일 : " + currentDate.get(Calendar.DAY_OF_MONTH));
// 이 달의 몇 일 : 17
int day = currentDate.get(Calendar.DATE);
String str_day = (day < 10)?"0"+day:String.valueOf(day);
System.out.println("이 달의 몇 일 : " + str_day);
// 이 달의 몇 일 : 17
System.out.println("이 해의 몇 일 : " + currentDate.get(Calendar.DAY_OF_YEAR));
// 이 해의 몇 일 : 17
// 만약에 currentDate 값이 2023년 2월 1일 이라면 이 해의 몇 일 " 32 라고 나온다.
// 1:일요일 2:월요일 3:화요일 4:수요일 5:목요일 6:금요일 7:토요일
System.out.println("요일 (1~7, 1:월요일) : "+ currentDate.get(Calendar.DAY_OF_WEEK) );
// 요일 (1~7, 1:월요일) : 3
String dayname = "";
switch ( currentDate.get(Calendar.DAY_OF_WEEK)) {
case 1:
dayname = "일";
break;
case 2:
dayname = "월";
break;
case 3:
dayname = "화";
break;
case 4:
dayname = "수";
break;
case 5:
dayname = "목";
break;
case 6:
dayname = "금";
break;
case 7:
dayname = "토";
break;
default:
break;
}
System.out.println("오늘은 " + dayname + "요일 입니다.");
// 오늘은 화요일 입니다.
System.out.println("오전_오후(0:오전, 1:오후): " + currentDate.get(Calendar.AM_PM)); // 0
System.out.println("시간(0~11): " + currentDate.get(Calendar.HOUR)); // 10
System.out.println("시간(0~23): " + currentDate.get(Calendar.HOUR_OF_DAY)); // 10 밤 10시면 22로 나옴
System.out.println("분(0~59): " + currentDate.get(Calendar.MINUTE)); // 31
System.out.println("초(0~59): " + currentDate.get(Calendar.SECOND)); // 45
System.out.println("1000분의 1초(0~999): " + currentDate.get(Calendar.MILLISECOND)); // 395
// 천분의 1초를 시간으로 표시하기 위해 3600000으로 나누었다.(1시간 = 60 * 60초)
System.out.println("TimeZone(-12~+12): " + (currentDate.get(Calendar.ZONE_OFFSET)/(60*60*1000))); // 9
// 이 달의 마지막 일을 찾는다.
System.out.println("이 달의 마지막 날: " + currentDate.getActualMaximum(Calendar.DATE) ); // 31
}// end of main()--------------------------------------
}
이 부분도 크게 어려운 것이 없다.
다만 주의해야할 점은 DAY_OF_WEEK의 경우 숫자로 결과를 출력해주는데,
1(일요일) ~ 7(토요일) 이 기준이다.
때문에 switch문으로 출력될 값을 만져준 것이다.
위의 여러 메소드 기능들을 통해 우리가 원하는 양식으로 날짜를 출력할 수 있다.
(우리가 직접 자주 쓰는 메소드 들을 모아 새로운 날짜출력 메소드를 만들면 프로젝트를 할 때 편할수도?)
어제의 시간 내일의 시간도 출력할 수 있다.
package my.day11.c.calendar;
import java.text.SimpleDateFormat;
public class Calendar_main {
public static void main(String[] args) {
SimpleDateFormat sdformt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar cur_Date = Calendar.getInstance();
// === 어제시각 나타내기 ===
cur_Date.add(Calendar.DATE, -1);
System.out.println("어제시각 => " + sdformt.format(cur_Date.getTime()));
// 어제시각 => 2023-01-16 11:35:42
// === 현재시각 나타내기 ===
cur_Date = Calendar.getInstance();
System.out.println("현재시각 => " + sdformt.format(cur_Date.getTime()));
// currentDate.getTime() 는 Calendar를 SimpleDateFormat 으로 바꿔준다.
// 현재시각 => 2023-01-17 11:35:42
// === 내일시각 나타내기 ===
cur_Date.add(Calendar.DATE, +1);
System.out.println("내일시각 => " + sdformt.format(cur_Date.getTime()));
// 내일시각 => 2023-01-18 11:35:42
}// end of main()--------------------------------------
}
간단하다!!!
심지어 지정해준 날짜와 시간도 얻을 수 있다.
SimpleDateFormat sdformt = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
Calendar cur_Date = Calendar.getInstance();
System.out.println("현재시각 => " + sdformt.format(cur_Date.getTime()));
System.out.println("현재시각으로 부터 1개월 2일 3시간 4분 5초 후 ");
cur_Date.add(Calendar.MONTH, 1);
cur_Date.add(Calendar.DATE, 2);
cur_Date.add(Calendar.HOUR, 3);
cur_Date.add(Calendar.MINUTE, 4);
cur_Date.add(Calendar.SECOND, 5);
System.out.println(sdformt.format(cur_Date.getTime()));
오늘은 Calendar Class에 대해서 알아봤다. (Date Class도 약간)
다른 클래스와 메소드에 비해 훨씬 간단하기 때문에
더 재미있게 느껴지지 않았나싶다.
'개념정리 > JAVA' 카테고리의 다른 글
[JAVA] Day-13 _ 캡슐화 (Encapsulation) (0) | 2023.01.29 |
---|---|
[JAVA] Day-12 _ 추상화 (abstraction) (0) | 2023.01.23 |
[JAVA] Day-11 _ StringBuilder & StringBuilder (StringBuilder를 중심으로) (0) | 2023.01.23 |
[JAVA] Day-10 _ String 클래스 (String Class),(자주 사용하는 메소드 정리) (4) | 2023.01.22 |
[JAVA] Day-9 _ 2차원 배열 (TwoDimensionArray) (0) | 2023.01.19 |