반응형
01. Date클래스
- 날짜와 시간을 저장하고 날짜와 시간 관련 기능을 메소드로 제공하기 위한 클래스
02.Date객체 만들기
1. 기본생성자로 객체생성
- Date 클래스의 기본 생성자로 Date객체를 생성하여,시스템의 현재 날짜와 시간이 저장된 Date 객체 생성
//시스템의 현재 날짜와 시간이 저장된 Date 객체 생성
Date now = new Date();
2. 매개변수가 있는 생성자로 객체생성
- Date(int year, int month, int date) 생성자
- Date 클래스의 매개변수가 있는 생성자로 Date객체를 생성하여, 원하는 날짜와 시간이 저장된 Date 객체 생성
//[2000년 1월 1일 0시 0분 0초]가 저장된 Date 객체 생성
//int year = [1900 + 100] = 2000년
//int month = [0 + 1] = 1월
//int date = 1 = 1일
Date wantDate = new Date(100,0,1);
System.out.println("wantDate = "+ wantDate); //wantDate = Sat Jan 01 00:00:00 KST 2000
//🤍Date.getTime()- 1970.01.01 ~ 2000.01.01 까지의 ms
long wantTime = wantDate.getTime();
System.out.println(wantTime); //946652400000
//🤍원하는 값으로 출력하기 - 2000.01.01부터 현재까지 몇초가 지났는지 알 수 있음
System.out.println("연산결과(ms) = "+ (nowTime - wantTime)); //연산결과(ms) = 718395009491
System.out.println("연산결과(s) = "+ ((nowTime - wantTime) / 1000)); //연산결과(s) = 718395009
//=>2000.01.01부터 현재까지 몇일이 지났는지 알 수 있음 , 하루는 86400초
System.out.println("연산결과(일) = "+ ((nowTime - wantTime) / 1000)/86400); //연산결과(일) = 8314
03. Date클래스의 메소드
Date.toString() - 현재 날짜와 시간 /String
- Date 객체에 저장된 날짜와 시간을 문자열로 변환하여 반환하는 메소드
System.out.println("now.toString() = "+ now.toString());
//참조변수를 출력할 경우 toString()메소드 자동 호출
System.out.println("now = "+ now);
//now.toString() = Thu Oct 06 17:22:19 KST 2022
//now = Thu Oct 06 17:22:19 KST 2022
Date.getYear() | Date.getMonth() | Date.getDate() | Date.getDay()
- Date.getYear() - 현재 년도 / int
- Date 객체에 저장된 날짜와 시간에서 [년]을 반환하는 메소드1990년부터 1씩 증가된 정수값 반환
- Date.getMonth() - 현재 월 / int
- Date 객체에 저장된 날짜와 시간에서 [월]을 반환하는 메소드0(1월) ~ 11(12월) 범위의 정수값 반환
- Date.getDate() - 현재 일 / int
- Date 객체에 저장된 날짜와 시간에서 [일]을 반환하는 메소드
- Date.getDay() - 현재 요일 / int
- Date 객체에 저장된 날짜와 시간에서 [요일]을 반환하는 메소드0(일) ~ 6(토) 범위의 정수값으로 반환
//요일을 저장하기 위한 배열 선언
String[] day = {"일","월","화","수","목","금","토"};
String printDate = (now.getYear()+1900) + "년 " + (now.getMonth()+1) + "월 "+ (now.getDate()) + "일 " + day[(now.getDay())] + "요일";
System.out.println("현재 = "+ printDate); //현재 = 2022년 10월 6일 목요일
Date.getTime() - (1970.01.01 ~ 현재)까지 ms
- (ms * 1000 = s)
- Date 객체에 저장된 날짜와 시간을 long 자료형의 정수값(TimeStamp)으로 반환하는 메소드
- 가장 많이 사용하는 메소드
- 그외는 Calender클래스 메소드를 더 많이 사용
- 타임스템프(TimeStamp)란?
- 19070년 1월 1이 기준으로 1ms 마다 1씩 증가된 정수값
- 날짜와 시간을 정수값으로 표현하여 연산하기 위해 사용
//1970.01.01 ~ 현재까지의 ms long nowTime = now.getTime(); System.out.println(nowTime); //1665038264070
vsSystem.currentTimeMillis() - (1970.01.01 ~ 현재)까지 ms
- (ms * 1000 = s)
- 시스템의 현재 날짜와 시간에 대한 타임스템프를 반환하는 메소드
- UUID클래스 대신 식별자로 사용하기도 함
long nowTime = System.currentTimeMillis();
System.out.println(nowTime); //1665038264106
04. Calendar클래스
- 날짜와 시간을 저장하고 날짜와 시간 관련 기능을 메소드로 제공하기 위한 클래스
- 싱글톤클래스
- 좀 더 복잡한 달력 프로그램 만들 때 사용함
- 간단한 날짜와시간정보만 얻고싶을때는 Date클래스 사용하자
- Calendar의 생성자는 protected
- 즉, 다른 패키지이거나 부모자식관계가 아니라면 생성자 호출 못함
- 다시말해, new 연산자로 객체 생성 불가능
Calendar calendar = new Calendar(); //error
- 그렇다면 Calendar클래스 사용 못하나?
- Calendar은 싱글톤 클래스라 static메소드인getInstance()메소드를 호출해 Calendar객체를 생성해 반환받으면 된다!
- 이미 static에 만들어진 객체를 반환받는것!!!
05. Calendar객체 반환받기
1. Calendar.getInstance() 메소드
- 시스템의 현재 날짜와 시간이 저장된 Calendar 객체를 생성하여 반환하는 메소드
2. 싱글톤객체에 원하는 값으로 세팅
- Setter & Getter 메소드 사용하기
Calendar.set(int field, int value) - 원하는 값 SET
- Calendar객체에 저장된 날짜와 시간에서 매개변수로 전달된 Calendar클래스의 상수에 대한 값을 변경하는 메소드
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.DATE, 1);
//=> 22년10월6일기준) 현재 객체에는 6일이 저장되어있는데 값을 1일로 바꿈
Calendar.get(int field) - 원하는 값 GET
int week = calendar.get(Calendar.DAY_OF_WEEK);
int week = calendar.get(Calendar.DAY_OF_WEEK);
System.out.println("week = " + week); //week = 7
06. Calendar클래스의 메소드
Calendar.toString() - 현재 날짜와 시간 /String
- Calendar 객체에 저장된 날짜와 시간을 문자열로 반환하는 메소드
//Date객체와 달리 매우 많은 정보들이 저장되어있음
Calendar calendar = Calendar.getInstance();
System.out.println("calendar.toString() = " + calendar.toString());
//calendar.toString() = java.util.GregorianCalendar[time=1665048420083,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=2022,MONTH=9,WEEK_OF_YEAR=41,WEEK_OF_MONTH=2,DAY_OF_MONTH=6,DAY_OF_YEAR=279,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=6,HOUR_OF_DAY=18,MINUTE=27,SECOND=0,MILLISECOND=83,ZONE_OFFSET=32400000,DST_OFFSET=0]
System.out.println("calendar = " + calendar);
//calendar = java.util.GregorianCalendar[time=1665048420083,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=2022,MONTH=9,WEEK_OF_YEAR=41,WEEK_OF_MONTH=2,DAY_OF_MONTH=6,DAY_OF_YEAR=279,DAY_OF_WEEK=5,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=6,HOUR_OF_DAY=18,MINUTE=27,SECOND=0,MILLISECOND=83,ZONE_OFFSET=32400000,DST_OFFSET=0]
Calendar.get(int field) - 상수값 반환 ( GET )
- Calendar 객체에 저장된 날짜와 시간에서 매개변수에 전달된 Calendar 클래스의 상수에 대한 값을 반환하는 메소드
- [월]은 0(1월) ~ 11(12월) 범위의 정수값으로 처리됨
- [요일]은 1(일)~7(토) 범위의 정수값으로 처리됨
String[] day = {"일","월","화","수","목","금","토"};
String printDate = calendar.get(Calendar.YEAR)+"년 "+(calendar.get(Calendar.MONTH)+1)+"월 "+ (calendar.get(Calendar.DATE))+"일 "+day[(calendar.get(Calendar.DAY_OF_WEEK))-1]+"요일";
System.out.println("현재 = "+ printDate);
//현재 = 2022년 10월 6일 목요일
07. 📆CurrentCalendarApp프로그램
package xyz.itwill.util;
import java.util.Calendar;
//현재 년 월에 대한 달력을 출력하는 프로그램 작성 (2022년 10월 달력 출력기)
//ex) 스케줄 관리 프로그램 만들 때 사용
public class CurrentCalendarApp {
public static void main(String[] args) {
//1.
//시스템의 현재 날짜와 시간이 저장된 Calendar객체를 반환받아 저장
Calendar calendar = Calendar.getInstance();
//2.
// Calendar 객체에 저장된 현재 [DATE: 일]을 [DATE: 1일]로 변경
// => 첫째날로 변경 왜? 요일을 알아내기 위해
calendar.set(Calendar.DATE, 1);
//3.
//Calendar객체에 원하는 값으로 세팅했다면, [요일]을 반환받아 저장하기
// => 7 : 즉, 10월 1일은 토요일이다!
int week = calendar.get(Calendar.DAY_OF_WEEK);
//System.out.println("week = " + week); //week = 7
//4.
System.out.println(" "+ calendar.get(Calendar.YEAR)+"년 "+ (calendar.get(Calendar.MONTH)+1+"월"));
System.out.println("=============================");
System.out.println(" 일 월 화 수 목 금 토");
System.out.println("=============================");
//5.
//[1일]에 대한 요일 전까지 공백 출력
for(int i=1; i<week; i++) {
System.out.print(" ");
}
//6.
//1일부터 [월]의 마지막 날짜까지 출력될 수 있도록 변경 : 30이든~ 31이든~
//Calendar.getActualMaximum(int field) : Calendar 객체에 저장된 날짜와 시간에서
//매개변수에 전달된 Calendar 클래스의 상수에 대한 최대값을 반환하는 메소드
//=>calendar의 DATE 최대값 주세요~~~!!!
//=> 만약 Date클래스로 만든다면, 윤년계산도 해야하고 복잡해짐ㅠ
for(int i=1; i<=calendar.getActualMaximum(Calendar.DATE)/*31*/; i++) {
//날짜를 출력하기 위해 자릿수 맞춤
if(i<=9) {
System.out.print(" "+i);
} else {
System.out.print(" "+i);
}
week++; //요일증가
if(week%7==1) {//증가된 요일이 일요일인 경우
System.out.println(); //토요일까지 출력되고 줄바꿈 처리
}
}
System.out.println();
System.out.println("============================");
}
}
// 2022년 10월
//=============================
// 일 월 화 수 목 금 토
//=============================
// 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
//=============================
08. 📆WantCalendarApp프로그램
package D_xyz.itwill.util;
import java.util.Calendar;
import java.util.Scanner;
//키보드로 [년]과 [월]을 입력받아 해당 년월에 대한 달력을 출력하는 프로그램 작성
public class WantCalendarApp {
public static void main(String[] args) {
//1.
Scanner scanner=new Scanner(System.in);
//2.
System.out.print("년 입력 >> ");
int year=scanner.nextInt();
System.out.print("월 입력 >> ");
int month=scanner.nextInt();
//3.
scanner.close();
//4.
//시스템의 현재 날짜와 시간이 저장된 Calendar 객체를 반환받아 저장
Calendar calendar=Calendar.getInstance();
//5.
//Calendar 객체에 저장된 날짜를 입력된 년월에 대한 1일로 변경
// => 월은 0~11 범위의 정수값으로 처리되므로 입력값에서 1을 감소하여 변경
calendar.set(year, month-1, 1);
//6.
int week=calendar.get(Calendar.DAY_OF_WEEK);
//7.
System.out.println();
System.out.println(" "+year+"년 "+month+"월");
System.out.println("============================");
System.out.println(" 일 월 화 수 목 금 토");
System.out.println("============================");
//8.
for(int i=1;i<week;i++) {
System.out.print(" ");
}
//9.
for(int i=1;i<=calendar.getActualMaximum(Calendar.DATE);i++) {
if(i<=9) {
System.out.print(" "+i);
} else {
System.out.print(" "+i);
}
week++;
if(week%7==1) {
System.out.println();
}
}
System.out.println();
System.out.println("============================");
}
}
//[년] 입력 >> 2022
//[월] 입력 >> 10
// 2022년 10월
//==============================
// 일 월 화 수 목 금 토
//==============================
// 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 > java.util & java.text' 카테고리의 다른 글
[java.util] 6. HashSet 클래스 & ArrayList 클래스 & HashMap 클래스 (0) | 2024.06.27 |
---|---|
[java.util] 5. Collection(자료구조)클래스 기초 (0) | 2024.06.27 |
[java.util] 4. Generic VS Non-Generic (0) | 2024.06.27 |
[java.text] 3. DecimalFormat 클래스 & SimpleDateFormat 클래스 (0) | 2024.06.26 |
[java.util] 1. Random 클래스 & UUID 클래스 (0) | 2024.06.18 |