[JAVA] 날짜와 시간 & 형식화

1. 날짜와 시간


java.util.Date

: 날짜와 시간을 다룰 목적으로 만들어진 클래스(jdk1.0)

: 날짜와 시간을 함께 다룬다는 단점이 존재

 

 

java.util.Calendar

: Date클래스를 개선한 새로운 클래스(jdk1.1)

: 여전히 날짜와 시간 동시에 다루지만 현재도 쓰임

 

 

java.time패키지

: 날짜와 시간을 따로 다룰 수 있도록 개선(jdk1.8)

 

 

Calendar클래스

: 추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 함

: 사용자 환경에 따라 서양력(그레고리력), 불교력, 일본력 등으로 자동 변경됨

: java.util.Calendar를 임포트 해야 함

import java.util.Calendar;

Calendar cal = Calendar.getInstance();

 

 

- 날짜 출력 메서드

public static String toString(Calendar date) {
	return date.get(Calendar.YEAR) + "년 " + date.get(Calendar.MONTH) + "월 " + date.get(Calendar.DATE) + "일";
}

 

 

  • get()

: 날짜와 시간 필드 가져오기

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

 

 

  • set()

: 날짜와 시간 지정

: 월(MONTH)은 0부터 시작한다는 점 주의

: set() 전에 clear()를 미리 사용해야 값이 정확해짐

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 date1 = Calendar.getInstance();
date1.set(2020, 07, 20); // 2020년 8월 20일(7월 아님)

Calendar time1 = Calendar.getInstance();
time1.set(Calendar.HOUR_OF_DAY, 10); // 10시 20분 30초. 시간은 따로따로 설정해줘야 함
time1.set(Calendar.MINUTE, 20);
time1.set(Calendar.SECOND, 30);

 

 

  • clear()

: Calendar객체의 모든 필드 초기화

: clear(int field)는 특정 필드 초기화

Calendar dt = Calendar.getInstance();
System.out.println(new Date(dt.getTimeInMillis()));

dt.clear(); // 모든 필드 초기화
System.out.println(new Date(dt.getTimeInMillis()));
Sat Oct 14 22:21:52 KST 2023
Thu Jan 01 00:00:00 KST 1970

 

 

  • add()

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

Calendar date = Calendar.getInstance();
date.clear(); // 모든 필드 초기화
date.set(2020, 9, 31); // 2020년 8월 31일

date.add(Calendar.DATE, 1); // 날짜 +1 = 2020년 9월 1일 
date.add(Calendar.MONTH, -8); // 월 -8 = 2020년 1월 1일

 

 

  • roll()

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

Calendar date = Calendar.getInstance();
date.clear(); // 모든 필드 초기화
date.set(2020, 9, 31); // 2020년 8월 31일

date.roll(Calendar.DATE, 1); // 날짜 +1 = 2020년 8월 1일 
date.roll(Calendar.MONTH, -8); // 월 -8 = 2020년 1월 1일

 

 

Date와 Calendar간의 변환

: Date의 메서드는 대부분 사용하지 않을 것을 권장하지만 여전히 사용(하위호환성)

 

 

1. Calendar를 Date로 변환

Calendar cal = Calendar.getInstance();
Date d = new Date(cal.getTimeInMillis());

 

 

2. Date를 Calendar로 변환

Date d = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(d);

 

 

 

2. 형식화


: java.text패키지의 DecimalFormat(10진수 숫자), SimpleDateFormat(날짜)

 

 

  • DecimalFormat

java.text.DecimalFormat 임포트 해야 함

: 숫자를 형식화할 때 사용(숫자 -> 형식 문자열)

double number = 1234567.89;
DecimalFormat df = new DecimalFormat("#.#E0");
String result = df.format(number); // 1.2E6

 

 

: 특정 형식의 문자열을 숫자로 변환할 때 사용(형식 문자열 -> 숫자)

DecimalFormat df = new DecimalFormat("#,###.##");
Number num = df.parse("1,234,567.89");
double d = num.doubleValue();

 

 

  • SimpleDateFormat

: 날짜와 시간을 다양한 형식으로 출력

: java.text.SimpleDateFormat을 임포트 해야 함

Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("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("1990년 08월 20일"); // 문자열에서 Date로 변환
String result = df2.format(d); // Date룰 문자열로 변환