mim
mim 코딩 기록
mim
  • 분류 전체보기 (131)
    • 백엔드 과정 (108)
      • Java (50)
      • Oracle(SQL) (19)
      • jdbc (6)
      • html css (4)
      • JavaScript (5)
      • Servlet (12)
      • Spring (3)
      • 자바 예습 (8)
    • 개발지식 (12)
      • CS공부 (9)
      • 세미나및교육 (2)
    • 자격증 (6)
      • 네트워크관리사 (5)
    • Project (3)
    • Error Note (1)

블로그 메뉴

  • 깃허브

태그

  • 자바
  • 국비교육
  • 국비학원
  • JDBC
  • 반복문
  • 배열
  • 국비
  • SQL
  • java
  • 오라클
  • 문제풀이
  • 서블릿
  • oracle
  • 데이터베이스
  • Servlet

인기 글

최근 글

전체 방문자
오늘
어제

티스토리

반응형
hELLO · Designed By 정상우.
mim

mim 코딩 기록

백엔드 과정/Java

[Java] day17. API -Date / Calendar

2022. 1. 7. 11:34
반응형

이번엔 날짜를 나타내는 API 메소드들을 배웠다.

가장 처음 배웠던 java.util.Date 말고 어떤 방법들이 있을까. 우선 Date에 대해 자세히 알아보자.


Date

시스템으로부터 현재 날짜, 시간 정보를 가져와서 다룰 수 있게 만들어진 클래스

생성자 2개만 사용하고 나머지는 모두 deprecated 되었다.

 

Date ( ) ; 

Date ( long ) ;  

 

이렇게 두 개만 살아 남아있다.

 

첫번째로 기본 생성자로 인스턴스를 생성해보자.
시스템(내 운영체제)으로부터 현재 날짜, 시간 정보를 가져와 기본 값으로 사용한다.

Date today = new Date (); 

java.util.Date = new java.util.Date();	//이렇게 작성하는 것이 좋다

Date는 java.sql.Date와 java.util.Date가 존재한다.

한 클래스에서 두 개의 타입을 전부 사용하게 되면 import 하더라도 사용하는 타입이

어느 패키지에 있는 Date인지 모호성이 발생하여

import 하더라도 풀 클래스 이름을 작성해 주어야 한다.

여기서는 java.util.Date을 사용한다.

 

toString() 메소드가 오버라이딩 되어 있어서 쉽게 필드값을 출력해 볼 수 있다.

system.out.println(today);

 

두번째로 long형 정수 값을 가지고 날짜 시간 계산하는 방법을 보자.

 

getTime() : 1970년 1월 1일 0시 0분 0초를 기준으로 초 단위 계산하여 iong 타입으로 반환한다. 엥

Dare time = new Date (12345678L); // 이렇게 사용은 어려울 것 컨트롤 불가...

System.out.println(today.getTime()); // 1648349564 대강 이런 long타입 반환됨..

 

위에 두 방법으로만 날짜를 표현하기에는 역부족 이라는 생각이 든다. long은 왜 살아남은거지..?

 

 

다른 방법도 배웠다.

Calendar와 GregorianCalendar

 

Calendar

java.util.Calendar 클래스의 사용

Calendar 클래스는 추상클래스 abstract 이기 때문에 

new 연산자를 통해 인스턴스 생성이 불가능하다.

 

Calendar 클래스를 사용하기 위한 두 가지 방법은

 

1. getInstance() static 메소드를 통해서 인스턴스를 생성

Calendar calender = Calendar.getIntstance();

system.out.println(calender);

출력해보면 엄청난 길이의 필드값이 출력된다. 시간에 대한 여러 정보가 줄줄 나옴.

 

toString이 오버라이딩 되어 있어서 모든 필드의 값을 확인 할 수 있다.

Date 클래스에 비해 매우 많은 필드들이 값을 가지고 있다.

또한 생성된 인스턴스 타입이 후손 클래스인 GregorianCalendar 타입인 것을 확인할 수 있다.

