본문 바로가기
JAVA

221025 날짜

3.날짜 관련 클래스
1)종류
=>java.util.Date
=>java.sql.Date, java.sql.Time
=>java.util.Calendar, java.util.GregorianCalendar
=>LocalDateTime

2)epoch time
=>1970년 1월 1일 자정-컴퓨터의 시간 기준인 경우가 많음

3)java.util.Date
=>1970년 1월 1일 자정을 기준으로 지나온 시간을 밀리초 단위의 long타입으로 관리
최근 생긴 문제->2035년 이후를 표현할수가 없음
=>년도를 설정할 때는 1900년 이후 지나온 년 수로 설정
=>월을 설정할 때는 1을 빼서 설정-월이 0부터 시작하기 때문
=>toString메서드와 단위별로 추출하는 메서드를 제공합니다.
=>출력을 할 때는 java.text.SimpleDateFormat 클래스와 같이 사용하는 경우가 많음


SimpleDateFormat sdf = new SimpleDateFormat("날짜 서식");
sdf.format(Date 객체)를 이용해서 날짜 서식이 적용된 문자열을 리턴받을 수 있습니다.
년도-yy, yyyy
월-M, MM, MMM=>5월, 05월, may 
일- d, dd
요일- E, EE, EEE 약자 or fullname
시간-H, HH 
오전/오후-a
분- m, mm
초- s, ss
이외에도 많다. document에서 확인
또한, 운영체제에 따르기 때문에 document예시와 다르게 나올 수도 있음


4)java.sql.Date와 java.squl.Time
==>날짜와 시간이 분리된 클래스로 관계형 데이터베이스와 연동할 때 사용할 수 있는 클래스입니다.//데이터베이스를 배우고 나서 유용함

5)java.util.Calendar와 java.util.GregorianCalendar
==>java.util.Calendar는 날짜 관련된 메서드를 가진 추상 클래스(abstract class-인스턴스를 생성할 수 없는 클래스)
==>java.util.GregorianCalendar클래스는 Calendar클래스의 메서드를 구현한 하위 클래스//태국-서기를 사용하지 않음.불기 사용. 그래서 GregorianCalendar클래스 만듦

년도가 0부터 시작. 4자리로 입력하면 됨. but 월은 똑같이 0부터 시작

==>인스턴스 생성
Calendar calendar = new GregorianCalendar();
여러 종류의 생성자가 제공되서 날짜 및 시간을 설정해서 생성하는 것도 가능
Date클래스에 비해서 많은 양의 정보를 제공함


6)LocalDateTime
==>최근에 데이터베이스의 날짜 및 시간 데이터에 매핑할 때 많이 사용하는 클래스
==>날짜와 시간 데이터를 많이 사용할 것 같으면 학습이 조금 필요합니다.

tip)
회원정보를 만들 때,
마지막 로그인 시간, 로그인 위치 등을 기록할 것

7)날짜 외 시간에서 조금 더 학습해볼만한 내용
==>Calendar클래스나 LocalDateTime클래스에서 시간의 연산 부분(특히 뺄셈)
==>Calendar클래스나 LocalDateTime클래스에서 지역이나 시간대 설정하는 부분


package java_1025;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JOptionPane;

public class DateCrate {
	public static void main(String[] args) {
		//현재 시간을 갖는 java.util.Date 인스턴스 생성 
		Date currentTime= new Date();//util과 sql이 있는데, sql Date는 매개변수가 없는 생성자가 없다. import할때 신경쓸 것

		//출력 -년원일 시분초
		System.out.println(currentTime);

		//원하는 날짜를 가지고 생성-1986년 5월 5일 13:00:00로 설정
		Date firstMeetingTime= new Date(86, 4, 5, 13, 0, 0);//년도는 1900년부터니까 19를 뺴고, 월은 0부터 시작함. 그래서 4를 넣어야 may가 나온다
		//원하는 날짜를 가지고 출력
		System.out.println(firstMeetingTime);
		//년도만 추출해서 출력
		System.out.println(firstMeetingTime.getYear()+1900);//eclipse에서 적으면 줄이 그어져 있는데 이유는 deprecated 때문.


		//원하는 포맷으로 출력 
		//1986년 5월 5일 ?요일 이라고 출력
		SimpleDateFormat ktime = new SimpleDateFormat("yyyy년 M월 d일 E요일");
		System.out.println(ktime.format(firstMeetingTime));

		//연습해볼만한 과제 -년월일을 비교해서 년월일이 같으면 시간과 분을, 그렇지 않으면 년원일을 출력
		Date[] days= {new Date(121,4,8,15,0,0), new Date(122,9,25,7,30,0)};
		JOptionPane a = new JOptionPane();
		
		SimpleDateFormat sametime = new SimpleDateFormat("yyyy년 M월 d일");
		SimpleDateFormat whattime = new SimpleDateFormat("HH시 mm분 ss초");

		for(Date d : days) {
			if(sametime.format(new Date()).equals(sametime.format(d))) {
				JOptionPane.showMessageDialog(null, whattime.format(d));
			}else {
				JOptionPane.showMessageDialog(null, sametime.format(d));
			}
		}


	}
}
Tue Oct 25 14:03:11 KST 2022
Mon May 05 13:00:00 KST 1986
1986
1986년 5월 5일 월요일

그리고 메세지가 2번 뜬다. JOptionPane을 통해 팝업창이 뜨게 만들었음. showMessageDialog메서드덕분에 팝업창이 뜸.

 

 

package java_1025;

import java.time.LocalDateTime;
import java.util.Calendar;
import java.util.GregorianCalendar;


public class DateETC {
	public static void main(String[] args) {
		//날짜와 시간을 다른 형태로 사용하는 클래스
		Calendar calendar = new GregorianCalendar();
		//Date보다 많은 정보를 출력
		System.out.println(calendar);
		
		//특정한 데이터를 조회
		System.out.println(calendar.get(Calendar.YEAR));
		System.out.println(calendar.get(Calendar.MONTH)+1);
		System.out.println(calendar.get(Calendar.DATE));
		
		
		//최근에 많이 사용하는 날짜 타입
		LocalDateTime currentTime = LocalDateTime.of(2022,10,26,18,50);
		System.out.println(currentTime);
		
		
		
	}

}
java.util.GregorianCalendar[time=1666674234957,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=2022,MONTH=9,WEEK_OF_YEAR=44,WEEK_OF_MONTH=5,DAY_OF_MONTH=25,DAY_OF_YEAR=298,DAY_OF_WEEK=3,DAY_OF_WEEK_IN_MONTH=4,AM_PM=1,HOUR=2,HOUR_OF_DAY=14,MINUTE=3,SECOND=54,MILLISECOND=957,ZONE_OFFSET=32400000,DST_OFFSET=0]
2022
10
25
2022-10-26T18:50

Calendar calendar = new GregoricCalendar();

calendar 출력->Date에 비해 엄청나게 많은 정보가 나온다.

 

'JAVA' 카테고리의 다른 글

221025 Generic  (0) 2022.10.25
221025 랜덤  (0) 2022.10.25
221025 Fibonacci수열과 재귀/재귀사용 x  (0) 2022.10.25
221025 binarySearch  (0) 2022.10.25
221024 Array 검색(Search)  (0) 2022.10.24