본문 바로가기
JavaScript, jQuery, Java

JAVA8 LocalDate로 현재, 과거 사이 랜덤 날짜 구하기

by 보리하늘 2019. 4. 10.
반응형


API를 만들면서 날짜 데이터를 요리해야 하는 일이 생겼다.
현재로부터 몇개월 전에 생성되었고, 생성 된 날짜로부터 얼마까지의 기간동안 랜덤으로 날짜를 생성

평소 날짜 관련하여 다루지 않아 잘 알지 못해 가장 기본이라고 생각했던 Calendar와 Date 클래스를 이용해 만들고 있던중에
좋은 글을 읽게 되었다.

"아직도 Calendar, Date 사용하니?”라는 타이틀이 강력하게 다가왔다..ㅎ..

자바에서 Calendar와 Date는 처음 공부할 때나 단순하게 표현해야할 때 사용할 수 있지만
단점이 극명한 클래스라 사용하지 않는게 좋다고 한다.

어떤 문제점이 있는지는 네이버 D2의 글에서 잘 설명해준다.


* 직접 사용 코드

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//1. 현재 날짜
LocalDate now = LocalDate.now();
 
//2. 등록 날짜
//LocalDate.of() : 날짜 셋팅
LocalDate join = LocalDate.of(Integer.parseInt(joinDate.substring(04)), Integer.parseInt(joinDate.substring(46)), Integer.parseInt(joinDate.substring(6)));
 
//3. 현재 날짜 - 등록 날짜 = 개월
long month = join.until(now, ChronoUnit.MONTHS);
 
//4. 현재 날짜 - 4개월 전 날짜
LocalDate ago = now.minusMonths(4);
 
//5. 4번 날짜 ~ 등록 날짜 사이의 랜덤 날짜
//toEpochDay() : 기준 시로부터의 일 수(타임 스탬프와 비슷한 개념)
long iRand = random.nextInt(toIntExact(ago.toEpochDay()) - toIntExact(join.toEpochDay()) + 1+ toIntExact(join.toEpochDay());
 
//랜덤 일수(iRand)를 날짜로 변환
LocalDate randDate = LocalDate.ofEpochDay(iRand);
 
//출력을 원하는 포멧으로 변환
randDate.format(DateTimeFormatter.ofPattern("yyyyMM"));
  cs




* 참고


728x90
반응형

댓글