고래씌

[JAVA] 11-4. 기본 API(4) (날짜 클래스) 본문

JAVA/JAVA 기초

[JAVA] 11-4. 기본 API(4) (날짜 클래스)

고래씌 2023. 10. 19. 16:47

1. Date 클래스

: java.util.Date 클래스
- 날짜와 시간에 대한 정보를 담을 수 있는 클래스.
- 자바 개발 초창기에 급하게 만들어져서 완성도가 높지 않은 클래스(다국적으로 쓰기 적합X)

 

▶ 기본생성자를 통해 Date 객체 생성  → 현재 시간 및 날짜를 가져옴

public class DateRun {
	
	
	public static void main(String[] args) {
		
		Date today = new Date();
		System.out.println("기본생성자 : " + today);

 

▶ 내가 원하는 날짜(2023년 10월 19일)로 시간 셋팅

=> 매개변수 있는 Date클래스 생성자를 통해 변경

public class DateRun {
	

	public static void main(String[] args) {

		Date date1 = new Date(2023 - 1900, 10 -1, 19);  // 자바에서 사용하지말라고 줄삭제 생김
		// 년도 → 셋팅하고자 하는 년도 -1900
		// 월 → 월 -1
		System.out.println("매개변수 있는 생성자를 통한 Date : " + date1);

 

2. SimpleDateFormat

2023년 10월 19일 3시 37분 0초
2023-10-19 03:37:00

java.text.SimpleDateFormat  => 내 입맛대로 포맷을 지정한 문자열을 받고자 할때 사용

 

1) 형식(포맷)을 지정하면서 SimpleDateFormat 객체 생성

package com.kh.chap04_data.run;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DateRun {

	public static void main(String[] args) {

		// 1. 형식(포맷)을 지정하면서 SimpleDateFormat 객체 생성.
		java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy년 mm월 dd일"
				+ " hh시 mm분 sss초");;
   }

 

2) sdf 객체에서 제공하는 format메소드 호출하면서 매개변수로 Date 객체를 전달한다. => 포맷에 지정한 형식대로 String 문자열을 반환

=> sdf.format(Date참조변수) : String

package com.kh.chap04_data.run;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DateRun {
	
	public static void main(String[] args) {

		Date today = new Date();
				
		// 1. 형식(포맷)을 지정하면서 SimpleDateFormat 객체 생성.
		java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat("yyyy년 mm월 dd일"
				+ " hh시 mm분 sss초");;
				
		// 2. sdf 객체에서 제공하는 format메소드 호출하면서 매개변수로 Date 객체를 전달한다.
		// 포맷에 지정한 형식대로 String 문자열을 반환
		// sdf.format(Date참조변수) : String
        
        
		String formatDate = sdf.format(today);
		System.out.println(formatDate);
        }

 

3. Calendar

: 날짜와 시간에 관한 데이터를 손쉽게 처리할수 있는 추상클래스

(국가마다 사용하는 달력체계가 다를 수 있으므로, 나라마다 다른 달력객체를 반환해주기 위해 추상클래스로 선언됨)

 

1) 현재 날짜 및 시각 정보 조회

 

ex)

Calendar cal1 = Calendar.getInstance();     => 다국적 사용가능

Calendar cal2 = new GregorianCalendar();     => 한국에서만 사용가능

 

주의) MONTH의 경우는 월이 0부터 시작을 해서 +1을 해주어야함

package com.kh.chap04_data.run;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DateRun {
	
	public static void main(String[] args) {

		// 현재 날짜 및 시각 정보 조회
		Calendar cal1 = Calendar.getInstance();   // 다국적으로 사용가능
		// 현재 로컬 컴퓨터상의 지역정보를 바탕으로 해당지역의 시간정보를 가져옴.
		
        
		// 그 달력정보가 그레고리력이면 그레고리달력객체를 반환
		Calendar cal2 = new GregorianCalendar();  // 한국에서만 사용할 거면 사용 가능
		// 로컬컴퓨터상의 지역정보에 해당하는 달력.
		
		
		// 조회
		System.out.println(cal1.get(Calendar.YEAR));
		System.out.println(cal1.get(Calendar.MONTH)+1);  // 월은 0부터 시작을 해서 +1 해주어야함
		System.out.println(cal1.get(Calendar.DATE)); 
        }

 

2) 그외 년 월 일 시 분 초

ex)

// 특정일 특정 시간을 Calendar객체로 생성
Calendar cal3 = Calendar.getInstance();
cal3.set(2024, 0, 1, 0,0,0);  // 2024년 1월 1일 0시 0분 0초

 

Calendar cal4 = new GregorianCalendar(2024, 1, 1, 0,0,0);  // 2024년 2월 1일 0시 0분 0초

 

3) 날짜 차이 계산

package com.kh.chap04_data.run;

import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DateRun {

	public static void main(String[] args) {

		// 날짜 차이 계산
		Calendar now = Calendar.getInstance();
		//밀리초 단위로 변환해서 시간의 차이를 구하기
		
		// 1970년 1월 1일 자정기준으로부터 현재시간까지를 밀리초로 변환해줌 => getTimeInMillis()
		long num1 = now.getTimeInMillis();
		long num2 = cal3.getTimeInMillis(); // 1970년 1월 1일 ~ 2024년 1월 1일까지 흐른 시간을 밀리초로 반환
		
		// millis / 1000 → 1초  / 60 → 1분 / 60 → 1시간 / 24 → 하루
		System.out.println("새해까지 D-" + (num2 - num1)/1000 / 60 / 60 / 24 + "일 남았습니다.");
		
		
	}