# Table of Contents

# Java 시간, 날씨 처리하기

Java에서는 버전에 따라 날짜와 시간을 처리하는 방식이 다르다.

Java 8 이전

  • java.util.Date
  • java.util.Calander

Java 8 이후

  • java.time.LocalDate
  • java.time.LocalTime
  • java.time.LocalDateTime

# Java 8 이전

# Date

시스템의 현재 시간은 다음과 같이 알아낼 수 있다.

long now = System.currentTimeMillis();
System.out.println(now);        // 1640209553887

Date date = new Date(now);
System.out.println(date);       // Thu Dec 23 06:45:53 KST 2021

# SimpleDateFormat

SimpleDateFormat클래스를 사용하면 날짜를 포맷팅할 수 있다.

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault());
String str = dateFormat.format(date);
System.out.println(str);        

# Java 9 이후

Java 8 이상에서는 LocalDate, LocalTime, LocalDate클래스를 사용한다.

# LocalDate

LocalDate는 날짜를 다루는데 사용한다.

현재 날짜 정보는 다음과 같이 얻을 수 있다.

LocalDate currentDate = LocalDate.now();
System.out.println(currentDate);    // 2018-04-04

특정 날짜 정보를 담은 LocalDate객체는 다음과 같이 생성한다.

LocalDate targetDate = LocalDate.of(2018, 11, 12);
System.out.println(targetDate);     // 2018-11-12

Period클래스를 사용하면 두 날짜 사이의 기간을 취급할 수 있다.

Period period = Period.between(targetDate, currentDate);
System.out.println(period.getYears());      // 3
System.out.println(period.getMonths());     // 1
System.out.println(period.getDays());       // 11

# LocalTime

LocalTime은 시간을 다루는데 사용한다.

현재 시간 정보는 다음과 같이 얻을 수 있다.

LocalTime currentTime = LocalTime.now();
System.out.println(currentTime);           // 06:58:51.952

특정 시간 정보를 담은 LocalTime객체는 다음과 같이 생성한다.

LocalTime targetTime = LocalTime.of(3, 22, 44, 2);
System.out.println(targetTime);           // 03:22:44.000000002

Duration클래스를 사용하면 두 시간 사이의 기간을 계산할 수 있다.

Duration duration = Duration.between(targetTime, currentTime);
System.out.println(duration.getSeconds());      // 13088

# LocalDateTime

날짜와 시간을 함께 취급할 때는 LocalDateTime클래스를 사용한다. 현재 날짜 시간 정보는 다음과 같이 얻을 수 있다.

LocalDateTime currentDateTime = LocalDateTime.now();
System.out.println(currentDateTime);    // 2018-04-04T11:46:46.831

특정 시간 정보를 담은 LocalDateTime객체는 다음과 같이 생성한다.

LocalDateTime targetDateTime = LocalDateTime.of(2019, 10, 1, 12, 30, 22, 3333);
System.out.println(targetDateTime);     // 2019-10-01T12:30:22.000003333

# DateTimeFormatter

DateTimeFormatter클래스를 사용하면 LocalDateTime객체를 포맷팅할 수 있다.

LocalDateTime time = LocalDateTime.of(2019, 10, 1, 12, 30, 22, 3333);
System.out.println(time);     // 2019-10-01T12:30:22.000003333

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss");
System.out.println(time.format(formatter));     // 2019-10-01 12:30:22

System.out.println(time.format(DateTimeFormatter.ISO_DATE));    // 2019-10-01

# 문자열을 LocalDateTime으로 변환하기

LocalDateTime.parse()를 사용하면 문자열을 LocalDateTime 객체로 변환할 수 있다.

String dateTimeStr = "2020-12-24T03:16:11.000Z";
LocalDateTime localDateTime = LocalDateTime.parse(dateTimeStr, DateTimeFormatter.ISO_DATE_TIME);
System.out.println(localDateTime);  // 2020-12-24T03:16:11