날짜형식 Date Format
Calendar 클래스와 Date 클래스를 이용하여 D-day, 나이 계산 등을 쉽게 할 수 있다.
1. import java.util.Calendar;
Calendar cal = Calendar.getInstance(); 와 같이 Calendar의 인스턴스 cal을 생성할 수 있다.
왜 Calendar는 Calelndar cal = new Calendar(); 이라고 안할까?
1-1. cal 객체를 그대로 출력하면
System.out.println(cal); → java.util.GregorianCalendar[time=1625629233275,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=2021,MONTH=6,WEEK_OF_YEAR=28,WEEK_OF_MONTH=2,DAY_OF_MONTH=7,DAY_OF_YEAR=188,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=0,HOUR_OF_DAY=12,MINUTE=40,SECOND=33,MILLISECOND=275,ZONE_OFFSET=32400000,DST_OFFSET=0]
1-2 .cal.get( )
cal.get( )의 반환 타입은 int이다.
get 위에 마우스 커서를 올리고 보면 int java.util. ... 이므로 int가 반환된다는 것을 알 수 있다
년월일 (2021년 7월 7일)
cal.get(Calendar.YEAR) → 2021
cal.get(Calendar.MONTH) → 6 (1월을 0월으로 보기 때문에 7월이라면, 6이 반환된다.)
cal.get(Calendar.DATE) → 7
cal.get하지 않고 그냥 Calendar.DATE하면 왜 5가 나올까?
시분초 (12시 40분 33초)
cal.get(Calendar.HOUR) → 0 (0~11)
cal.get(Calendar.MINUTE) → 40
cal.get(Calendar.SECOND) → 33
요일 (수요일)
1~7, 일요일부터 시작해서 1일요일 2월요일 3화요일 4수요일 ...
cal.get(Calendar.DAY_OF_WEEK) 4
※ day of week : 요일
오전 오후
오전은 0, 오후는 1
cal.get(Calendar.AM_PM) → 1
24시간으로 표현
cal.get(Calendar.HOUR_OF_DAY) → 13
이달의 마지막 날
cal.getActualMaximum(Calendar.DATE)
이달의 몇번째 요일
cal.get(Calendar.DAY_OF_WEEK_IN_MONTH) → 1
7월 7일은 1번째 수요일이므로 1이 출력됨
cal.get( ) 이용해보기
package may31;
import java.util.Calendar;
public class DateFormat01 {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance(); // 왜 Calendar는 Calelndar cal = new Calendar(); 이라고 안할까?
System.out.println(cal); //java.util.GregorianCalendar[time=1625629233275,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=2021,MONTH=6,WEEK_OF_YEAR=28,WEEK_OF_MONTH=2,DAY_OF_MONTH=7,DAY_OF_YEAR=188,DAY_OF_WEEK=4,DAY_OF_WEEK_IN_MONTH=1,AM_PM=1,HOUR=0,HOUR_OF_DAY=12,MINUTE=40,SECOND=33,MILLISECOND=275,ZONE_OFFSET=32400000,DST_OFFSET=0]
System.out.println(cal.get(Calendar.YEAR)); //2021
System.out.println(cal.get(Calendar.MONTH) + 1); //7
System.out.println(cal.get(Calendar.DATE)); //7 ??? 그냥 Calendar.DATE하면 왜 5가 나올까?
System.out.println(cal.get(Calendar.HOUR)); //0 (0~11)
System.out.println(cal.get(Calendar.MINUTE)); //40
System.out.println(cal.get(Calendar.SECOND)); //33
System.out.println("=============================================");
//요일을 뽑으려면
System.out.println(cal.get(Calendar.DAY_OF_WEEK)); //4
//1~7, 일요일부터 시작해서 1일요일 2월요일 3화요일 4수요일
//문제 : 저 위에 get()으로 나오는(return) 데이터 타입은?
//get 위에 마우스 커서를 올리고 보면 int java.util. ... 이므로 int가 반환된다는 것을 알 수 있다
//오전 오후
System.out.println(cal.get(Calendar.AM_PM));
//24시간으로 시간
System.out.println(cal.get(Calendar.HOUR_OF_DAY));
//이달의 마지막 날
System.out.println(cal.getActualMaximum(Calendar.DATE));
//이달의 몇번째 요일
System.out.println(cal.get(Calendar.DAY_OF_WEEK_IN_MONTH)); //1 (7월 7일은 1번째 수요일이므로 1이 출력됨)
long longTime = cal.getTimeInMillis(); //반환 타입이 long이므로 주의
System.out.println(longTime); //1625629478184
}
}
2. import java.util.Date;
Date date = new Date(); 와 같이 Date의 인스턴스 date를 생성할 수 있다.
를 이용하여 현재 날짜와 시간 값을 알 수 있다.
요일 월 일 시간 KST 년도 형태로 출력된다.
※ KST : Korean Standard Time 한국 표준 시간
package may31;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;
public class DateFormat01 {
public static void main(String[] args) {
Date date = new Date();
System.out.println(date); //Wed Jul 07 12:39:42 KST 2021
}
}
※ 참고
객체의 시간을 밀리초로 나타내기
cal.getTimeInMillis()
반환 타입이 long이므로 주의가 필요하다.
현재 시간을 밀리초로 나타내기
System.currentTimeMillis()
1970년이라는 기준시간으로부터 지금까지 흐른 ms시간
long millis = System.currentTimeMillis();
System.out.println(millis); //1625707573914
예제 01. 출생년도로 나이 계산하기 (Calendar)
나이 계산 : 현재 년도 - 입력받은 년도 + 1
package may31;
import java.util.Calendar;
import java.util.Scanner;
public class DateFormat01 {
public static void main(String[] args) {
//스캐너
Scanner sc = new Scanner(System.in);
//"출생 년도를 입력해주세요."
System.out.println("출생 년도를 입력해주세요.");
//변수에 저장
int input = sc.nextInt();
//Calender 객체 생성하기
Calendar cal2 = Calendar.getInstance();
//나이 계산 : 현재 년도 - 입력받은 년도 + 1
int result = cal2.get(Calendar.YEAR) - input + 1;
//출력 "당신의 나이는 **살 입니다."
System.out.println("당신의 나이는 " + result + "살 입니다.");
//스캐너닫기
sc.close();
}
}
예제 02. 현재 시간 출력하기 (Calendar)
- 출력형태 : xxxx년 x월 xx일 x요일 오후 xx시 xx분 xx초입니다.
- Calendar.MONTH에서 0월 부터 시작하는 것 주의
package may31;
import java.util.Calendar;
public class DateFormat02 {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance(); //객체 가져오기. //객체 생성: new + 생성자?
System.out.println(cal);
//java.util.GregorianCalendar[time=1622423485487,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=2021,MONTH=4,WEEK_OF_YEAR=23,WEEK_OF_MONTH=6,DAY_OF_MONTH=31,DAY_OF_YEAR=151,DAY_OF_WEEK=2,DAY_OF_WEEK_IN_MONTH=5,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=11,SECOND=25,MILLISECOND=487,ZONE_OFFSET=32400000,DST_OFFSET=0]
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH) + 1;
int date = cal.get(Calendar.DATE);
int day_of_week = cal.get(Calendar.DAY_OF_WEEK);
String day="일";
switch (day_of_week) {
case 1: day = "일"; break;
case 2: day = "월"; break;
case 3: day = "화"; break;
case 4: day = "수"; break;
case 5: day = "목"; break;
case 6: day = "금"; break;
case 7: day = "토"; break;
default:
break;
}
int am_pm = cal.get(Calendar.AM_PM);
String ampm="오전";
if(am_pm==0) {
ampm = "오전";
} else {
ampm = "오후";
}
int hour = cal.get(Calendar.HOUR);
int minute = cal.get(Calendar.MINUTE);
int second = cal.get(Calendar.SECOND);
System.out.printf("%d년 %d월 %d일 %s요일 %s %d시 %d분 %d초입니다.", year, month, date, day, ampm, hour, minute, second);
}
}
예제 03. SimpleDateFormat(SDF) 사용하기 (Date)
SimpleDateFormat 클래스를 이용하면, Date 클래스의 인스턴스를 이용하여
날짜와 시간을 간편하게 표현할 수 있다.
참고1. SDF 형식 지정하기
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 E요일 a hh시 mm분 ss초");
- MM:월 (대문자)
- mm:분 (소문자)
- E: 요일
- a: 오전/오후
- D: 월 구분 없이 일
- K: 시간 0~11
- k: 1~24
- W: 월의 몇 번째 주
- w: 년의 몇번째 주
- S: 밀리초(ms)
- s: 초(s)
참고2. SDF 형식 불러오기
SDF인스턴스이름.format(Date인스턴스)
package may31;
import java.text.SimpleDateFormat;
import java.util.Date;
public class DateFormat03 {
public static void main(String[] args) {
//Date
Date now = new Date();
System.out.println(now); //Mon May 31 10:41:24 KST 2021
//now.getMonth(); 이제는 쓰지 않고 sdf를 주로 이용한다.
SimpleDateFormat sdf = new SimpleDateFormat("yyyy년 MM월 dd일 E요일 a hh시 mm분 ss초");
//MM:월, mm:분 주의, E:요일, a: 오전/오후
//D: 월 구분 없이 일
//K: 시간 0~11, k: 1~24
//W: 월의 몇 번째 주, w: 년의 몇번째 주
//S: 밀리세컨 s초
System.out.println(sdf.format(now)); //sdf.format(Date)
//2021년 05월 31일 10시 45분 32초
String str = sdf.format(now).toString();
System.out.println(str);
//2021년 05월 31일 10시 48분 21초;
}
}
예제 04. D-day 계산하기 (Date)
xxxx년 xx월 xx일의 형태로 D-day를 계산하기는 어렵기 때문에
Date인스턴스이름.getTime() 을 이용하여 날짜를 ms초로 변환하는 방법을 이용하여 구할 수 있다.
※ .getTime() 의 결과는 long 이므로 변수 선언시 주의해야한다.
- 현재 날짜를 date.getTime() 으로 ms 형태로 변환
- 원하는 날짜를 date.getTime() 으로 ms 형태로 변환
- 원하는 날짜 - 현재 날짜 ms 형태로 계산
- ms를 1000 * 60 * 60 *24 하여 날짜로 변환하여 디데이 계산
package may31;
import java.util.Date;
public class DateFormat05 {
public static void main(String[] args) {
//System.currentTimeMillis()
long millis = System.currentTimeMillis();
System.out.println(millis); //1622427807783
//1970년부터 지금까지 흐른 ms시간
//1000*60*60*24
//다시 Date
Date date = new Date(130, 3, 29); //연도1900+ 월1+ 일0+
System.out.println(date);//Mon Apr 29 00:00:00 KST 2030 (3월이 아닌 4월로 나옴)
System.out.println(date.getTime());//1903618800000
//이번 크리스마스까지 며칠 남았나요?
date = new Date();//괄호 안에 값 넣지 않으면 현재 시간
System.out.println(date); //Mon May 31 11:36:39 KST 2021
Date xMas = new Date(121, 11, 25);
System.out.println(xMas);//Sat Dec 25 00:00:00 KST 2021
long howLong =xMas.getTime() - date.getTime();
System.out.println(howLong); //17929298670ms
long result = howLong / (1000 * 60 * 60 * 24);
System.out.println("올 크리스마스까지 " + result);
//올 크리스마스까지 207
//크리스마스 요일은?
int day = xMas.getDay();
System.out.println(day); //6
switch (day) {
case 0: System.out.println("일요일 입니다.");break;
case 1: System.out.println("월요일 입니다.");break;
case 2: System.out.println("화요일 입니다.");break;
case 3: System.out.println("수요일 입니다.");break;
case 4: System.out.println("목요일 입니다.");break;
case 5: System.out.println("금요일 입니다.");break;
case 6: System.out.println("토요일 입니다.");break;
default:
break;
}
long millis2 = System.currentTimeMillis();
System.out.println(millis2 - millis);
//이 프로그램이 실행되는데 걸린 ms를 계산할 때 유용
}
}
예제 05. 프로그램 구동에 걸린 시간 측정하기
System.currentTimeMillis(); 를 이용하여 다음과 같이 원하는 구간만큼의 코드를 실행할 때 걸린 시간을 측정할 수 있다.
long startTime = System.currentTimeMillis();
/////측정하고자 하는 코드/////
long endTime = System.currentTimeMillis();
system.out.println(endTime - startTime); // 구동 시간 출력
'BackEnd > Java' 카테고리의 다른 글
[Java] 객체지향프로그래밍 OOP* (0) | 2021.07.01 |
---|---|
[Java] 동적가변배열 Dynamic Array (0) | 2021.07.01 |
[Java] 문자(Character), 문자열(String) (0) | 2021.07.01 |
[Java] 다차원 배열 Multi Array (0) | 2021.07.01 |
[Java] 배열 Array (0) | 2021.07.01 |
댓글