java8에서 추가된 time package 에 있는 api 를 이용해 날짜나 시간을 쉽게 다룰수 있습니다. 이전에 사용하던 util.DateSimpleDateFormatter은 직관적이지 않고 Thread safe 하지 않는 단점이 있었습니다. time package에서 LocalDate, LocalTime, LocalDateTime, ZonedDateTime, Period, Duration 와같은 api 를 이용해 날짜 시간을 다루어 보겠습니다.

LocalDate

시간없이 날짜만을 다루는 api입니다. yyyy-MM-dd 형식으로 날짜를 나타냅니다.

아래와 같이 현재날쨔나 특정날짜를 now(), of(), parse() method를 통해 직관적인 방법으로 사용 가능합니다.

System.out.println(LocalDate.now()); // 2018-08-28

System.out.println(LocalDate.parse("2018-05-05")); //2018-05-05
System.out.println(LocalDate.parse("2018/08/06", DateTimeFormatter.ofPattern("yyyy/MM/dd"))); //2018-08-06

System.out.println(LocalDate.of(2018, 8, 28)); // 2018-08-28
System.out.println(LocalDate.of(2018, Month.AUGUST, 28)); // 2018-08-28

//2018 년의 300 번째 날짜
System.out.println(LocalDate.ofYearDay(2018, 300)); //2018-10-27

날짜의 연산도 가능합니다. plus, minus method를 이용해 LocalDate시간 이전 또는 이후의 날짜를 다룰 수 있습니다.

public static LocalDate currentDate(){
    return LocalDate.now();
}
    currentDate()
    .plus(1, ChronoUnit.DAYS);

    currentDate()
    .plusMonths(2);

    currentDate()
    .minus(2, ChronoUnit.MONTHS));

    currentDate()
    .minusYears(3);

    rintln(current.isAfter(previous)); //true
	println(current.isBefore(previous); //false)

윤년 여부 판단이나 날짜 연,월,일 추출 method 입니다.

LocalDate.now().isLeapYear(); //false
LocalDate.now().getDayOfWeek(); //TUESDAY
LocalDate.now().getDayOfMonth(); //28
LocalDate.now().getYear(); //2018
LocalDate.now().getMonth(); //AUGUST

날짜 차이 계산 방법 입니다.


LocalDate date1 = LocalDate.of(2017, 11, 20);
LocalDate date2 = LocalDate.of(2018, 10, 20);
		
Period p = date1.until(date2);

LocalTime

LocalTime은 시간을 다룹니다. hh:mm:ss 형식의 시간 입니다. 사용 방식은 LocalDate와 비슷합니다. now, of, parse method 를 통해 시간을 생성합니다.

LocalTime.now();
LocalTime.of(12,30,30);
LocalTime.parse("11:20");

이전 시간과, 이후 시간을 처리합니다.

LocalTime.now().plus(30, ChronoUnit.MINUTES)
LocalTime.now().plusHours(1);

LocalTime.of(15, 30, 30).minusSeconds(300L);
LocalTime.of(15, 30, 30).minus(10, ChronoUnit.HOURS);

LocalTime.now().getHour();
LocalTime.now().getMinute();
LocalTime.now().getNano();

시간 차이를 계산하는 방법입니다.


ChronoUnit MINUTES = ChronoUnit.MINUTES;
		
LocalTime time1 = LocalTime.of(11, 1);
LocalTime time2 = LocalTime.of(12, 30);
		
Long amount = time1.until(time2, MINUTES); // 89
Long amount2 = MINUTES.between(time1, time2); // 89

LocalDateTime

날짜와 시간 모두 필요할때 사용 합니다.

LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); //2018-08-28 17:20:54
LocalDateTime.now(); //2018-08-28T17:20:54.419

LocalDateTime.of(2018, 8, 22, 15, 10);
LocalDate date = LocalDateTime.of(2018, 8, 22, 15, 10).toLocalDate();
LocalTime time = LocalDateTime.of(2018, 8, 22, 15, 10).toLocalTime();

날짜 시간을 교체 합니다.

LocalDateTime.now().withYear(2019)
					.withMonth(8)
					.withDayOfMonth(2)
					.withHour(14)
					.withMinute(30)
					.withSecond(2);

출처