반응형
    
    
    
  
기본적으로 자바에서는 날짜와 시간을 다루기 위해서 java.util.Date와 java.util.Calendar 클래스를 사용했지만, 사용에 불편함이 많아 JDK8 이후부터는 java.time 패키지의 클래스로 많은 부분이 대체되었다.
[ 날짜 및 시간 구하기 ]
LocalDate, LocalTime, LocalDateTime
가장 기본이 되는 클래스들로 각각 날짜, 시간, 날짜와 시간을 다루는 클래스이다.
new 키워드를 통해 직접적인 인스턴스 생성이 불가능하고 static 메서드를 이용하는 방식을 사용한다.
- now() : 현재 날짜, 시간에 기반하여 인스턴스 생성
- of() : 인자로 전달되는 특정 날짜, 시간에 기반한 인스턴스 생성
- atTime() : 특정 시간정보에 기반해 LocalDateTime 인스턴스 생성
예제를 한 번 만들어보도록 하자.
public class DateTimeTest1 {
    public static void main(String[] args) {
        LocalDate d1 = LocalDate.now();
        LocalDate d2 = LocalDate.of(2019, 10, 10);
        LocalTime t1 = LocalTime.now();
        LocalTime t2 = LocalTime.of(7, 20, 20);
        System.out.printf("LocalDate.now() : %s\n", d1);
        System.out.printf("LocalDate.of(2019,10,10) : %s\n", d2);
        System.out.printf("LocalTime.now() : %s\n", t1);
        System.out.printf("LocalTime.of(7,20,20) : %s\n", t2);
        LocalDateTime dt1 = LocalDate.now().atTime(LocalTime.MIDNIGHT);
        LocalDateTime dt2 = LocalDate.now().atTime(LocalTime.MAX);
        System.out.printf("LocalDate.now().atTime(LocalTime.MIDNIGHT) : %s\n", dt1);
        System.out.printf("LocalDate.now().atTime(LocalTime.MAX) : %s\n", dt2);
    }
}

- 별도의 형식을 지정하지 않았기 때문에 해당 객체에서 제공하는 기본 형식으로 출력 된다.
- now()는 현재 날짜 및 시간, of()는 특정 날짜 및 시간 객체 생성
- LocalDate에 Time을 추가하려면 atTime()를 사용하며 LocalDateTime이 리턴됨
- LocalTime.MIDNIGHT, MAX, MIN, NOON 등 사용 가능.
[ 형식 지정하기 ]
java.time.format 패키지의 클래스들이 사용되며 대표적인 것은 DateTimeFormatter 클래스이다.
- ofLocalizedDate() : 현재 지역(국가)에 따른 기본 표기 형식으로 출력
- ofPattern() : 인자로 특정 포맷을 지정
[ 날짜와 시간차이 계산하기 ]
보통 날짜와 시간이 많이 사용되는 부분은 월별로 데이터를 관리하거나 특정 기간의 데이터를 조회하거나 하는 등의 작업이다.
- Period : 날짜 사이의 간격을 년/월/일 단위로 나타낸다.
- Duration : 시간 사이의 간격을 나노초 단위로 나타낸다.
예제를 한 번 만들어보도록 하자.
public class DateTimeTest2 {
    public static void main(String[] args) {
        LocalDateTime dt1 = LocalDateTime.now();
        DateTimeFormatter dtf = DateTimeFormatter.ofLocalizedDateTime(FormatStyle.SHORT);
        System.out.println(dtf.format(dt1));
        System.out.println(dt1.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")));
        System.out.println(dt1.plusDays(2));
        System.out.println(LocalTime.now().minusHours(3));
        System.out.println(Duration.ofMinutes(10).getSeconds());
        LocalTime start = LocalTime.of(11, 40, 50);
        LocalTime end = LocalTime.of(11, 42, 50);
        Duration duration = Duration.between(start, end);
        System.out.println("Seconds: " + duration.getSeconds());
        LocalDate startDate = LocalDate.of(1950, 9, 1);
        LocalDate endDate = LocalDate.of(2010, 9, 2);
        Period period = Period.between(startDate, endDate);
        System.out.println("Years: " + period.getYears());
        System.out.println("Months: " + period.getMonths());
        System.out.println("Days: " + period.getDays());
    }
}
- Duration을 통해 시간 차이를 초단위로 계산
- Period를 이용해 연/월/일 차이를 계산
반응형
    
    
    
  'Programming > Java' 카테고리의 다른 글
| [Java] 참조형식과 호출되는 메서드의 관계 (0) | 2020.07.04 | 
|---|---|
| [Java] Log4j에 대해 알아보자 (0) | 2019.11.11 | 
| [JAVA] TCP 통신 소켓 프로그래밍(양방향 통신) (0) | 2019.08.02 | 
| [JAVA] TCP 통신 소켓 프로그래밍(단방향 통신) (0) | 2019.08.02 | 
| [JAVA] public class & class 차이 (5) | 2019.04.02 | 
![[JAVA] 날짜와 시간 다루기(java.time)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdna%2Fk6TW7%2FbtqHiL8XdMl%2FAAAAAAAAAAAAAAAAAAAAAEdJUsXWXAkT-4BmCNzUQiA73d6EQ__aNFv_0dW59GHj%2Fimg.png%3Fcredential%3DyqXZFxpELC7KVnFOS48ylbz2pIh7yKj8%26expires%3D1764514799%26allow_ip%3D%26allow_referer%3D%26signature%3DZIOjN9fyrIJqTWTWIgJhQ%252BdGb40%253D)