Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- Elk
- libuv
- AWS
- r
- socket
- Heap
- git
- Java
- mybatis
- javascript
- html
- cache
- NoSQL
- github
- Static
- spring
- VCS
- reactor
- mongodb
- effective
- 데이터통신
- redis
- Lombok
- 네트워크
- ajax
- HTTP
- nodejs
- reactive
- Linux
- network
Archives
- Today
- Total
빨간색코딩
time 패키지 (util.Date와 util.Calendar의 문제, LocalDate, LocalDateTime, DateTimeFormatter) 본문
Java
time 패키지 (util.Date와 util.Calendar의 문제, LocalDate, LocalDateTime, DateTimeFormatter)
빨간색소년 2018. 2. 25. 22:33참조문서
- http://d2.naver.com/helloworld/645609
- https://docs.oracle.com/javase/8/docs/api/java/time/package-frame.html
- http://jekalmin.tistory.com/entry/%EC%9E%90%EB%B0%94-18-%EB%82%A0%EC%A7%9C-%EC%A0%95%EB%A6%AC
jdk 1.8 부터 날짜 API 가 좋아졌다고 한다. java.util.Date 와 Calendar 를 사용했을 때도 크게 불편한 건 못느꼈지만(불편했다고하면 0부터 시작한다는거?ㅋㅋ) 새로운 java.time 패키지를 알아보자.
1. 이전 방식의 문제들(util.Date, util.Calendar)
찾아보니까 문제가 많군..?
- 복잡한 날짜 계산 : 그레고리력에서 율리우스력을 적용하며 발생한 오차날짜 생략, 서머타임 등등 뭐 이벤트 터지면 시간대가 비는 등등..
- 독특한 시간관리 : 시간대 데이터베이스에서 관리, OS와 별도
- 불변 객체가 아님
- 상수필드 남용
- 1월이 0부터 시작함
- 일관성 없는 요일 상수
- Calendar.get(Calendar.DAYOFWEEK) : 일요일은 1
- Date.getDay() : 일요일은 0
- 날짜 생성은 Date 객체, 날짜 연산은 Canlender 객체, 최종 결과는 다시 Date객체
이를 해결하기 위한 노력들
- joda-time 같은 라이브러리 들이 등장
- jdk 1.8 부터는 새로운 time 패키지로 해결
2. java.time 패키지
하루를 86400초만 계산한다. 공식시간만을 사용한다. 아래는 대표적인 클래스와 메소드들이다.
- Instant : 1970년 1월 1일부터 시간을 nanosecond 단위로 센다.
- LocalDate : 년월일까지 표현
- LocalDateTime : 년월일시분초 까지 표현
- LocalTime : 시분초만 표현
- Period : 두 날짜 사이의 년월일로 표현되는 기간 (LocalDate 사용)
- Duration : 두 시간 사이에 일시분초로 표현되는 기간 (Instant 사용)
- ChronoUnit : 한가지의 단위를 표현하기 위한 클래스 (년, 월, 일, 시, 분, 초 등)
- DayOfWeek : 요일
- ZonedDateTime : 구역에 해당하는 년, 월, 일, 시, 분, 초, 나노초 표현
공통적으로 많이 쓰는 메소드들
- now() : 지금을 클래스에 맞게 반환
- of(파라미터들) : 이 날짜를 클래스에 맞게 반환
- plus, minus : 해당 클래스에 맞게 날짜 증감
- ex. LocalDate.now().plusDays(1) : 내일 날짜
- format(formatter) : formatter를 사용하여이 날짜의 형식을 지정, 변환
- parse(String, formatter) : 문자열을 formatter 형식으로 변환한다. formatter를 안쓰면 기본형식으로 변환
3. java.time.format 패키지
time의 포맷변환 등으로 많이 쓰인다. java.time 패키지의 클래스들을 지원한다. 미리 정의된 Formatter 를 사용할 수도 있고, locale 종속 Formatter, 커스텀 Formatter 등을 사용할 수 있다.
- DateTimeFormatter
변환 예제
- LocalDate -> String :
LocalDate.now().format(DateTimeFormatter.ISO_LOCAL_DATE);
- LocalDateTime -> String :
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss", Locale.KOREA));
- String -> LocalDate :
LocalDate.parse("2018-02-21");
- String -> LocalDateTime :
LocalDateTime.parse("2018-02-21 16:30:00", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
'Java' 카테고리의 다른 글
tomcat에서 PUT, DELETE request body 파싱 문제 (0) | 2018.04.01 |
---|---|
apache commons (StringUtils) (0) | 2018.02.25 |
enum (이전 방식, 개념, 동작방식, 사용예제, 관련메소드) (1) | 2018.01.12 |
서블릿 (servlet, jsp와 차이점, 컨테이너, 동작원리, web.xml) (0) | 2018.01.02 |
static 키워드 (메모리 상 위치, 클래스 변수, 클래스 메소드, static 블록) (0) | 2017.12.29 |
Comments