티스토리 뷰

BackEnd/Java

Java8 LocalDate

Sh.TK 2017. 3. 28. 11:42

대표적인 클래스

이름 설명
LocalDate 날짜만을 표현하는 클래스(년, 월, 일 등) 시간 제외.
LocalTime 시간만을 표현하는 클래스(시, 분, 초 등) 날짜 제외.
LocalDateTime 날짜와 시간을 모두 표현하는 클래스
ZonedDateTime 타임존이 지정된 날짜와 시간을 표현하는 클래스.

날짜 및 시간 객체 생성

java.time에서 제공하는 클래스는 모두 팩토리메서드 방식으로 객체를 생성하며, 그 방법이 동일하다.

// 현재 날짜 및 시간 객체 생성
LocalDate today = LocalDate.now();
LocalDateTime now = LocalDateTime.now();
LocalTime currentTime = LocalTime.now();

// 특정 날짜 및 시간 갱체 생성
LocalDate yesterday = LocalDate.of(2016, 2, 9); // 2016/02/09
LocalTime thatTime = LocalTime.of(18, 30, 34);          // 18:30:34
LocalDateTime theDay = LocalDateTime.of(yesterday, thatTime);           // 날짜와 시간으로 생성
LocalDateTime superDay = LocalDateTime.of(2016, 2, 5, 15, 0, 0);        // 2016/02/05 15:00:00

// 날짜 및 시간을 파싱해서 생성
LocalDate thatDay = LocalDate.parse("2016-01-04");
LocalTime goHomeTime = LocalTime.parse("18:30:00");
LocalDateTime dayAndTime = LocalDateTime.parse("2016-01-04T18:30:00");  // 날짜와 시간을 T로 구분
// 기존 객체를 재활용하여 새로운 객체 생성
LocalDate localDate = today.withDayOfMonth(5);

데이터 얻기

LocalDateTime now = LocalDateTime.parse("2016-01-31T12:30:58");

assertEquals(2016, now.getYear());
assertEquals(1, now.getMonthValue());
assertEquals(31, now.getDayOfMonth());
assertEquals(12, now.getHour());
assertEquals(30, now.getMinute());
assertEquals(58, now.getSecond());

포맷

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy/MM/dd hh:mm:ss");
LocalDateTime localDateTime = LocalDateTime.of(2016, 1, 1, 7, 30, 24);
assertEquals("2016/01/01 07:30:24", formatter.format(localDateTime));

연산

LocalDateTime theDay = LocalDateTime.parse("2016-01-31T12:30:58");
assertEquals(58, theDay.getSecond());

// 10초 후 얻기
LocalDateTime after10Seconds = theDay.plusSeconds(10);
assertEquals(8, after10Seconds.getSecond());

// 10일 후 얻기
LocalDateTime after10Days = theDay.plusDays(10);
assertEquals(2, after10Days.getMonthValue());
assertEquals(10, after10Days.getDayOfMonth());

// 10년 전 얻기
LocalDateTime before10Years = theDay.minusYears(10);
assertEquals(2006, before10Years.getYear());

특정 주기 지정

// 5년, 2달, 10일
Period period = Period.of(5, 2, 10);
LocalDate theDate = LocalDate.of(2016, 10, 20);
LocalDate afterDate = theDate.plus(period);
assertEquals(2021, afterDate.getYear());
assertEquals(12, afterDate.getMonthValue());
assertEquals(30, afterDate.getDayOfMonth());

날짜 간격, 기간

LocalDateTime today = LocalDateTime.now();
LocalDateTime yesterday = today.minusDays(1);
Duration durationOfDays = Duration.between(yesterday, today);
assertEquals(24, durationOfDays.toHours());

JDBC를 위한 SQL 관계

클래스 SQL 자료형
LocalDate DATE
LocalTime TIME
LocalDateTime TIMESTAMP
OffsetTime TIME WITH TIMEZONE
OffsetDateTime TIMESTAMP WITH TIMEZONE

안타깝게도 아직 Java8에서는 새로운 날짜 및 시간 관련 API를 위해 JDBC의 날짜관련 클래스들을 직접 사용할 순 없다. 대신 java.sql 패키지의 날짜 및 시간 관련 클래스들에 java.time패키지에 대응하는 메소드가 추가되었다.

LocalDate today = LocalDate.now();
Date date = Date.valueOf(today);
LocalDate localDate = date.toLocalDate();

LocalTime currentTime = LocalTime.now();
Time time = Time.valueOf(currentTime);
LocalTime localTime = time.toLocalTime();

LocalDateTime now = LocalDateTime.now();
Timestamp timestamp = Timestamp.valueOf(now);
LocalDateTime localDateTime = timestamp.toLocalDateTime();

Instant instant = Instant.now();
Timestamp timestampFromInstant = Timestamp.from(instant);
Instant intantFromTimestamp = timestampFromInstant.toInstant();




댓글
공지사항
최근에 올라온 글
링크
«   2024/05   »
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 31
글 보관함