본문 바로가기
BackEnd/Java

[Java] 날짜 형식 Date Format

by summer_light 2021. 7. 1.

날짜형식 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)  

 

※ day of week : 요일

 


오전 오후

오전은 0, 오후는 1
cal.get(Calendar.AM_PM)

 


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 이므로 변수 선언시 주의해야한다.

 

  1. 현재 날짜를 date.getTime() 으로 ms 형태로 변환
  2. 원하는 날짜를 date.getTime() 으로 ms 형태로 변환
  3. 원하는 날짜 - 현재 날짜 ms 형태로 계산
  4. 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

댓글