본문 바로가기

자바(JAVA)
[자바(Java)] DateTime

//자바 날짜 시간 자료형

1. Date 클래스  > JDK 1.0
2. Calendar 클래스  > JDK 1.1 > 가장 대중화
3. LocalDateTime, LocalDate, LocalTime 클래스 > JDK 1.8

* System.currentTimeMillis() -> 현재 시각 밀리초


//Date


- import java.util.Date;
- Date date = new Date();


package com.test.java;

import java.util.Date;

public class Ex28_DateTime {

    public static void main(String[] args) {

	m1();

    } //main

    private static void m1() {

	// Date

	Date date = new Date(); //현재 시각을 생성해서 date라는 변수에 담아라 > 현재 컴퓨터로부터

	System.out.println(date);

    } //m1


//Calendar


- import java.util.Calendar;
- Calendar c1 = Calendar.getInstance();

- 자바는 Calendar 상수를 제공함.
    ~ Calendar.YEAR

- 자바가 제공하는 상수를 이용하여 Date 추출
    ~ c1.get(Calendar.YEAR)

- 형식 문자를 이용하여 날짜, 시간, 요일을 간편하게 출력할 수 있음.
    ~ System.out.printf("%tF\n", c1);  //2023-02-08
    ~ System.out.printf("%tT\n", c1); //09:22:17 
    ~ System.out.printf("%tA\n", c1); //수요일

- 특정 시각 설정
    1. 현재 시각 만들기
    2. 원하는 시각으로 수정하기 (객체.set())

- 시각 연산 : 참조변수.add(field, value)
    * value에 음수값을 넣으면 뺄셈

- 시간 연산 : 현재 시점 객체 참조변수.getTimeInMillis() - 특정 시점 객체 참조변수.getTimeInMillis()
    ~ 익숙한 초로 나타내려면 / 1000
    ~ 분으로 나타내려면 / 1000 / 60
    ~ 시로 나타내려면 / 1000 / 60 / 60
    ~ 일로 나타내려면 / 1000 / 60 / 60 / 24

- 시간 연산: int로 계산 ※받아올림 주의!


package com.test.java;

import java.util.Calendar;

public class Ex28_DateTime {

    public static void main(String[] args) {

	m2();

    } //main

    private static void m2() {

	//Calendar

	Calendar c1 = Calendar.getInstance();
	System.out.println(c1);
	System.out.println();

	System.out.println(c1.get(Calendar.YEAR)); 		//년도
	System.out.println(c1.get(Calendar.MONTH) + 1);		//월(+1 해야 함)
	System.out.println(c1.get(Calendar.DATE));		//일
	System.out.println(c1.get(Calendar.HOUR));		//시(12H)
	System.out.println(c1.get(Calendar.HOUR_OF_DAY)); 	// > 시(24H) > 회사에서는 대부분 이것 사용
	System.out.println(c1.get(Calendar.MINUTE));		// 분
	System.out.println(c1.get(Calendar.SECOND));		//초
	System.out.println(c1.get(Calendar.MILLISECOND));	//밀리초(1/1000)
	System.out.println(c1.get(Calendar.AM_PM));		//오전(0), 오후(1)

	System.out.println(c1.get(Calendar.DAY_OF_YEAR));	// 올해 중 며칠째?
	System.out.println(c1.get(Calendar.DAY_OF_MONTH));	// 이번 달 중 며칠째?
	System.out.println(c1.get(Calendar.DAY_OF_WEEK));	// 요일 > 일(1) ~ 토(7)

	System.out.println(c1.get(Calendar.WEEK_OF_YEAR));	// 올해 들어 몇 주 차인지?
	System.out.println(c1.get(Calendar.WEEK_OF_MONTH));	// 이번 달의 몇 주 차인지?
	// > 한 달의 마지막 주가 목요일을 포함하고 있지 않다면 다음 달의 첫째 주로 센다.
	
	System.out.println();
	
	System.out.printf("오늘은 %d년 %d월 %d일입니다.\n"
				, c1.get(Calendar.YEAR)
				, c1.get(Calendar.MONTH) + 1
				, c1.get(Calendar.DATE));
                
	System.out.printf("오늘은 %d년 %02d월 %02d일입니다.\n"
			, c1.get(Calendar.YEAR)
			, c1.get(Calendar.MONTH) + 1
			, c1.get(Calendar.DATE));

	System.out.println();

	//요구사항] "지금은 14시 12분 53초입니다." //24H
	System.out.printf("지금은 %02d시 %02d분 %02d초입니다.\n"
				, c1.get(Calendar.HOUR_OF_DAY)
				, c1.get(Calendar.MINUTE)
				, c1.get(Calendar.SECOND));

	//요구사항] "지금은 오후 2시 12분 53초입니다." //12H
	System.out.printf("지금은 %s %02d시 %02d분 %02d초입니다.\n"
			, c1.get(Calendar.AM_PM) == 0 ? "오전" : "오후"
			, c1.get(Calendar.HOUR)
			, c1.get(Calendar.MINUTE)
			, c1.get(Calendar.SECOND));

	//요구사항] 2023-02-08 > printf()
	System.out.printf("%tF\n", c1);

	//요구사항] 09:22:17 > printf()
	System.out.printf("%tT\n", c1);

	//요구사항] 수요일 > printf()
	System.out.printf("%tA\n", c1);

    }

}

- set

package com.test.java;

import java.util.Calendar;

public class Ex28_DateTime {

