본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Java(자바)

Java 매우 쉬운 날짜 사용 (LocalDate, Java 1.8 date), Java 현재 날짜

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 12. 16.

 

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 패키지에는 위 언급한 내용보다 다양한 기능이 존재하니 한번 찾아보시는 것을 추천드립니다!

 

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글