이 방식으로 인스턴스를 생성하게 되면

운영체제의 날짜/시간 정보를 이용해서 인스턴스를 생성하게 된다. ( Date보다 좀 더 자세한 느낌? )

 

2. 후손클래스인 GregorianCalendar 클래스를 이용해서 인스턴스를 생성

기본 생성자를 사용해 출력하는 방법이다.

calender gregorianCalendar = new GregorianCalendar() ;

System.out.println(gregorianCalendar);

출력된 형태는 동일하다.

 

다음으로는 년, 월, 일, 시, 분, 초 정보를 이용해 인스턴스를 생성하는 방법이다.

단, 월은 0~11월로 사용하기 때문에 9월은 8 , 0은 12월을 의미한다. 오 별론데2...

// 태어난 날과 시간이 2012년 9월 18일 16시 42분 0초 라면? 
// 각 자료형을 만들어 생성자로 넘겨준다. 좀 귀찮은 것 같다.
int year = 2012;
int month = 8;
int dayOfMonth = 18;
int hour = 16;
int min = 42;
int second = 0;

Calender birthDay = new GregorianCalendar(year, month, dayOfMonth , hour, min, second);
System.out.println(birthDay);

 

출력된 정수로 인스턴스를 생성하면 해당 날자/시간 정보를 가지는 Date 인스턴스가 된다.

Date date = new Date (birthDay.getTimeInMillis());

/* 실제 사용 시 이런 형태로 사용되는 경우가 많다.*/
Date date2 = new Date(new gregorianCaleander
			(year, month, dayOfMonth , hour, min, second).getTimeInMillis());

 

생성된 인스턴스의 필드 정보를 Caleander클래스에 있는 get() 메소드를 사용하여 반환 받을 수 있다.

int birthYear = birthDay.get(1);
int birthMonth = birthDay.get(2);
int birthDayOfMonth = birthDay.get(5);

System.out.println(birthYear);
System.out.println(birthMonth);
System.out.println(birthDayOfMonth);

▲ 인자로 전달하는 정수에 따라 필드값을 반환 받을 수 있다.

하지만 위에 처럼 사용하게 되면 각 필드에 매칭되는 정수를 다 외워야 사용이 가능해진다.

 

System.out.println(Calender.YEAR);
System.out.println(Calender.MONTH);
System.out.println(Calender.DAY);

▲따라서 해당 값들을 상수 필드 형태로 제공하고 있다.  

 

System.out.println(birthDay.get(Calender.YEAR));
System.out.println(birthDay.get(Calender.MONTH));	//0~11
System.out.println(birthDay.get(Calender.DATE));

/*DAY_OF_WEEK는 일(1),월(2), 화(3)..., 토(7) 의 의미이다.*/
System.out.println(birthDay.get(Calender.DAY_OF_WEEK));

/*AM_PM은 0은 오전 1은 오후 의 의미이다. */
System.out.println(birthDay.get(Calender.AM_PM));

/* 삼항연산자로 오전인지 오후인지 확인하여 출력할 수 있다.*/
System.out.println(birthDay.get(Calender.AM_PM) == Calender.AM ? "오전" : "오후");

▲ get() 메소드의 인자로 정수 대신 상수 필드 값을 호출하는 식으로 코드를 개선하면

보다 의미전달이 쉬운 코드가 된다.

 

 

 


아니 날짜 표현하는 거 되게 귀찮구나....... 

반응형
저작자표시 비영리 변경금지 (새창열림)

'백엔드 과정 > Java' 카테고리의 다른 글

[Java] day19. 컬렉션 프레임워크 ArrayList  (0) 2022.01.11
[Java] day18 제네릭(Generic) ~ 토끼농장 ~  (0) 2022.01.07
[Java] day17. API - Whapper / porsing  (0) 2022.01.07
[Java] day16. API - Object/ String 문자열 메소드()  (0) 2022.01.07
[Java] day15. 추상클래스/ 인터페이스  (0) 2022.01.06
    mim
    mim
    개발자 취준생

    티스토리툴바