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 |