LostCatBox

Java 배우기 CH10

Word count: 459Reading time: 2 min
2022/12/23 Share

날짜와 시간

  • java.util.Date
    • 날짜와 시간을 다룰 목적으로 만들어진 클래스
    • Date의 메서드는 거의 삭제됨
  • java.util.Calendar
    • Date클래스 개선
  • java.time패키지
    • Date와 Calendar의 단점을 개선 JDK1.8

Calendar클래스

  • 추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야한다.
  • 주의할점!!! Month 필드는 값이 011이므로 112월 계산시 고려해야함
  • getInstance()의 현재시간으로 초기화된 객체반환. clear()한다면 Calendar객체의 모든 필드를 초기화 (1970년 1월 1일 0시0분0초)
  • clear(int field)는 Calender특정 필드 초기화 가능
  • 반드시 계산시 clear로 초기화하고 해야 오차없음

Untitled

Calendar클래스 - 예제1

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

Untitled

Calendar클래스 - 예제 2,3

  • 주의할점은 set()에 시간을 한번에 초기화하는 것은 존재안하므로 각자해줘야함

Untitled

  • 예제 2
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
import java.util.*;

class Ex10_2 {
public static void main(String[] args) {
// 요일은 1부터 시작하기 때문에, DAY_OF_WEEK[0]은 비워두었다.
final String[] DAY_OF_WEEK = {"","일","월","화","수","목","금","토"};

Calendar date1 = Calendar.getInstance();
Calendar date2 = Calendar.getInstance();

// month의 경우 0부터 시작하기 때문에 4월인 경우, 3로 지정해야한다.
// date1.set(2019, Calendar.APRIL, 29);와 같이 할 수도 있다.
date1.set(2019, 3, 29); // 2019년 4월 29일로 날짜를 설정한다.
System.out.println("date1은 "+ toString(date1)
+ DAY_OF_WEEK[date1.get(Calendar.DAY_OF_WEEK)]+"요일이고,");
System.out.println("오늘(date2)은 " + toString(date2)
+ DAY_OF_WEEK[date2.get(Calendar.DAY_OF_WEEK)]+"요일입니다.");

// 두 날짜간의 차이를 얻으려면, getTimeInMillis() 천분의 일초 단위로 변환해야한다.
long difference =
(date2.getTimeInMillis() - date1.getTimeInMillis())/1000;
System.out.println("그 날(date1)부터 지금(date2)까지 "
+ difference +"초가 지났습니다.");
System.out.println("일(day)로 계산하면 "+ difference/(24*60*60)
+"일입니다."); // 1일 = 24 * 60 * 60
}

public static String toString(Calendar date) {
return date.get(Calendar.YEAR)+"년 "+ (date.get(Calendar.MONTH)+1)
+"월 " + date.get(Calendar.DATE) + "일 ";
}
}
  • 예제3
1
2
3
4
5
6
7
8
9
10
11
12
13
final int[] TIME_UNIT = {3600, 60, 1}; // 큰 단위를 앞에 놓는다.
final String[] TIME_UNIT_NAME = {"시간 ", "분 ", "초 "};

long difference =
Math.abs(time2.getTimeInMillis() - time1.getTimeInMillis())/1000;
System.out.println("time1과 time2의 차이는 "+ difference +"초 입니다.");

String tmp = "";
for(int i=0; i < TIME_UNIT.length;i++) {
tmp += difference/TIME_UNIT[i] + TIME_UNIT_NAME[i];
difference %= TIME_UNIT[i];
}
System.out.println("시분초로 변환하면 " + tmp + "입니다.");

Calendar클래스 - 예제4,5

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

Untitled

Date와 Calendar간의 변환

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

Untitled

형식화 클래스

  • 날짜와 숫자 원하는 형식으로 출력가능

DecimalFormat

  • 숫자를 형식화할 때 사용(숫자→형식 문자열)
  • parse를 활용하면, format인 애를 숫자 추출가능

Untitled

SimpleDateFormat(1/2)

  • 날짜와 시간을 다양한 형식으로 출력할 수 있게 해준다

Untitled

SimpleDateFormate(2/2)

  • 특정 형식으로 되어 있는 문자열에서 날짜와 시간을 뽑아낼수도있다.

Untitled

CATALOG
  1. 1. 날짜와 시간
    1. 1.1. Calendar클래스
      1. 1.1.1. Calendar클래스 - 예제1
      2. 1.1.2. Calendar클래스 - 예제 2,3
      3. 1.1.3. Calendar클래스 - 예제4,5
    2. 1.2. Date와 Calendar간의 변환
  2. 2. 형식화 클래스
    1. 2.1. DecimalFormat
    2. 2.2. SimpleDateFormat(1/2)
      1. 2.2.1. SimpleDateFormate(2/2)