    public static void main(String[] args) {

	m3();

    } //main
    
    private static void m3() {

	//현재 시각 만들기
	Calendar now = Calendar.getInstance();

	//특정 시각 만들기 > 원하는 날짜(2023-07-12)
	//1. 현재 시각 만들기
	//2. 원하는 시각으로 수정하기

	Calendar endDate = Calendar.getInstance();

	endDate.set(Calendar.MONTH, 6);
	endDate.set(Calendar.DATE, 12);

	endDate.set(Calendar.HOUR_OF_DAY, 18);
	endDate.set(Calendar.MINUTE, 0);
	endDate.set(Calendar.SECOND, 0);

	System.out.printf("%tF %tT %tA\n", endDate, endDate, endDate);


	Calendar birthday = Calendar.getInstance();

	birthday.set(1998, 0, 17);

	System.out.printf("%tF %tA\n", birthday, birthday);

    } //m3

}

- add()

package com.test.java;

import java.util.Calendar;

public class Ex28_DateTime {

    public static void main(String[] args) {

	m4();

    } //main

    private static void m4() {
	// 연산
	Calendar now = Calendar.getInstance();

	System.out.printf("1일차: %tF\n", now);

	now.add(Calendar.DATE, 100); //수정 > now는 더이상 현재 시각x
	System.out.printf("100일 후: %tF\n", now);

	//현재 시점으로부터 100일전?
	now = Calendar.getInstance();
	now.add(Calendar.DATE, -100);
	System.out.printf("100일 전: %tF\n", now);

	//3시간 17분 뒤 영양제 복용
	now = Calendar.getInstance();

	now.add(Calendar.HOUR, 3);
	now.add(Calendar.MINUTE, 17);
	System.out.printf("영양제 복용 시각은: %tT\n", now);


	// 백일 잔치는 언제?
	Calendar birthday = Calendar.getInstance();
	birthday.set(1998, 0, 17);

	birthday.add(Calendar.DATE, 100);
	System.out.printf("나의 100일 잔치는 언제?: %tF\n", birthday);

    } //m4
}

- getTimeInMillis()

package com.test.java;

import java.util.Calendar;

public class Ex28_DateTime {

    public static void main(String[] args) {

	m5();

    } //main
    
    private static void m5() {
	// 내가 태어난 시간부터 지금까지 얼마나 지났는지 계산
	Calendar birthday = Calendar.getInstance();
	birthday.set(1998, 01, 17, 04, 59, 00); //태어난 시간

	Calendar now = Calendar.getInstance(); //현재 시간

	System.out.println( (now.getTimeInMillis() - birthday.getTimeInMillis())
								/ 1000 / 60 / 60 / 24 ); // 초 / 분 / 시 / 일

	//크리스마스까지 며칠 남았는지?
	Calendar christmas = Calendar.getInstance();
	christmas.set(2023, 12, 25);

	long span = christmas.getTimeInMillis() - now.getTimeInMillis();

	System.out.printf("올해 크리스마스까지 %d일 남았습니다.\n", span / 1000 / 60 / 60 / 24);

    } //m5

}

 

- 시간 계산

package com.test.java;

import java.util.Calendar;

public class Ex28_DateTime {

    public static void main(String[] args) {

	m6();

    } //main
    
private static void m6() {
	// 시간 연산
	//2시간 30분 + 10분
	int hour = 2;
	int min = 30;

	min += 10;

	System.out.printf("%d시간 %d분\n", hour, min);

	//2시간 30분 + 40분

	hour = 2;
	min = 30;

	min += 40;

	hour += min / 60;
	min = min % 60;

	System.out.printf("%d시간 %d분\n", hour, min);
    }
}

// LocalDate, LocalDateTime, LocalTime

- LocalDate : 날짜 값
    ~ 2023년 2월 6일

- LocalDateTime : 날짜 + 시간 값
    ~ 2023년 2월 6일 0:29am

- LocalTime : 시간 값
    ~ 00:29
    ~ 0:29am


import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;

public class Local {

