[Java]DateTime

수경·2023년 8월 7일
0
post-thumbnail

자바 날짜/시간 자료형

시각 vs 시간

  • 시각 : 점시간의 흐름(포인트, 점)
    ex) 2023년 7월 20일 오후 4시 9분 15초
  • 시간 : 8시간 수업

시각 + 시각 = X
시각 - 시각 = O(시간) 결과값의자료형은 -> "시간"

시간 + 시간 = O(시간) //ex) 8시간 + 2시간 = 10시간
시간 - 시간 = O(시간) //ex) 8시간 - 2시간 = 6시간

시각 + 시간 = O(시각) //ex) 2023년 7월 20일 16시 21분 50초 + 3시간 = 3시간 후 특정 시각
시각 - 시간 = O(시각) //ex) 2023년 7월 20일 16시 21분 50초 - 3시간 = 3시간 전 특정 시각

1. Date 클래스

			Date date = new Date(); //컴퓨터의 시각을 가져온다.
			System.out.println(date);

Mon Aug 07 22:52:08 KST 2023

2. Calendar 클래스

- Calendar 클래스 사용법

코드
			//현재 시각 인스턴스화
			Calendar c1 = Calendar.getInstance();
            
            //연도 보는 방법1
            System.out.println(c1.get(1)); //2023
            
            //연도 보는 방법2 : Calendar 상수
  			System.out.println(c1.get(Calendar.YEAR));
            
 			//------------------------------------실제 사용 예제
			System.out.println(c1.get(Calendar.YEAR)); //2023 > 년
			System.out.println(c1.get(Calendar.MONTH)); //6 > 월(0~11) 월은 0부터 시작하니 주의!!!!!
			System.out.println(c1.get(Calendar.DATE)); //20 > 일
			System.out.println(c1.get(Calendar.HOUR)); //4 > 시(12H)
			System.out.println(c1.get(Calendar.HOUR_OF_DAY)); //16 > 시(24H)
			System.out.println(c1.get(Calendar.MINUTE)); //45 > 분
			System.out.println(c1.get(Calendar.SECOND)); //49 > 초
			System.out.println(c1.get(Calendar.MILLISECOND)); //5 > 밀리초(ms) **java에서 기본적으로 다루는 최소의 시간 단위 = ms**
			System.out.println(c1.get(Calendar.AM_PM)); //1 > 오전(0), 오후(1)
			System.out.println(c1.get(Calendar.DAY_OF_YEAR)); //201 > 일 > 올해 들어 201일 째
			System.out.println(c1.get(Calendar.DAY_OF_MONTH)); //20 > 일 > 이번달 들어 20일 째
			System.out.println(c1.get(Calendar.DAY_OF_WEEK)); //5 > 요일 > 1(일) ~ 7(토) > 이번주 들어 5일째 //반환값이 int라 숫자로 돌려줌.
			System.out.println(c1.get(Calendar.WEEK_OF_YEAR)); //29 > 주 > 올해들어 29주차
			System.out.println(c1.get(Calendar.WEEK_OF_MONTH)); //4 > 주 > 이번달 들어 4주차           
			
            //printf() > 형식 문자 > 날짜시간
			System.out.printf("%tF\n", c1); //2023-07-20
			
			System.out.printf("%tT\n", c1); //17:15:48
			
			System.out.printf("%tA\n", c1); //목요일 > Locale > 지역 설정에 따라 사용자끼리 다르게 보일 수 있다.            

- 특정 시각 설정하기 : set

코드
			Calendar christmas = Calendar.getInstance(); //현재 시각

			christmas.set(Calendar.MONTH, 11); //주의! 월은 0부터 시작하므로 설정 값 -1을 해야한다.
			christmas.set(Calendar.DATE, 25);
 			System.out.printf("%tF %tT\n", christmas, christmas);
			
			//--------------------------------------------------
			//내 생일
			Calendar birthday = Calendar.getInstance();
			
			birthday.set(1997, 3, 20);
			System.out.printf("%tF\n", birthday);
			
			birthday.set(1997, 4, 20, 10, 30);
			System.out.printf("%tF %tT\n", birthday, birthday);           

2023-12-25 19:00:15
1997-04-20
1997-05-20 10:30:15

- 시간, 시각 계산하기 : add

코드
			Calendar now = Calendar.getInstance(); //현재 시각
			
			System.out.printf("1일차: %tF\n", now); 
			
			now.add(Calendar.DATE, 100);	//날짜에 100일 더하기
            
			System.out.printf("100일차: %tF\n", now);
			
            //12일 전 날짜 계산
			now = Calendar.getInstance(); //현재시각 초기화
			
			now.add(Calendar.DATE, -12);
			System.out.printf("12일 전: %tF\n", now);  
            
			//지금으로부터 3시간 25분 뒤에 약 복용
			
			now = Calendar.getInstance();
			
			now.add(Calendar.HOUR, 3);
			now.add(Calendar.MINUTE, 25);
			System.out.printf("약 복용 시간: %tT\n", now);            

1일차: 2023-08-07
100일차: 2023-11-15
12일 전: 2023-07-26
약 복용 시간: 02:28:00

- 시각 연산하기 : getTimeInMillis

시각끼리 연산하면 시간으로 나온다.

코드
			//현재
			Calendar now = Calendar.getInstance();
			
			//종강일
			Calendar end = Calendar.get
            end.set(2023, 11, 27);
            
            long nowTick = now.getTimeInMillis();
			System.out.println(nowTick); //1,691,417,202,192ms > 1970.01.01 00:00:00으로부터 now까지 흐른 시간
										 //기준점부터 흘러간 시간
            
            long endTick = end.getTimeInMillis();
			System.out.println(endTick); //1,703,636,725,293ms
            
            //수업 남은 시간 계산 = 종강일 - 현재일
			long gap = endTick - nowTick;
			System.out.printf("수업 남은 시간: %,d\n"
								, gap / 1000 / 60 / 60 / 24);
									 //ms -> s -> m -> h -> d 순서로 나눠주기
			

1691417202192
1703686002208
수업 남은 시간: 142

- 시간 연산하기

코드

			//2시간 30분
			hour = 2;
			int min = 30;
			
			//2시간 40분 + 30분 = 2시간 70분(자리올림을 잘하라!)
			hour = 2;
			min = 40;
			min += 30;
			System.out.printf("%d시간 %d분\n", hour, min); //2시간 70분
			
            //몫을 구하는 계산식(시 자리올림), 나머지를 구하는 계산식(분 덮어쓰기)

			hour = hour + (min / 60);
			min = min % 60;
			System.out.printf("%d시간 %d분\n", hour, min); //3시간 10분

2시간 70분
3시간 10분

- 현재 시간의 tick 구하기 : getTimeInMillis, currentTimeMillis

코드
			//현재 시간의 tick
			Calendar now = Calendar.getInstance();
			System.out.println(now.getTimeInMillis());
			
			//전용 메소드(현재 시간의 tick을 구하는 전용 메소드)
			System.out.println(System.currentTimeMillis());

1691417968359
1691417968379

3. 추가 클래스 > JDK 1.8(2014) 부터

profile
웹백엔드개발자를 꿈꾸는

0개의 댓글