JavaScript, jQuery, Java

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

보리하늘 2019. 4. 10. 09:37
반응형


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
반응형