[Java] LocalDate, LocalTime, LocalDateTime

2021. 4. 3. 13:31Language/Java

1. Date

Java의 기본 SDK에서 날짜와 시간을 다루는 java.util.Date 클래스와 java.util.Calendar 클래스는 사용하기 불편하기 때문에 JDK 8에서는 더욱 개선된 API를 제공한다. 기존의 Date, Calendar 클래스의 불편한 점은 다음과 같다.

  • 불변 객체가 아니므로 Set으로 변경이 가능하기에 위험
  • 상수 필드 남용 - Calendar.add(Calendar.SECOND, 2);
  • 불편한 월 지정 - 1월을 0으로 표현
  • 일관성 없는 요일 상수 - 일요일이 0이거나 1인 경우가 존재
  • Date, Calendar 객체의 역할 분담
  • 기타 하위 클래스의 문제

 

 

 

2. LocalDate, LocalTime, LocalDateTime

LocalDate, LocalTime, LocalDateTime은 Joda time과 비슷하게 설계되었다.

- LocalDate

LocalDate currentDate = LocalDate.now();
LocalDate myDate = LocalDate.of(int year, int month, int datOfMonth);

// 해
getYear();

// Month 열거값 (JANUARY, FEBRUARY)
getMonth(); 

// Month (1,2,3,...)
getMonthValue();

// 특정 해의 몇 번째 일
getDayOfYear();

// 특정 월의 몇 번째 일
getDayOfMonth();

// 요일 (MONDAY, TUESDAY,...)
getDateOfWeek();

// 윤년 여부
isLeapYear();

- LocalTime

LocalTime currentTime = LocalTime.now();
LocalTime targetTime = LocalTime.of(int hour, int minute, int second, int nanoOfSecond);

// 시간, 분, 초, 나노초
getHour()
getMinute()
getSecond()
getNano()

- LocalDateTime

LocalDateTime currentDateTime = LocalDateTime.now();
LocalDateTime targetDateTime = LocalDateTime.of(int year, int month, int dayOfMonth, int hour, int minute, int second, int nanoOfSecond);

ZonedDateTime utcDateTime = ZonedDateTime.now(ZoneId.of("UTC"));
ZonedDateTime seoulDateTime = ZonedDateTime.now(ZoneId.of("Asia/Seoul"));

- 형 변환 

String 변환

// LocalDate -> String
LocalDate.of(2020, 12, 12).format(DateTimeFormatter.BASIC_ISO_DATE); // 20201212
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // 2018-07-26 00:42:24

// String -> LocalDate
LocalDate.parse("2002-05-09"); // 2002-05-09
LocalDate.parse("20081004", DateTimeFormatter.BASIC_ISO_DATE); // 2008-10-04
 
// String -> LocalDateTime
LocalDateTime.parse("2007-12-03T10:15:30"); // 2007-12-03T10:15:30
LocalDateTime.parse("2010-11-25 12:30:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); // 2010-11-25T12:30

java.util.Date / java.sql.Date / java.sql.Timestamp 변환

// LocalDate -> java.sql.Date
Date.valueOf(LocalDate.of(2015, 5, 5)); // 2018-07-26

// java.sql.Date -> LocalDate
new Date(System.currentTimeMillis()).toLocalDate(); // 2018-07-26

// LocalDateTime -> java.util.Date
Date.from(LocalDateTime.now().atZone(ZoneId.systemDefault()).toInstant()); //Thu Jul 26 01:00:30 KST 2018

// java.util.Date -> LocalDateTime
LocalDateTime.ofInstant(new Date().toInstant(), ZoneId.systemDefault()); // 2018-07-26T01:16:46.755

// LocalDateTime -> java.sql.Timestamp
Timestamp.valueOf(LocalDateTime.now()); // 2018-07-26 01:06:55.323
   
// java.sql.Timestamp -> LocalDateTime
new Timestamp(System.currentTimeMillis()).toLocalDateTime(); // 2018-07-26T01:20:07.364

LocalDate, LocalDateTime 변환

// LocalDate -> LocalDateTime
LocalDate.now().atTime(2, 30); // 2018-07-26T02:30

// LocalDateTime -> LocalDate
LocalDate.from(LocalDateTime.now()); // 2018-07-26

[참고] d2.naver.com/helloworld/645609

[참고] jeong-pro.tistory.com/163

728x90

'Language > Java' 카테고리의 다른 글

[Java] Java Garbage Collection  (0) 2021.04.22
[Java] JVM, JDK (JRE), JAR vs WAR  (0) 2021.04.22
[Java] 객체지향 5대 원칙 SOLID  (0) 2020.11.02
[Java] 명명 규칙  (0) 2020.07.21