JAN's History

자바의정석 CH10 날짜와시간 & 형식 본문

자바

자바의정석 CH10 날짜와시간 & 형식

JANNNNNN 2023. 4. 17. 20:03

1. 날짜와 시간

=> java.util.Date : 날짜와 시간을 다룰 목적으로 만들어진 클래스 (JDK1.0)

- Date의 메서드는 거의 deprecated (=사용하지 않을 것을 권장)되어있지만, 여전히 쓰이고 있다.

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

=> java.time 패키지 : Date와 Calendar의 단점을 개선한 새로운 클래스들을 제공(JDK1.8)

1-2. Calendar 클래스 get()

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

getInstance를 통해서 접근 가능

=> get()으로 날짜와 시간필드 가져오기 - int get(int field <= Calendar.YEAR ...)

Calendar에 정의된 필드

int get(int field <= Calendar.YEAR처럼 여기에 들어가는 것)

+MONTH는 0부터 시작하기 때문에 7이면 8월인 것

+DAY_OF_WEEK : (1~7) 1=일요일

예제 1

today라는 Calendar 객체를 생성.

today = 2020년 6월 9일

TimeZone은 GMT기준으로 한국이 9시간 빠르기 때문에 +9.

1-3. Calendar 클래스 set()

- set()으로 날짜와 시간 지정하기

문법

- 날짜 지정하는 방법. 월(MONTH)이 0부터 시작한다는 점에 주의

- 시간 지정하는 법

문법

=> 날짜와 시간처럼 한번에 할 순 없기 때문에 따로 지정해줘야 함.

예제 2

날짜와 날짜를 빼는 방법

1. 날짜 시간을 초 단위로 바꾸고  뺀다.

=> getTimeInMillis() => 날짜시간을 초단위로 바꿔주는 메서드 사용.

단위가 1000단위이기 때문에 초단위로 바꾸기 위해 나누기 /1000을 해줘야 한. (1000 = 1초)

2. 뺀 값의 초 단위를 다시 일 단위로 바꾼다.

=> 1일 = 24(시간) * 60(분) * 60(초) 이기 때문에 / (24*60*60)을 하면 일 단위가 나온다.

예제 3

시간과 시간을 빼는 방법

1. 날짜 시간을 초 단위로 바꾸고  뺀다.

=> getTimeInMillis() => 날짜시간을 초단위로 바꿔주는 메서드 사용. 

+ 이때 어느 시간이 더 클지 몰라 음수가 나올 수 있으므로 절대값 사용 Math.abs()

2. 뺀 값의 초 단위를 다시 시간 단위로 바꾼다.

=> final int[] TIME_UNIT = {3600, 60, 1} // 큰 단위를 앞에 놓는다.

36580 / 3600 + 시간을 tmp에 저장하고, 36580%3600 = 580의 값으로 다시 for문이 돌아가는 것

580/60 + 분을 tmp에 저장해서 9분이 저장되고 ... 하여 tmp가 완성!

+큰단위에서 작은단위로 나눈다. (거스름돈 나누는 방법과 비슷하다)

 

- claer() : Calendar 객체의 모든 필드를 초기화

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

=> 원래는 날짜 시간을 초기화하기 전 즉, set()하기 전에 꼭 clear()을 사용해줘야한다.

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

- roll()은 특정필드의 값을 증가 또는 감소(다른 필드에 영향X) -> 거의 잘 안

=> 2020년 7월 31일에서 -8을 하면 2019년 12월이 되는 건이 아니라 2020년 12월이 되는 것

https://github.com/castello/javajungsuk_basic/blob/master/javajungsuk_basic_src/ch10/src/Ex10_5.java

 

GitHub - castello/javajungsuk_basic: 자바의 정석 기초편 관련 자료입니다.

자바의 정석 기초편 관련 자료입니다. Contribute to castello/javajungsuk_basic development by creating an account on GitHub.

github.com

=> 달력찍기 이해해보기

1. 말일 구하기 => 다음달 1일에서 하루 빼기. 그러면 말일 구할 수 있다. (이번달, 다음달 총 객체 2개 필요)

2. 1일의 요일 구하기 => 앞에 공백 찍어줘야함.

3. 토요일마다 줄바꿈해주기

Calendar <->Date

=>Calendar와 Date의 형변환 방법

1-4 형식화 클래스

- java.text 패키지의 DecimalFormat, SimpleDateFormat

- 숫자와 날짜를 원하는 형식으로 쉽게 출력 가능(숫자, 날짜 -> 형식 문자열)

- 형식 문자열에서 숫자와 날짜를 뽑아내는 기능(형식 문자열 -> 숫자, 날짜)

DecimalFormat

- 숫자를 형식화할 때 사용(숫자 -> 형식 문자열)

=> double형태를 #.#E0 지수 형태로 바꾸기. 그리고 그 df.format(number)를 문자열 형태로 저장

0이 많으면 그냥 0으로 채워짐.

- 특정 형식의 문자열을 숫자로 변환할 때도 사용(형식문자열 -> 숫자)

+ Inter/Floaf/Double 등...parselnt()는 콤마가 들어간 숫자를 형변환 못한다. 

=> 그럴 땐 DecimalFormat을 사용하면 된다.

DecimalFormat 예제

=> 형식 문자열에서 숫자로 바꿀 땐  parse 사용, 숫자를 형식 문자열로 바꿀 땐 format 사용. 

DecimalFormat을 생성할 땐 원하는 형식을 지정해주면 된다. 

 

SimpleDateFormat

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

=> 월을 표기하고 싶을 땐 MM 두개 사용

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

=> "yyyy년 MM월 dd일"을 Date로 먼저 바꿔야한다. parse() 사용. 이후에 format으로 df2으로 형식화 진행.