지식조각모음
10. 날짜와 시간 & 형식화 본문
반응형
날짜와 시간
- 클래스 발전 과정: Date(java.util) -> Calendar -> java.time
Calendar 클래스
- 추상 클래스 -> 직접 객체를 생성할 수 없다.
- 인스턴스를 반환받아서 사용한다
- 최소한의 변경으로 프로그램이 동작 가능하다
Calendar cal = new Calendar(); // error
Calendar cal = Calendar.getInstance();
class MyApplication {
public static void main(String[] args) {
Calendar cal = new GregorianCalendar();
// 생성 부분을 필요에 의해 변경해야 한다.
// 생성하는 부분이 n개라면 n번의 변경이 발생한다.
}
}
class MyApplication {
public static void main(String[] args) {
Calendar cal = Calendar.getInstance();
// 생성하는 부분이 변경되어도 MyApplication은 변경되는 부분이 없다.
}
}
예제: 마지막 일 가져오기
원하는 달(N)의 마지막 날짜는 월 별로 다르다(28, 30, 31). 이럴땐 N+1월의 1일에서 하루를 뺀다
public void getLastDay(int year, int month) {
Calendar startDay = Calendar.getInstance();
Calendar endDay = Calendar.getInstance();
// 월의 경우 0~11까지의 값을 가지므로 1을 빼줘야 한다.
// month - 1: 원하는 달
// month: 원하는 달의 다음 달
startDay.set(year, month - 1, 1);
endDay.set(year, month, 1);
// 다음 달의 첫 달에서 하루(DATE field)를 뺀다
endDay.add(Calendar.DATE, -1);
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
System.out.println("startDay = " + df.format(new Date(startDay.getTimeInMillis())));
System.out.println("endDay = " + df.format(new Date(endDay.getTimeInMillis())));
}
Date와 Calendar 간의 변환
// Calendar를 Date로 변환
Calendar cal = Calendar.getInstance();
Date d = new Date(cal.getTimeInMillis()); // cal의 timestamp 가져오기
// Date to Calendar
Date d = new Date();
Calendar cal = Calendar.getInstance();
cal.setTime(d);
형식화 클래스
DecimalFormat
숫자를 형식화 하는데 사용
- 0과 #의 차이
double number = 1234567.89;
DecimalFormat df = new DecimalFormat("0");
System.out.printf("%19s: %s\n", "0", df.format(number)); // 1234568
DecimalFormat df = new DecimalFormat("#");
System.out.printf("%19s: %s\n", "#", df.format(number)); // 1234568
DecimalFormat df = new DecimalFormat("0.0");
System.out.printf("%19s: %s\n", "0.0", df.format(number)); // 1234567.9
DecimalFormat df = new DecimalFormat("#.#");
System.out.printf("%19s: %s\n", "#.#", df.format(number)); // 1234567.9
DecimalFormat df = new DecimalFormat("0000000000.0000");
System.out.printf("%19s: %s\n", "0000000000.0000", df.format(number)); // 0001234567.8900
DecimalFormat df = new DecimalFormat("##########.####");
System.out.printf("%19s: %s\n", "##########.####", df.format(number)); // 1234567.89
패턴이 0일때, #일때 둘 다 같은 결과처럼 보이지만 0일때는 자리수를 맞춰서 출력한다.
SimpleDateFormat
🌟 주의: SimpleDateFormat.format()의 파라미터는 Date 타입이다. Calendar 타입을 사용하면 에러남
https://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html
- Date to String
text를 Date로, Date를 text로 변경할 때 주로 사용한다.
// Date to String
Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String result = df.format(today);
System.out.println("result = " + result); // 2022-03-05
- String to Date
df 형식인 문자열을 Date로 변환한 뒤 df2 형식의 문자열로 출력
DateFormat df = new SimpleDateFormat("yyyy년 MM월 dd일");
DateFormat df2 = new SimpleDateFormat("yyyy/MM/dd");
try {
Date d = df.parse("2022년 03월 05일");
System.out.println(df2.format(d)); // 2022/03/05
} catch (Exception e) { }
}
여기까지가 책에 있는 내용이고, java.time 패키지 내용이 없다.
반응형
'책 > 자바의 정석' 카테고리의 다른 글
| Comparator와 Comparable (1) | 2022.03.10 |
|---|---|
| 11. 컬렉션 프레임웍 (0) | 2022.03.06 |
| 9. java.lang 패키지와 유용한 클래스 (0) | 2022.03.03 |
| 8. 예외처리 (4) | 2022.03.03 |
| Chapter 5. 배열 (3) | 2022.02.16 |