티스토리 뷰

728x90

서문



자바의 정석 기초편 챕터 10편을 기재합니다.
목적은 공부한 내용을 기록하는 것에 있기 때문에 완전한 문장이 아닐 수도 있습니다.
또한 모든 내용을 적은 것은 아닙니다.









자바의 정석 ( ch.10 )



날짜와 시간


  • java.util.Date
    • 날짜와 시간을 다룰 목적으로 만들어진 클래스(JDK1.0, 1995말)
    • Date의 메서드는 거의 deprecated("더 이상 사용하지 마세요"라는 말)되었지만, 여전히 사용

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

  • java.time
    • Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공(JDK1.8, java8, 2014)
    • 날짜(LocalDate) + 시간(LocalTime)
    • 날짜/시간(LocalDateTime)


Calendar 클래스

  • 추상 클래스이므로 getInstance()를 통해 구현된 객체를 얻어야 함
  • Calendar cal = new Calendar(); // 에러
  • Calendar cal = Calendar.getInstance()
  • 서양력, 불교력, 일본력 중에 형식을 골라야 함
1. Calendar 클래스 예제 1 (int get(int field))

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


Calendar에 정의된 필드, 날짜

필드명 설명
YEAR
MONTH 월(0부터 시작)
WEEK_OF_YEAR 그 해의 몇 번째의 주(1월1일부터~12월31일동안 몇 번째 주
WEEK_OF_MONTH 그 달의 몇 번째의 주(1월의 몇 번째 주)
DATE
DAY_OF_MONTH 그 달의 몇 번째 일
DAY_OF_YEAR 그 해의 몇 번째 일
DAY_OF_WEEK 요일(1~7, 1=일요일
DAY_OF_WEEK_IN_MONTH 그 달의 몇 번째 요일


Calendar에 정의된 필드, 시간

필드명 설명
HOUR 시간(0~11)
HOUR_OF_DAY 시간(0~23)
MINUTE
SECOND
MILLISECOND 천분의 일초
ZONE_OFFSET GMT기준 시차(천분의 일초 단위) +9
AM_PM 오전/오후


Calendar클래스 예제 2,3

  • set()으로 날짜 및 시간을 정함
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)

  • 날짜 지정하는 방법
    • 월은 0부터 시작함
Calendar date = Calendar.getInstance();

date.set(2021,11,21); // 2021년 12월 21일
// date.set(Calendar.YEAR, 2021);
// date.set(Calendar.MONTH, 11);
// date.set(Calendar.DATE, 21);

  • 시간 지정하는 방법
Calendar time = Calendar.getInstance();

time.set(Calendar.HOUR_OF_DAY, 14); // 오후 2시 45분 20초 설정
time.set(Calendar.MINUTE, 45);
time.set(Calendar.SECOND, 20);

  • clear()는 Calendar객체의 모든 필드를 초기화
  • clear(int field)는 Calendar객체의 특정 필드를 초기화
Calendar dt = Calendar.getInstance();
System.out.println(new Date(dt.getTimeInMillis()));

dt.clear()
System.out.println(new Date(dt.getTimeInMillis()));

> Tue Dec 21 06:05:08 GMT 2021
> Thu Jan 01 00:00:00 GMT 1970

---------------------------------------------------

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

dt.clear(Calendar.SECOND);
dt.clear(Calendar.MINUTE);
dt.clear(Calendar.HOUR);
dt.clear(Calendar.HOUR_OF_DAY);

System.out.println(new Date(dt.getTimeInMillis()));


> Tue Dec 21 06:07:00 GMT 2021
> Tue Dec 21 00:00:00 GMT 2021


Calendar클래스 예제 4,5

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

Calendar date = Calendar.getInstance();
date.clear();
date.set(2021,11,21);

date.add(Calendar.DATE,11); // 21 -> 01 / 월 00 로 바뀜
date.add(Calendar.MONTH, -8); // 13 - 8 -> 5월
System.out.println(new Date(date.getTimeInMillis()));


> Sat May 01 00:00:00 GMT 2021

---------------------------------------------------

2. roll()

Calendar date = Calendar.getInstance();
date.clear();
date.set(2021,11,21);

date.roll(Calendar.DATE,11); // 21 -> 01 / 월은 그대로 12
date.roll(Calendar.MONTH, -8); // 12 - 8 -> 4월 
System.out.println(new Date(date.getTimeInMillis()));


> Thu Apr 01 00:00:00 GMT 2021

  • Date와 Calendar간의 변환
    • Date의 메서드는 대부분 deprecated되었지만 여전히 사용
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 = Calendar.getInstance();
cal.setTime(d);


형식화 클래스

  • java.text패키지의 DecimalFormat, SimpleDateFormat
  • 숫자와 날짜를 원하는 형식으로 쉽게 출력 가능(숫자, 날짜 -> 형식 문자열)
  • 형식 문자열에서 숫자와 날짜를 뽑아내는 기능(형식 문자열 -> 숫자, 날짜)
    • Integer.parseInt()는 콤마(,)가 포함된 문자열을 숫자로 변환 못함
1. 숫자, 날짜 -> 형식 문자열

import java.text.*;

double number = 1234567.89;
DecimalFormat df = new DecimalFormat("#.#E0"); // 지수 표현
String result = df.format(number);
System.out.println(result);



> 1.2E6

--------------------------------------------

2. 형식 문자열 -> 숫자, 날짜
DecimalFormat df = new DecimalFormat("#,###.##");
Number number = df.parse("1,234,567.89");
double d = number.doubleValue();

System.out.println(d);



> 1234567.89

DecimalFormat()

기호 의미 패턴 결과(1234567.89
0 10진수(값이 없을 때는 0) 0
0.0
000000000.0000
1234568
12345678.9
001234567.8900
# 10진수 #
#.#
#######.####
1234568
1234567.9
1234567.89
E 지수기호 #.#E0
0.0E0
0.000000000E0
00.000000000E0
#.#########E0
##.########E0
1.2E6
1.2E6
1.234567890E6
12.34567890E6
1.23456789E6
12.3456789E5

SimpleDateFormat()

  • 날짜와 시간을 다양한 형식으로 출력할 수 있게 만들어 줌
  • 특정 형식으로 되어 있는 문자열에서 날짜와 시간을 뽑아낼 수 있음
Date time = new Date();
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
String result = df.format(time);
System.out.println(result);



> 2021-12-21

------------------------------------------

DateFormat df = new DateFormat("yyyy년 MM월 dd일");
DateFormat df2 = new DateFormat("yyyy / MM / dd");

Date d = df.parse("2021년 12월 21일");
String result = df2.format(d);
System.out.println(result);



> 2021 / 12 / 21

  • 날짜
기호 의미 보기
G 연대(BC,AD) AD
y 년도 2021
M 월(112 또는 1월12월) 10 또는 10월, OCT
w 년의 몇 번째 주(1~53) 50
W 월의 몇 번째 주(1~5) 4
D 년의 몇 번째 일(1~366) 100
d 월의 몇 번째 일(1~31) 10
F 월의 몇 번째 요일(1~5) 1
E 요일

  • 시간
기호 의미 보기
a 오전/오후(AM,PM) AM
H 시간(0~23) 20
k 시간(1~24) 10
K 시간(0~11) 4
h 시간(1~12) 12
m 분(0~59) 10
s 초(0~59) 30
S 천분의 일초(0~999) 500
z Time Zone(General Time Zone) GMT + 9:00
Z Time Zone(RFC 822 Time Zone) +0900
' escape문자(특수문자를 사용하는데에 쓰임) 없음





  • 자바의 정석 기초편 챕터 10에서는 날짜와 시간, 형식화에 대한 내용을 배웠습니다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
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
글 보관함