[Java] Ch.10 날짜와 시간&형식화

yoons(이윤서)·2024년 7월 7일

[Java] 자바의 정석

목록 보기
10/14

👉🏻 이 글은 자바의 정석(3판) Chapter10을 공부하며 쓴 글입니다.

📌 1. 날짜와 시간

📖 1.1 Calender와 Date

  • java.util.Date
    날짜와 시간을 다룰 목적으로 만들어진 클래스(JDK1.0)
    사용X

  • java.util.Calendar
    Date클래스를 개선한 새로운 클래스(JDK1.1)
    여전히 단점 존재

  • java.time패키지
    Date, Calendar의 단점 개선.(JDK1.8)
    날짜와 시간을 따로 다룰 수 있도록 함.
    -> LocalDate / LocalTime / LocalDateTime

Calender 클래스

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

Calendar cal = cal new Calendar();	//Error! 추상클래스는 인스턴스 생성 불가
Calendar cal = Calendar.getInstance();	// Calendar클래스를 구현한 클래스의 인스턴스 반환

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

  • 날짜
필드명설명
YEAR
MONTH월 (0부터 시작)
WEEK_OF_YEAR
WEEK_OF_MONTH그 달의 몇 번째 주
DATE
DAY_OF_MONTH그 달의 몇 번째 일
DAY_OF_YEAR그 해의 몇 번째 일
DAY_OF_WEEK요일
DAY_OF_WEEK_IN_MONTH그 달의 몇 번째 요일
  • 시간
필드명설명
HOUR시간(0~11)
HOUR_OF_DAY시간(0~23)
MINUTE
SECOND
MILLISECOND천분의 일초
ZONE_OFFSETGMT기준 시차(밀리세컨 단위)
AM_PM오전/오후
  • set()으로 날짜와 시간 지정하기
void set(int field, int value)
void set(int year, int month, int date)

Calendar date1 = Calendar.getInstance();
date1.set(2017, 7, 15);	//2017.08.15

⚠️월(MONTH)이 0부터 시작한다는 점 주의!

  • 시간 지정
time1.set(Calendar.HOUR_OF_DAY, 10);
time1.set(Calendar.MINUTE, 20);
time1.set(Calendar.SECOND, 30);	// 10시 20분 30초
  • clear()는 Calendar객체의 모든 필드를 초기화

  • clear(int field)는 Calendar객체의 특정 필드를 초기화

  • add()는 특정 필드의 값을 증가 또는 감소(다른 필드에 영향 O)
    : 여기서 다른 필드에 영향을 준다는 것을 8월 31일에서 date.add(Calendar.Date, 1)을 하면 자동으로 9월 1일이 되는 것을 의미

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

Date <-> Calendar 간의 변환

  1. Calendar -> Date
    Calendar cal = Calendar.getInstance();
    ...
    Date d = new Date(cal.getTimeInMillis());	// Date(long date)
  2. Date -> Calendar
    Date d = new Date();
    ...
    Calendar cal = Calender.getInstance();
    cal.setTime(d);

📌 2.형식화 클래스

java.text 패키지의 DecimalFormat, SimpleDateFormat

  • 숫자와 날짜를 원하는 형식으로 쉽게 출력 가능 (숫자, 날짜 -> 형식 문자열)
  • 형식 문자열에서 숫자와 날짜를 뽑아내는 기능

📖 2.1 DecimalFormat

  • 숫자를 형식화할 때 사용(숫자 -> 형식 문자열)
double number = 1234567.89;
DecimalFormat df = new DecimalFormat("#.#E0");
String result = df.format(number);	//result = "1.2E6"

0 : 10진수(값이 없을 때는 0)
# : 10진수(값이 없으면 생략)
E : 지수기호

  • 특정 형식의 문자열을 숫자로 변환할 때도 사용(형식 문자열 -> 숫자)
    + ) Integer.parseInt()는 콤마(,)가 포함된 문자열을 숫자로 변환 못함.
DecimalFormat df = new DecimalFormat("#,###.##");
Number num = df.parse("1,234,567.89");
double d = num.doubleValue();	// 1234567.89

📖 2.2 SimpleDateFormat

  • 날짜와 시간을 다양한 형식으로 출력할 수 있게 해준다.
Date today = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
		
String result = df.format(today);

G : 연대(BC, AD)
y : 년도
M : 월
W : 년의 몇 번째 주 (1~53)
w : 월의 몇 번째 주 (1~5)
D : 년의 몇 번째 일 (1~366)
d : 월의 몇 번째 일 (1~31)
F : 월의 몇 번째 요일 (1~5)
E : 요일

  • 특정 형식으로 되어 있는 문자열에서 날짜와 시간을 뽑아낼 수도 있다.
Date d = df.parse("2015년 11월 23일");	// 문자열을 Date로 변환
String result = df2.format(d);	// format 변경
profile
개발공부하는 잠만보

0개의 댓글