일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- vuejs
- programmers
- Oracle
- hibernate
- superBuilder
- Di
- k8s
- CI/CD
- CI
- 코딩테스트연습
- ORM
- CKA
- IntelliJ
- map
- JPA
- DevOps
- Spring
- 해시맵
- 자바
- SpringMVC
- 알고리즘
- Kubernetes
- 뷰
- java
- Vue
- builder-pattern
- dabase
- docker
- cd
- 프로그래머스
- Today
- Total
문홍의 공부장
[Java 8] java.time 패키지: Java LocalDate, LocalDateTime 클래스 사용법 (java.time package in Java SE8) 본문
[Java 8] java.time 패키지: Java LocalDate, LocalDateTime 클래스 사용법 (java.time package in Java SE8)
moonong 2020. 1. 27. 21:35java.time 패키지
이전에 공부하였다시피 Date
클래스를 보완하기 위해 Calendar
클래스가 탄생했다. 하지만 Calendar 클래스에도 여전히 복잡하거나, 직관적이지 못한 (월이 0부터 시작한다는 등) 단점은 남아있다. 이를 보완하기 위해 JDK1.8부터 java.time 패키지가 추가되었다.
java.time 패키지의 클래스는, 변경 가능한 기존 Calendar 클래스와 달리 불변(immutable) 이다. 이에 멀티 쓰레드 환경에서도 안전하게 객체에 접근할 수 있다.
Calendar 클래스에서는 날짜와 시간을 하나로 표현하였다면, java.time 패키지에서는 날짜와 시간을 별도의 클래스로 분리해 놓았다. (LocalDateTime
클래스 = LocalDate
클래스 + LocalTime
클래스)
또한, 시간대를 다루는 ZonedDateTime, 날짜 간의 간격을 표현하는 Period, 시간의 차이를 표현하는 Duration 클래스가 존재한다.
java.time 패키지에 속한 클래스는, 기본적으로 now()
와 of()
메소드를 사용하여 객체를 생성한다.
- .now() : 현재 날짜와 시간을 저장하는 객체 생성
- .of() : 사용자 정의의 날짜/시간 객체 생성 (해당 필드 값을 입력)
LocalDate, LocalTime 클래스
날짜를 표현하는 LocalDate 클래스와, 시간을 표현하는 LocalTime 클래스가 가장 기본이 된다. now(), of() 로 객체를 생성하며, parse() 메소드를 이용하여 문자열을 날짜/시간으로 파싱할 수 있다.
LocalDateTime ldt = LocalDateTime.now();
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.of(10, 55, 26);
LocalDate date3 = LocalDate.parse("2020-12-12");
출력값:
2020-01-27T21:16:29.040
2020-01-27
10:55:26
특정 필드의 값을 가져올 때에는 .get()
, .getXXX()
메소드를 이용한다. Calendar 클래스와 달리 월은 1월부터 1 - 12, 요일은 월요일부터 1 - 7의 값을 가진다.
ChronoField
에 정의된 상수를 파라미터로 하여 get() 메소드를 호출할 경우, 해당 클래스가 지원하는 필드여야만 한다. 그렇지 않는다면 UnsupportedTemporalTypeException 이 발생한다. (아래 예시에서 date 객체를 이용하여 시간 range 를 알 수 없다. )
date.getMonth();
date.getMonthValue();
date.get(ChronoField.DAY_OF_WEEK); // 1= 월요일
ChronoField.CLOCK_HOUR_OF_DAY.range();
출력값:
JANUARY
1
1
1 - 24
특정 필드 값을 변경한다면, with()
, plus()
, minus()
메소드를 사용하면 된다.
with() 를 사용하여 직접 필드값을 수정하거나, plus(), minus() 를 이용하여 특정 필드에 값을 더하거나 뺄 수 있다.
'개발 > Java' 카테고리의 다른 글
[Java] 추상클래스와 인터페이스의 공통점과 차이점 (0) | 2020.02.08 |
---|---|
[Java] 정규표현식(Regular Expression) : 자주 쓰는 정규식 정리(휴대전화, 이메일, 비밀번호 등) (1) | 2020.02.07 |
Java SimpleDateFormat 으로 날짜/시간/요일 표현하기 (0) | 2020.01.26 |
Java DecimalFormat으로 세 자리마다 콤마(,) 찍기, 소수점 자리수 표시하기 (Decimalformat in java) (0) | 2020.01.26 |
Calendar 클래스의 개념과 예제 (Calendar class in java) (0) | 2020.01.16 |