1~3. 날짜와 시간, Calendar 클래스


날짜와 시간

  • java.util.Date
    • 날짜와 시간을 다룰 목적으로 만들어진 클래스 (JDK1.0)
    • Date의 메서드는 거의 deprecated 되었지만, 여전히 쓰이고 있음
  • java.util.Calendar
    • Date 클래스를 개선한 새로운 클래스 (JDK1.1). 여전히 단점이 존재
  • java.time 패키지
    • Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공 (JDK1.8)

Calendar 클래스

  • 추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 함
Caleldar cal = new Calendar(); // 에러. 추상클래스는 인스턴스 생성 불가
Calendar cal = Calendar.getInstance(); // 현재 날짜와 시간으로 셋팅됨
int thisYear = cal.get(Calendar.YEAR); // 올해가 몇년인지 알아냄
int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE); // 이 달의 마지막날

4~5. Calendar 클래스 예제


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

Calendar cal = Calendar.getInstance(); // 현재 날짜와 시간으로 세팅
int thisYear = cal.get(Calendar.YEAR); // 올해가 몇년인지 알아냄
int lastDayOfMonth = cal.getActualMaximum(Calendar.DATE); // 이 달의 마지막 날

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

Calendar date1 = Calendar.getInstance();
date1.set(2017, 7, 15); // 2017년 8월 15일
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 = Calendar.getInstance();
// Thu Aug 29 07:13:03 KST 2017
System.out.println(new Date(dt.getTimeInMillis()));
dt.clear();
// Thu Jan 01 00:00:00 KST 1970
System.out.println(new Date(dt.getTimeInMillis()));
// 새로운 객체 다시 할당
dt = Calendar.getInstance();
// Thu Aug 29 07:13:03 KST 2017
System.out.println(new Date(dt.getTimeInMillis()));
// 시,분,초 초기화
dt.clear(Calendar.SECOND);
dt.clear(Calendar.MINUTE);
dt.clear(Calendar.HOUR_OF_DAY);
dt.clear(Calendar.HOUR);
// Thu Aug 29 00:00:00 KST 2017
System.out.println(new Date(dt.getTimeInMillis()));

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

Calendar date = Calendar.getInstance();
date.clear();          // 모든 필드 초기화
date.set(2020, 7, 31); // 2020년 8월 31일로 설정
date.add(Calendar.DATE, 1);   // 날짜(DATE)에 1을 더함
date.add(Calendar.MONTH, -8); // 월(MONTH)에서 8을 뺌

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

date.set(2020, 7, 31); // 2020년 8월 31일로 설정
date.roll(Calendar.DATE, 1);   // 날짜(DATE)에 1을 더함
date.roll(Calendar.MONTH, -8); // 월(MONTH)에서 8을 뺌

Date 의 메서드는 대부분 deprecated 되었지만 여전히 사용

  1. Calendar 를 Date 로 변환
Calendar cal = Calendar.getInstance();
	...
Date d = new Date(cal.getTimeInMillis());
  1. Date 를 Calendar 로 변환
Date d = new Date();
	...
Calendar cal = Calendar.getInstance();
cal.setTime(d);

9~12. 형식화 클래스


  • java.text 패키지의 DecimalFormat, SimpleDateFormat
  • 숫자와 날짜를 원하는 형식으로 쉽게 출력 가능 (숫자, 날짜 → 형식 문자열)
double number = 1234567.89;
DecimalFormat df = new DecimalFormat("#.#E0");
String result = df.format(number); // result = "1.2E6"
  • 형식 문자열에서 숫자와 날짜를 뽑아내는 기능 (형식 문자열 → 숫자, 날짜)
DecimalFormat df = new DecimalFormat("#,###.##");
Number num = df.parse("1,234,567.89");
double d = num.doubleValue(); // 1234567.89

13~16. SimpleDateFormat


  • 날짜와 시간을 다양한 형식으로 출력할 수 있게 해줌
Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
// 오늘 날짜를 yyyy-MM-dd 형태로 변환 후 반환
String result = df.format(today);
  • 특정 형식으로 되어 있는 문자열에서 날짜와 시간을 뽑아낼 수 있음
DateFormat df  = new SimpleDateFormat("yyyy년 MM월 dd일");
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
Date d = df.parse("2015년 11월 23일");
String result = df2.format(d);