Date-Time

구름코딩·2020년 10월 6일
0

java8 _ 더 자바

목록 보기
12/23

자바 8에 오면서 새로운 날짜, 시간 API가 생겼다

기존 java.util.Date클래스의 문제점

// date와 관련된 기존 format
Date date = new Date();
Calendar calendar = new GregorianCalendar();
SimpleDateFormat dateFormat = new SimpleDateFormat();
System.out.println(date);
//Tue Oct 06 10:17:52 KST 2020

기존 클래스의 불편점

클래스, 메소드 이름의 불분명성

long time = date.getTime();
System.out.println(time);
// date에서 시간을 가져온다?
// time은 실제 시간이 아닌 기준시 로부터 밀리 세컨을 센 값
// 기계시간으로 1601898495146 식으로 나온다

Mutable한 특성으로 인한 thread unsafe

//3초재우기
Thread.sleep(1000 * 3);
Date after3Seconds = new Date();
System.out.println(after3Seconds); (18)

//지난 과거의 시간을 가져와서 시간을 지정할 수 있다
//time == Mon Oct 05 20:48:15 KST 2020 (15초)
after3Seconds.setTime(time); (과거의 15초로 설정)
System.out.println(after3Seconds);

//Mon Oct 05 20:48:18 KST 2020
//Mon Oct 05 20:48:15 KST 2020

쓰레드 sleep으로 3초를 보내고 시간을 찍었지만 과거의 시간으로 setTime할 수 있다

버그가 발생할 여지가 많다

//아래와 같이 생년월일을 표시할때 month에 경고를 날려주는데
//Gregori에서 month가 0부터 시작하므로 0이 1월을 나타내게 된다
//따라서 실수의 가능성이 높기 때문에 숫자대신 상수를 쓰도록 경고해주게 된다 -> Calendar.NOVEMBER
Calendar woonsikBirthDay = new GregorianCalendar(1995, Calendar.NOVEMBER, 9);
// type safty가 없다. 즉, 함수의 인자로 int형을 다 받을수 있게 되있어서 들어오는 인자가
// 음수이든 범위를 넘는 숫자의 입력에 대한 보호가 안된다

java8부터 제공하는 Date-Time API

JSR-310 스펙의 구현체를 제공
디자인 철학
Clear, Fluent, Immutalbe, Extensible
참고

주요 API

기계용 시간(machin time)과 인류용 시간(human time)으로 구분

기계용 시간 : EPOCK시부터 현재까지의 타임스탬프를 표현

  • instant를 사용

인류용 시간 : 연,월,일,시,분,초 등을 표현

  • LocalDate, LocalTime, LocalDateTime
  • DateTimeFormatter를 사용해서 특정한 문자열로 포매팅가능
profile
내꿈은 숲속의잠자는공주

0개의 댓글