[Java] LocalDate, LocalTime, LocalDateTime
2021. 4. 3. 13:31ㆍLanguage/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
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 |