자바 8에 새로운 날짜와 시간 APi가 생긴 이유
자바 8에서 제공하는 Date-Time API
주요 API
현재를 기계 시간으로 표현하는 방법
Instant.now(): 현재 UTC(GMT)를 리턴
Instant now=Instant.now();
System.out.println(now); //기준시 UTC, GMT
System.out.println(now.atZone(ZoneId.of("UTC")));
ZoneDateTime zonedDateTime= new.atZone(ZoneId.systemDefault());
System.out.println(zonedDateTime);
인류용 일시를 표현하는 방법
기간을 표현하는 방법
Period/Duration. between()
LocalDate today=LocalDate.now();
LocalDate birthDay=LocalDate.of(2020,Month.DECEMBER,26);
Instant now=Instant.now();
Instant plus=now.plus(10,ChronoUnit.SECONDS); //새로운 Instant가 나옴(예전에는 x)
Period between=Period.between(today, birthDay);
System.out.println(between.get(chronoUnit.MONTHS)); //between으로 날짜간 차이 출력
Period until=today.until(birthday);
System.out.println(util.get(ChronoUnit.DAYS)); //until로 날짜간 차이 출력
Duration duration=Duration.between(now,plus);
System.out.println(duration.getSeconds()); //기계용 시간 비교. Period는 인류용 시간 비교
파싱 또는 포매팅
미리 정의해둔 포맷 참고
https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html#predefined
LocalDateTime.parse(String, DateTimeFormatter);
Dateteme
LocalDateTime now= LocalDateTime.now();
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("MM/d/yyyy");
LocalDate date=LocalDate.parse("07/15/1982",formatter); //문자열을 LocalDate 타입으로 파싱
System.out.println(now.format(formatter)); //02/1/2021 출력(현재 날짜). 현재 날짜를 지정한 포맷으로 출력
System.out.println(date); //1982-07-15 출력
레거시 API 지원
GregorianCalendar와 Date 타입의 인스턴스를 Instant나 ZonedDateTime으로 변환 가능
java.util.TimeZone에서 java.time.ZoneId로 상호 변환 가능
ZoneId newZoneAPI= TimeZone.getTimeZone("PST").toZoneId(); //예전 API에서 최근 API로
TimeZone legacyZoneAPI= TimeZone.getTime(newZoneAPI); //최근 API에서 예전 API로
Instant newInstant= new Date().toInstant(); //Date에서 Instant로
Date legacyInstant= Date.from(newInstant) //Instant에서 Date로