10장 날짜와 시간

slee2·2021년 9월 12일
0

Java의 정석

목록 보기
19/28
post-thumbnail

날짜와 시간

- java.util.Date

  • 날짜와 시간을 다룰 목적으로 만들어진 클래스(JDK1.0)
  • Date의 메서드는 거의 deprecated(앞으로 사용하지 말라)되었지만, 여전히 쓰이고 있다.

- java.util.Calendar

-Date 클래스를 개선한 새로운 클래스(JDK1.1). 여전히 단점이 존재

- java.time패키지

  • Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공(JDK1.8)
    단점 : 날짜와 시간을 같이 다뤄야한다는점

Calendar 클래스

  • 추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 한다.
Calendar cal = new Calendar();	// 에러! 추상클래스는 인스턴스를 생성할 수 없다.

Calendar cal = Calendar.getInstance();	// OK.

Calendar 클래스 사용법

- get()으로 날짜와 시간 필드 가져오기 - int get(int field)

Calendar cal = Calendar.getInstance();	// 현재 날짜와 시간으로 셋팅됨
int thisYear = cal.get(Calendar.YEAR);	// 올해가 몇년인지 알아낸다.
int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE);	// 이 달의 마지막날
- Calendar에 정의된 필드
필드명설명필드명설명
YEARHOUR시간(0~11)
MONTH월(0부터 시작)HOUR_OF_DAY시간(0~23)
WEEK_OF_YEARMINUTE
WEEK_OF_MONTH그 달의 몇 번째 주SECOND
DATEMILLISECOND천분의 일초
DAY_OF_MONTH그 달의 몇 번째일ZONE_OFFSETGMT기준 시차(천분의 일초 단위)
DAY_OF_YEAR그 해의 몇 번째일AM_PM오전/오후
DAY_OF_WEEK요일
DAY_OF_WEEK_IN_MONTH그 달의 몇 번째 요일

- set()으로 날짜와 시간 지정하기

void	set(int field, int value)
void	set(int year, int month, int date)
void	set(int year, int month, int date, int hourOfDay, int minute)
void	set(int year, int month, int date, int hourOfDay, int minute, int second)
  • 시간 지정하는 방법
Calendar	time1 = Calendar.getInstance();
time1.set(Calendar.HOUR_OF_DAY, 10);	// time1을 10시 20분 30초로 설정
time1.set(Calendar.MINUTE, 20);
time1.set(Calendar.SECOND, 30);

시 분 초는 이렇게 따로 세팅해줘야됨

- clear()는 Calendar객체의 모든 필드를 초기화

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

// 현재시간
System.out.println(new Date(dt.getTimeInMillis()));

dt.clear();	// 모든 필드를 초기화
// Thu Jan 01 00:00:00 KST 1970
System.out.println(new Date(dt.getTimeInMillis()));

- clear(int field)는 Calendar 객체의 특정 필드를 초기화

dt.clear(Calendar.SECOND);	// 초를 초기화
dt.clear(Calendar.MINUTE);	// 분을 초기화

내가 현재 시간으로 쓰는거 아니면 clear을 한 다음에 사용하는게 좋다.

- add()는 특정 필드의 값을 증가 또는 감소(다른 필드에 영향O)

Calendar date = Calendar.getInstance();
date.clear();	// 모든 필드를 초기화
data.set(2020, 7, 31);	// 2020년 8월 31일로 설정

data.add(Calendar.DATE, 1);	// 날짜(DATE)에 1을 더한다. - 9월 1일
data.add(Calendar.MONTH, -8);	// 월(MONTH)에서 8을 뺀다. - 1월 1일

- roll()은 특정필드의 값을 증가 또는 감소(다른 필드에 영향X)

date.set(2020, 7, 31);	// 2020년 8월 31일로 설정

date.roll(Calendar.DATE, 1);	// 날짜(DATE)에 1을 더한다. - 8월 1일 
date.roll(Calendar.MONTH, -8);	// 월(MONTH)에서 8을 뺀다. - 12월 1일

Date와 Calendar 간의 변환

  • Date의 메서드는 대부분 deprecated 되었지만 여전히 사용
    나중에 혹시 참고해야할때를 대비해 기록을 해놓자.
  1. Calendar를 Date로 변환
Calendar	cal = Calendar.getInstance();
...
Date	d = new Date(cal,getTimeInMillis());	// Date(long date)
  1. Date를 Calendar로 변환
Date	d = new Date();
...
Calendar	cal = Calendar.getInstance();
cal.setTime(d)

0개의 댓글