JAN's History
자바의정석 CH10 날짜와시간 & 형식 본문
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()를 통해 구현된 객체를 얻어야 한다.
=> get()으로 날짜와 시간필드 가져오기 - int get(int field <= Calendar.YEAR ...)
int get(int field <= Calendar.YEAR처럼 여기에 들어가는 것)
+MONTH는 0부터 시작하기 때문에 7이면 8월인 것
+DAY_OF_WEEK : (1~7) 1=일요일
today라는 Calendar 객체를 생성.
today = 2020년 6월 9일
TimeZone은 GMT기준으로 한국이 9시간 빠르기 때문에 +9.
1-3. Calendar 클래스 set()
- set()으로 날짜와 시간 지정하기
- 날짜 지정하는 방법. 월(MONTH)이 0부터 시작한다는 점에 주의
- 시간 지정하는 법
=> 날짜와 시간처럼 한번에 할 순 없기 때문에 따로 지정해줘야 함.
날짜와 날짜를 빼는 방법
1. 날짜 시간을 초 단위로 바꾸고 뺀다.
=> getTimeInMillis() => 날짜시간을 초단위로 바꿔주는 메서드 사용.
단위가 1000단위이기 때문에 초단위로 바꾸기 위해 나누기 /1000을 해줘야 한. (1000 = 1초)
2. 뺀 값의 초 단위를 다시 일 단위로 바꾼다.
=> 1일 = 24(시간) * 60(분) * 60(초) 이기 때문에 / (24*60*60)을 하면 일 단위가 나온다.
시간과 시간을 빼는 방법
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의 형변환 방법
1-4 형식화 클래스
- java.text 패키지의 DecimalFormat, SimpleDateFormat
- 숫자와 날짜를 원하는 형식으로 쉽게 출력 가능(숫자, 날짜 -> 형식 문자열)
- 형식 문자열에서 숫자와 날짜를 뽑아내는 기능(형식 문자열 -> 숫자, 날짜)
DecimalFormat
- 숫자를 형식화할 때 사용(숫자 -> 형식 문자열)
=> double형태를 #.#E0 지수 형태로 바꾸기. 그리고 그 df.format(number)를 문자열 형태로 저장
0이 많으면 그냥 0으로 채워짐.
- 특정 형식의 문자열을 숫자로 변환할 때도 사용(형식문자열 -> 숫자)
+ Inter/Floaf/Double 등...parselnt()는 콤마가 들어간 숫자를 형변환 못한다.
=> 그럴 땐 DecimalFormat을 사용하면 된다.
=> 형식 문자열에서 숫자로 바꿀 땐 parse 사용, 숫자를 형식 문자열로 바꿀 땐 format 사용.
DecimalFormat을 생성할 땐 원하는 형식을 지정해주면 된다.
SimpleDateFormat
- 날짜와 시간을 다양한 형식으로 출력할 수 있게 해준다.
=> 월을 표기하고 싶을 땐 MM 두개 사용
- 특정 형식으로 되어 있는 문자열에서 날짜와 시간을 뽑아낼 수도 있다.
=> "yyyy년 MM월 dd일"을 Date로 먼저 바꿔야한다. parse() 사용. 이후에 format으로 df2으로 형식화 진행.
'자바' 카테고리의 다른 글
자바의정석 CH 11 컬렉션 프레임웍 - 2 (0) | 2023.04.19 |
---|---|
자바의정석 CH 11 컬렉션 프레임웍 - 1 (0) | 2023.04.18 |
자바의 정석 - CH9 lang 패키지 (0) | 2023.04.14 |
자바의 정석 - CH8 예외처리 (0) | 2023.04.12 |
자바의 정석 - CH7 객체지향 언어 2 - 3 (0) | 2023.04.12 |