    public static void main(String[] args) {

	LocalDateTime nowDateTime = LocalDateTime.now()	;
	System.out.println("date & time = " + nowDateTime);

	LocalDate nowDate = LocalDate.now();
	System.out.println("date = " + nowDate);

	LocalTime nowTime = LocalTime.now();
	System.out.println("time = " + nowTime);

    }

}

 


//LocalDate 메서드

*LocalDate nowDate = LocalDate.now()

- nowDate.getYear() : 현재 시점의 년도 반환

- nowDate.getDayOfWeek() : 현재 시점의 요일 반환

- nowDate.getDayOfMonth() : 현재 시점의 날짜 반환

- nowDate.getDayOfYear() : 현재 시점이 1년 중 몇 번째의 날인지 반환

- nowDate.getMonth() : 현재 시점의 달을 문자로 반환

- nowDate.getMonthValue() : 현재 시점의 달을 숫자로 반환

- nowDate.isLeapYear() : 현재 시점의 년도가 윤년인지 확인하여 boolean 값을 반환

- nowDate.lengthOfMonth() : 현재 시점의 한 달이 총 며칠인지 반환

- nowDate.lengthOfYear() : 현재 시점의 1년이 총 며칠인지 반환

- nowDate.plusDays(num) : 현재 시점으로부터 num일 후 년-월-일 반환

- nowDate.plusMonths(num) : 현재 시점으로부터 num달 후 년-월-일 반환

- nowDate.plusYears(num) : 현재 시점으로부터 num년 후 년-월-일 반환

- nowDate.minusYears(num) : 현재 시점으로부터 num년 전 년-월-일 반환

- nowDate.withYear(year) : 현재 시점에서 연도만 변경하여 년-월-일 반환 

- nowDate.withDayOfMonth(date) : 현재 시점에서 날짜만 변경하여 년-월-일 반환 

- nowDate.withMonth(month) : 현재 시점에서 달만 변경하여 년-월-일 반환 


*LocalDate birth = LocalDate.of(year,month,date) : 특정 년-월-일 지정 가능

-  nowDate.isBefore(birth) : 오늘 날짜가 birth 이전인지 확인하여 boolean 값을 반환

 nowDate.isAfter(birth) : 오늘 날짜가 birth 이후인지 확인하여 boolean 값을 반환

※LocalDateTime 도 유사한 메서드들을 가지고 있고, 여기에 추가로 몇 가지를 더 가지고 있다.

- plusHours(), plusMinutes(), plusSeconds


import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;


public class Local {

    public static void main(String[] args) {

	LocalDateTime nowDateTime = LocalDateTime.now()	;
	System.out.println("date & time = " + nowDateTime);

	LocalTime nowTime = LocalTime.now();
	System.out.println("time = " + nowTime);

	LocalDate nowDate = LocalDate.now();
	System.out.println("date = " + nowDate);
	System.out.println("올해는 = " + nowDate.getYear());
	System.out.println("오늘의 요일은 = " + nowDate.getDayOfWeek());
	System.out.println("오늘의 날짜는 = " + nowDate.getDayOfMonth());
	System.out.println("오늘은 1년 중 몇 번째 날인가요? = " + nowDate.getDayOfYear());
	System.out.println("이번 달은 = " + nowDate.getMonth());
	System.out.println("이번 달은 = " + nowDate.getMonthValue());
	System.out.println("이번 연도는 윤년인가요? = " + nowDate.isLeapYear());
	System.out.println("이번 달은 총 며칠인가요? = " + nowDate.lengthOfMonth());
	System.out.println("이번 연도는 총 며칠인가요? = " + nowDate.lengthOfYear());
	System.out.println("오늘로부터 100일 후의 날짜는 ? = " + nowDate.plusDays(100));
	System.out.println("오늘로부터 3달 후의 날짜는? = " + nowDate.plusMonths(3));
	System.out.println("오늘로부터 10년 후의 날짜는? = " + nowDate.plusYears(10));
	System.out.println("오늘로부터 10년 전의 날짜는? = " + nowDate.minusYears(10));
	System.out.println("연도만 작년으로 바꾼다면? = " + nowDate.withYear(2022));
	System.out.println("날짜만 10일로 바꾼다면? = " + nowDate.withDayOfMonth(10));
	System.out.println("달만 1월로 바꾼다면? = " + nowDate.withMonth(1));
	System.out.println("올해의 100일째 되는 날은? = " + nowDate.withDayOfYear(100));
	System.out.println();

	LocalDate birth = LocalDate.of(1998,01,17);
	System.out.println("태어난 날 = " + birth );
	System.out.println();

	System.out.println("오늘 날짜는 태어난 날 이전인가요? = " + nowDate.isBefore(birth));
	System.out.println("오늘 날짜는 태어난 날 이후인가요? = " + nowDate.isAfter(birth));
    }

}

'자바(JAVA)' 카테고리의 다른 글

[자바(Java)] 디버그(debug)  (0) 2023.02.09
[자바(Java)] 연산자  (0) 2023.02.06
[자바(Java)] 에러(Error)  (0) 2023.02.03
[자바(Java)] 파일과 디렉토리  (0) 2023.01.24
☆이클립스 개인 설정  (0) 2023.01.14