일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- ID중복
- sleep()메소드
- first-of-child
- 리눅스셋팅
- include지시자
- include 지시자
- ObjectInputStream
- 리눅스세팅
- include액션태그
- 스레드그룸
- StringReader
- Daemon()
- MemoryStream
- InputDialog
- Linux세팅
- isinterrupted()
- interrupt()
- first-child
- 동기화
- interrupted()
- ThreadGroup()
- 메모리스트림
- 표현 언어
- char[] String 형변환
- Linux셋팅
- StringWriter
- String char[] 형변환
- 상관 서브 쿼리
- 아이디중복
- 상관서브쿼리
- Today
- Total
다연이네
[days21] JDK 1.8 java.time 본문
JDK 1.0 Date보다 JDK 1.1 Calendar가 더 많은 기능이 구현된 클래스
JDK 1.8부터는 java.time 패키지 : 날짜, 시간을 다루는 클래스를 가지고 있는 패키지
java.time의 4개의 하위 패키지
1) chrono패키지: 표준(ISO)이 아닌 달력 시스템을 위한 클래스들 제공
2) format 패키지: 날짜, 시간을 파싱(변환)하고 형식화하기 위한 클래스들 제공
3) temporal 패키지: 날짜, 시간의 필드와 단위를 위한 클래스들 제공
4) zone 패키지: 시간대(time-zone)와 관련된 클래스들 제공
java.time 패키지의 핵심 클래스
1) LocalTime 클래스: 시간클래스
2) LocalDate 클래스: 날짜클래스
3) LocalDateTime = 1) + 2)
4) ZoneDateTime = 3) + TimeZone
Calendar는 ZoneDateTime처럼 날짜+시간+타임존(시간대)를 다룬다.
Date와 유사한 클래스로는 Instant클래스(타임존에 있음)가 있다.
(->날짜+시간+초(나노)단위를 다룸)
Temporal과 TemporalAmount
1) java.time 패키지의 핵심클래스들은 impleimplements Temporal, TemporalAcessor, TemporalAdjuster
2) Period, Duration 클래스는 implements TemporalAmount
TemporalUnit과 TemporalField
1) TemporalUnit: 날짜와 시간의 단위를 정의해 놓은 인터페이스 //얘 타입을 달라 하면
2) ChronoUnit 열거형: TemporalUnit을 구현한 열거형 //얘를 주면 됨
1)TemporalField: 년,월,일 등 날짜와 시간의 필드를 정의해 놓은 인터페이스 //얘도
2)ChronoField: 구현한 클래스 //얘 주면 됨 (업캐스팅 개념)
package review;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.temporal.ChronoField;
public class Review01 {
public static void main(String[] args) {
/*
* 일정관리가 없는 프로그램은 없다 ( 항상 다룬다 )
* 1. Date (기능 별로 없음)
* 2. Calendar 추상클래스 = 그레고리안캘린더라는 자식클래스 가짐
* 3. java.time 패키지
* 하위4개 패키지 존재
* -
* 4. 핵심클래스
* -LocalTime, LocalDate, LocalDateTime, 타임존,,
* 5. TU, TF
* CU, CF
* TA
* 6. now()생성, of()설정
* getXXX(), get(field)
* with(), plusXXX(), plus(), minus()
* isAfter(), isBefore(), isEqual()
*
* 7. Period, Duration
* static between() == until() 기능은 동일
* 8. 문자열 -> 날짜/시간 객체로 변환 parse()
*
*
*/
LocalDate now = LocalDate.now();
LocalTime time = LocalTime.now();
System.out.println(now); //2020-10-19
System.out.println(time); //13:32:23.770
//년, 월, 일
int year = now.get(ChronoField.YEAR);
year = now.getYear();
int month = now.get(ChronoField.MONTH_OF_YEAR);
month = now.getMonthValue(); //1~12
//Month month = now.getMonth(); // JANUARY~DECEMBER
int day = now.get(ChronoField.DAY_OF_MONTH);
day =now.getDayOfMonth();
//LocalDate 클래스 사용해서 요일 가져오기
System.out.println(now.getDayOfWeek()); //MONDAY
//리턴 자료형이 DatOfWeek, 열거형
System.out.println(now.get(ChronoField.DAY_OF_WEEK)); //1
//시간, 분, 초
time.getHour();
time.get(ChronoField.HOUR_OF_DAY);
time.getMinute();
time.get(ChronoField.MINUTE_OF_HOUR);
time.getSecond();
time.get(ChronoField.SECOND_OF_MINUTE);
time.get(ChronoField.MILLI_OF_SECOND); //밀리세컨드
// of() 메소드 - 지정된 날짜와 시간으로 객체를 생성할 때는
//LocalDate ld = LocalDate.of(2020, 9, 15);
//LocalTime lt = LocalTime.of(hour, minute);
String d ="2020-10-19"; // ->LocalDate 클래스 형변환
LocalDate ld = LocalDate.parse(d);
System.out.println(ld); // 2020-10-19 날짜객체로 파싱되어진 것
//필드의 값 변경하기 - with(), plus(), minus()
//현재 날짜 100일 후, 100일 전 날짜
//plusXXX
d= d.plusDays(100);
d= d.minusDays(100);
//plus
d=d.plus(100, ChronoUnit.DAYS );
d=d.minus(100, ChronoUnit.DAYS );
//연도라는 필드를 2019로 변경
//d = d.withYear(2019); //방법1
d= d.with(ChronoField.YEAR, 2019); //방법2
//시간 필드를 3으로 변경
t= t.withHour(3); //방법1
t= t.with(ChronoField.HOUR_OF_DAY, 3); //방법2
//**** truncatedTo() ****
LocalDateTime dt = LocalDateTime.of(birthDate, birthTime);
System.out.println(dt);
dt = dt.truncatedTo(ChronoUnit.DAYS) ; // 날짜(일) 뒤에는 모두 제거
System.out.println(dt);
}
}
TemporalAdjusters
자주 쓰일만한 날짜 계산들을 대신 해주는 메소드 정의
package review;
import java.time.DayOfWeek;
import java.time.LocalDate;
//import java.time.temporal.TemporalAdjusters; 1번
import static java.time.temporal.TemporalAdjusters.*; //2번
public class Review01 {
public static void main(String[] args) {
//다음주 월요일이 언제인가?
LocalDate d = LocalDate.now();
//LocalDate d2 = d.with(TemporalAdjusters.next(DayOfWeek.MONDAY)); 1번
LocalDate d2 = d.with(next(DayOfWeek.MONDAY)); //2번
System.out.println(d2);
//다음주 월요일? 오늘 포함
System.out.println(now.with(nextOrSame(DayOfWeek.MONDAY))); //2020-10-19
}
}
Period와 Duration 클래스의 차이
Period 날짜-날짜
Duration 시간-시간
package review;
import java.time.Duration;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.Period;
import java.time.temporal.ChronoUnit;
public class Review01 {
public static void main(String[] args) {
LocalDate d1 = LocalDate.of(2014, 1, 1);
LocalDate d2 = LocalDate.of(2015, 12, 31);
Period p = Period.between(d1, d2);
System.out.println(p.getYears()); //1
System.out.println(p.get(ChronoUnit.MONTHS)); //11
System.out.println(p.get(ChronoUnit.DAYS)); //30
LocalTime t1 = LocalTime.of(00, 00, 00);
LocalTime t2 = LocalTime.of(12, 34, 56);
Duration d = Duration.between(t1, t2);
System.out.println(d.getSeconds()); //45296 (두 시간의 초차이)
LocalTime tmpTime = LocalTime.of(0, 0);
tmpTime = tmpTime.plusSeconds(d.getSeconds());
System.out.println(tmpTime.getHour()); //12
System.out.println(tmpTime.getMinute()); //34
System.out.println(tmpTime.getSecond()); //56
}
}
LocalDate - 특정 날짜객체로 파싱
String d = "2020-10-19";
LocalDate ld = LocalDate.parse(d);
System.out.println(ld);
//Date의 경우
Date d = new Date(year, month, date);
//Calendar의 경우
Calendar c = new GregorianCalendar(year, month, date);
'Java' 카테고리의 다른 글
[days22] 컬렉션 클래스<List> - ArrayList와 Vector +열거자와 반복자 (0) | 2020.10.21 |
---|---|
[days21] 컬렉션 프레임워크 (0) | 2020.10.19 |
[days20] 형식화(format) 클래스 (0) | 2020.10.18 |
[days20] 날짜와 시간 (0) | 2020.10.18 |
[days19] Math클래스, 래퍼클래스, java.util.Objects (0) | 2020.10.18 |