Java에서 날짜와 관련된 기능을 사용하려면 Date 클래스, Calendar 클래스, SimpleDateFormat 클래스등 이러한 클래스를 사용해서 계산하였습니다.
물론 위 클래스들은 자바 1.8이 나오기 전 까지 날짜와 관련된 대표적인 클래스로 사용 되었습니다.
단점으로는 복잡(?)하고 코드가 매우 길어지는 점이 있지 않았나 싶습니다.
그러다 Java가 1.8 로 넘어오면서 날짜 관련된 기능이 매우 쉽게 사용 할 수 있도록 java.time 패키지에 다양한 클래스가 추가가 되었습니다.
그러면서 날짜 계산과 관련하여 복잡하게 만들던 기능을 쉽게 구현 가능하도록 지원 해 주고 있습니다.
이제부터 간략하게 대표적인 기능을 살펴보겠습니다.
1. 년월일시분초를 관리하는 LocalDateTime
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class JavaLocalDateExample {
public static void main(String[] args) {
LocalDateTime today = LocalDateTime.now(); //현재 년월일시분초를 계산!
System.out.println(today);
}
}
년, 월, 일, 시, 분, 초 를 구하려면 위의 저 LocadDateTime 클래스를 사용하면 쉽게 가능 합니다.
출력해보면 UTC 형태의 타입의 데이터를 반환하는 것을 볼 수 있습니다.
단순히 저 기능만 가지고도 훌륭하다고(?) 생각했는데..심지어 산술 및 날짜형태까지 지정 할 수있습니다!
아래 샘플코드에 내용을 확인하여 주세요.
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class JavaLocalDateExample {
public static void main(String[] args) {
LocalDateTime today = LocalDateTime.now(); //현재 년월일시분초를 구합니다.
today = today.plusDays(1);
System.out.println("일 추가 : "+today);
today = today.plusMonths(1);
System.out.println("월 추가 : "+today);
today = today.plusSeconds(1000);
System.out.println("초 추가 : "+today);
}
}
와..단순히 메소드 호출만으로 날짜가 계산되는 것을 볼 수 있습니다. 메소드 이름도 매우 직관적이네요.
일자를 빼는 것은 minus 라는 메소드가 담당 하며 또한 포맷변경까지도 가능 합니다.
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class JavaLocalDateExample {
public static void main(String[] args) {
LocalDateTime today = LocalDateTime.now();
today = today.plusDays(1);
System.out.println("일 추가 : "+today);
today = today.plusMonths(1);
System.out.println("월 추가 : "+today);
today = today.plusSeconds(1000);
System.out.println("초 추가 : "+today);
/** 이런식으로 계산도 가능합니다! **/
today = today.minusDays(1);
System.out.println("일 빼기 : "+today);
today = today.minusMonths(1);
System.out.println("월 빼기 : "+today);
today = today.minusSeconds(1);
System.out.println("초 빼기 : "+today);
//날짜 형태(yyyy-MM-dd HH:mm:ss) 바꾸기
String formatChangeDay = today.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println("포맷 변경 : " + formatChangeDay);
}
}
여기에 일반 문자열 파싱까지 할 수 있습니다.
마찬가지로 파싱된 데이터도 일자 더하기, 빼기, 형태변환 도 가능합니다.
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class JavaLocalDateExample {
public static void main(String[] args) {
LocalDateTime parse = LocalDateTime.parse("2019-12-12 12:12:02", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println("문자를 날짜형태 파싱, 형태 변환 : "+parse);
parse = parse.plusDays(1);
System.out.println("일 더하기 : "+parse);
parse = parse.plusMonths(1);
System.out.println("월 더하기 : "+parse);
parse = parse.plusSeconds(1000);
System.out.println("초 더하기 : "+parse);
}
}
그렇다면 비교 기능은 어떻게 하는 것 일까요?
간단한 비교는 아래처럼 쉽게 할 수 있습니다.
마찬가지로 메소드 이름이 쉽게 표현되어 사용하는 데 어려움이 없습니다. : )
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
public class JavaLocalDateExample {
public static void main(String[] args) {
LocalDateTime now = LocalDateTime.now(); //2019-12-16 16:36:00 이다.
LocalDateTime before = LocalDateTime.parse("2019-12-10 11:00:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
System.out.println("now가 befor보다 얼마나 큰가 : "+now.compareTo(before));
System.out.println("now가 before를 지났습니까 : "+now.isAfter(before));
System.out.println("now가 before를 지나지 않았습니까 : "+now.isBefore(before));
System.out.println("now가 before와 일치합니까 : "+now.isEqual(before));
}
}
위 내용을 출력하면 아래처럼 멋진 결과를 만날 수 있습니다.
또한 java.time 패키지에는 위 형태와 비슷한 클래스가 있는데, 호출하는 방법 및 사용법도 거의 동일 합니다.
년월과 관련된 클래스, 년월일에 관련된 클래스 및 년월일시분초에 관련된 클래스 등등..
정말 개발자에게는 너무나도 고마운 기능 입니다.
* LocalDate
-> 년월일 데이터를 쉽게 다룰 수 있는 클래스
-> yyyy-MM-dd 로 데이터를 볼 수 있다. 위에 사용하는 대부분의 메소드를 사용 할 수 있습니다.
* YearMonth
-> 년월 데이터를 쉽게 다룰 수 있는 클래스
-> yyyy-MM 로 데이터를 볼 수 있다. 위에 사용하는 대부분의 메소드를 사용 할 수 있습니다.
* MonthDay
-> 월일 데이터를 쉽게 다룰 수 있는 클래스
-> -MM-dd 로 데이터를 볼 수 있다. 위에 사용하는 대부분의 메소드를 사용 할 수 있습니다.
위 클래스를 사용한 간단한 예제 입니다.
import java.time.LocalDate;
import java.time.MonthDay;
import java.time.Year;
import java.time.YearMonth;
import java.time.format.DateTimeFormatter;
public class JavaLocalDateExample {
public static void main(String[] args) {
LocalDate date = LocalDate.now();
System.out.println(date);
date = date.plusDays(1);
System.out.println("일 추가 : "+date);
date = date.plusMonths(1);
System.out.println("월 추가 : "+date);
LocalDate parseDate = LocalDate.parse("2019-11-12");
System.out.println("문자열 파싱 : "+parseDate);
YearMonth ym = YearMonth.now();
ym = ym.minusMonths(1);
System.out.println("월 빼기 : "+ym);
ym = ym.minusYears(1);
System.out.println("년 빼기 : "+ym);
Year year = Year.now();
System.out.println("현재 년도 : "+year);
MonthDay month = MonthDay.now();
System.out.println(month.format(DateTimeFormatter.ofPattern("MM-dd")));
}
}
자바 1.8에서 쉽게 사용 가능한 날짜기능!
java.time 패키지에는 위 언급한 내용보다 다양한 기능이 존재하니 한번 찾아보시는 것을 추천드립니다!
'Java(자바)' 카테고리의 다른 글
Java Mqtt 연동(MqttClient, MqttCallback, org.eclipse.paho) (8) | 2020.03.05 |
---|---|
Java excel poi 메모리 누수 대비(memory leak), 자바 xlsx만들기, Java xlsx 만들기 (6) | 2019.12.19 |
JAVA sftp 파일전송, 자바 sftp 파일전송 (JSch 파일전송) (2) | 2019.12.13 |
Java CSV 한글 깨짐, Java make csv file, 자바 CSV 파일 깨짐 (2) | 2019.11.11 |
리눅스 jar파일 업데이트(jar -uvf, jar update file) (0) | 2019.10.24 |
댓글