개발하다가 데이터의 상태값과 시간을 기준으로 상태값이 정상인지 어떻게 찾을지 구글링 중 자바 8부터 제공되는 클래스들을 알게되었다.
원래는 Date나 Calender클래스를 Java 8 이전에는 사용했었다. 그런데 마침 개발환경 Java 버전이 8이라 이번에 사용해보고 블로그에 간단히 정리해보려고 한다
1 종류
1 LocalDateTime
2 LocalDate
3 LocalTime
4 ZonedDateTime
1 ~ 3은 이름에서 알 수 있듯이 시스템 기준 Date / Time 을 말한다.
4 ZonedDateTime은 LocalDateTime + 타임존/시차를 말한다. 따라서 우리나라보다는 미국, 캐나다과 같이 summer time이 있는 국가에 제공되는 서비스를 개발할때 고려하게 되는 부분이라고 생각된다.
설명이 잘되어 있는 링크: https://www.daleseo.com/java8-zoned-date-time/
매우매우 간단하지만 바로 간단한 사용예시를 보면 아래와 같다.
// Date + Time 표현
LocalDateTime localDateTime = LocalDateTime.now();
System.out.println("localDateTime: " + localDateTime);
// localDateTime: 2021-08-16T23:09:09.639491
// Date 표현
LocalDate localDate = LocalDate.now();
System.out.println("localDate: " + localDate);
// localDate: 2021-08-16
// Time 표현
LocalTime localTime = LocalTime.now();
System.out.println("localTime: " + localTime);
// localTime: 23:09:09.640090
// 지역 Date + Time 표현
ZonedDateTime zoneDataTime = ZonedDateTime.now();
System.out.println("zoneDataTime: " + zoneDataTime);
// zoneDataTime: 2021-08-16T23:09:09.640717+09:00[Asia/Seoul]
2 String 데이터를 시간 클래스로 통일
시간 비교를 하기 전 다루게 될 시간 표현을 하나로 통일이 필요하다.
바로 예시로 설명하면 String을 LocalDateTime 로 변경하는 방법은 아래와 같다.
// YYYY-MM-DD HH:MM:SS 포맷 String을 localDateTime으로 표현
LocalDateTime localTime = LocalDateTime.parse("2021-08-16 10:30:12",
DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println("YYYY-MM-DD HH:MM:SS localTime: " + localTime);
// 2021-08-16T10:30:12
// YYYYMMDDHHMMSS.uuuuuu 포맷 String을 localDateTime으로 표현
LocalDateTime localTime2 = LocalDateTime.parse("20210816103012.123",
DateTimeFormatter.ofPattern("yyyyMMddHHmmss.SSS"));
System.out.println("YYYYMMDDHHMMSS.uuuuuu localTime: " + localTime2 );
// 2021-08-16T10:30:12.123
추가로 예시에서 분이나 년도를 내 마음대로 대문자나 소문자로 바꾸려고 했다. 왜냐하면 내가 사용하려던 시간은 mariadb의 now() 결과 였기 때문에 YYYY-MM-DD HH:MM:SS 또는 YYYYMMDDHHMMSS.uuuuuu 형태를 원해서 통일 시키려고 했다.
그런데 대소문자도 정해진 규칙이 있었다.
https://docs.oracle.com/javase/8/docs/api/java/time/format/DateTimeFormatter.html
위 링크를 표현 Formatter로 규칙이 어떤 것들이 있는지 상세히 알려준다
더 깔끔한 형태인 Predefined Formatter도 있어서 사용하고 싶었지만 맞는 부분이 없었다
외에도 클래스에서 다양한 메서드들을 제공한다.
클래스에서 제공하는 추가 예시들을 알려주시는 참고 링크들
https://codechacha.com/ko/java-compare-date-and-time/
https://krksap.tistory.com/1158
https://java119.tistory.com/52
3 시간/날짜 연산
개발할때 상태값이 변한 시간 기준으로 비교하는 작업이 있기 때문에 연산하는 방법도 간단히 정리했당.
년/월/일/시간 등등 함수로 제공되는데 바로 예시를 들면 아래와 같다.
LocalDateTime localDateTime = LocalDateTime.parse("2021-08-16T12:10:00.6");
LocalDateTime plusTime = localDateTime
.plusDays(1)
.plusHours(2)
.plusMinutes(10);
System.out.println("Changed localDateTime: " + plusTime);
// 출력: 2021-08-17T14:20:00.600
// 1일 2시간 10분이 지난 결과 출력
plus가 제공되는걸 보면 minus도 있는것을 확인할 수 있다. 외에도 다양한 메서드가 제공된다.
'Java' 카테고리의 다른 글
static, final, static final 특징 (0) | 2022.08.20 |
---|---|
PATH, CLASSPATH, BUILDPATH에 대해 (0) | 2021.12.29 |
[Java] 예외 처리 - custom exception (0) | 2021.09.22 |
[Java] 예외처리 시 주의 팁 (0) | 2021.09.19 |
eclipse - workspace, project, package, class (0) | 2021.01.07 |