반응형
Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
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
Archives
Today
Total
관리 메뉴

지식조각모음

10. 날짜와 시간 & 형식화 본문

책/자바의 정석

10. 날짜와 시간 & 형식화

y00 2022. 3. 5. 18:13
반응형

날짜와 시간

  • 클래스 발전 과정: 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