Java8 의 날짜 Api


Java8 의 날짜 Api

기존 자바의 Date 와 Calendar Api는 여러가지 문제점을 갖고 있었다. 참조 : http://kdsr2z0.github.io/java_date_problem/ 그러한 문제점을 해결하기 위해 많은 오픈 소스들이 생겨났었는데, Java8에서부터는 깔끔하게 정리된 API가 제공된다.

Java8에서 새롭게 제공되는 API는 java.time 패키지 안에 정의되어있다.

시간 척도

Instant

Duration

시간 연산

HumanTime

휴먼타임은 인간이 사용하는 시간을 말한다.

휴먼타임에는 지역 날짜/시간과 구역시간이 있다.

LocalDate

예) 매년 255번째 날은 프로그래머의 날이다.

	LocalDate programmersDay = LocalDate.of(LocalDate.now().getYear(),1,1).plusDays(255);
	System.out.println("this year's programmersDay : " + programmersDay);

	==>
	this year's programmersDay : 2015-09-13

날짜 조정기

Java8에서는 날짜 조정기라불리는 TemporalAdjusters 클래스를 제공한다.

일반적으로 날짜 조정 메서드의 결과를 LocalDate 객체의 with 메서드에 전달하여 사용한다.

Local Time

ZonedDateTime

예) 일광절약 시간이 적용된 케이스와, Duration 클래스를 사용하여 시간연산을 한 케이스와 Period 클래스를 사용한 케이스의 결과를 볼 수 있다.

	ZonedDateTime origin = ZonedDateTime.of(LocalDate.of(2013, 10, 27), LocalTime.of(2,30), ZoneId.of("Europe/Berlin"));
	System.out.println("origin : " + origin);
	ZonedDateTime plusOneHours = origin.plusHours(1);
	System.out.println("plusOneHours : " + plusOneHours);
	ZonedDateTime plusTwoHours = origin.plusHours(2);
	System.out.println("plusTwoHours : " + plusTwoHours);
	ZonedDateTime plusDurationSevenDay = origin.plus(Duration.ofDays(7));
	System.out.println("plusDurationSevenDay : " + plusDurationSevenDay);
	ZonedDateTime plusPeriodSevenDay = origin.plus(Period.ofDays(7));
	System.out.println("plusPeriodSevenDay : " + plusPeriodSevenDay);

	==>
	origin : 2013-10-27T02:30+02:00[Europe/Berlin]
	plusOneHours : 2013-10-27T02:30+01:00[Europe/Berlin]
	plusTwoHours : 2013-10-27T03:30+01:00[Europe/Berlin]
	plusDurationSevenDay : 2013-11-03T01:30+01:00[Europe/Berlin]
	plusPeriodSevenDay : 2013-11-03T02:30+01:00[Europe/Berlin]

DateTimeFormatter

기존에 있던 SimpleDateFormat과 특별히 차이점을 발견하지는 못하였지만, java.time 패키지의 클래스들을 지원한다.

하위 호환성

레거시 클래스와 상호 변환을 가능하게 해주는 메서드를 제공하고 있다.

레거시 클래스의 from, valueOf메서드와 to*메서드를 사용하면 상호 변환을 시킬 수 있다.

참조

가장 빨리 만나는 자바8, 카이 호스트만 지음, 길벗

[top]

comments powered byDisqus