-
[ Android ] D-Day 계산 오류Android 2020. 5. 22. 21:15
CatServant
D-day를 계산하면서 날짜 오류가 발생하였다.
첫 번째 만난 오류는 현재 날짜가 한달 전으로 나오는 오류였다.
알고보니 java 에서는 Calendar.get(Calendar.MONTH) 를 했을 때, 현재 달에서 1달 전으로 나오는 문제가 있어서 이를 고쳐주기 위해서 +1을 해주고 다시 set해서 고쳐주었다.
두 번째 만난 오류는 시간때문에 D-day가 하루씩 차이나는 오류였다.
이를 해결해 주기 위해서는 Calendar의 시간을 모두 clear 해주고 계산하면 시간 때문에 날짜가 차이나는 오류는 해결할 수 있었다.
Code
private String getDday(String targetDay) { int tYear, tMonth, tDay; int dYear, dMonth, dDay; // target day String[] targetSlicing = targetDay.split("-"); dYear = Integer.parseInt(targetSlicing[0]); dMonth = Integer.parseInt(targetSlicing[1]); dDay = Integer.parseInt(targetSlicing[2]); Calendar targetdayCalendar = Calendar.getInstance(); targetdayCalendar.clear(Calendar.HOUR); targetdayCalendar.clear(Calendar.MINUTE); targetdayCalendar.clear(Calendar.SECOND); targetdayCalendar.clear(Calendar.MILLISECOND); targetdayCalendar.set(dYear, dMonth, dDay); // today Calendar todayCalendar = Calendar.getInstance(); todayCalendar.clear(Calendar.HOUR); todayCalendar.clear(Calendar.MINUTE); todayCalendar.clear(Calendar.SECOND); todayCalendar.clear(Calendar.MILLISECOND); tYear = todayCalendar.get(Calendar.YEAR); tMonth = todayCalendar.get(Calendar.MONTH); tDay = todayCalendar.get(Calendar.DAY_OF_MONTH); todayCalendar.set(tYear, tMonth+1, tDay); long dayDiff = todayCalendar.getTimeInMillis() - targetdayCalendar.getTimeInMillis(); // long convert(long sourceDuration, TimeUnit sourceUnit) // : 지정된 단위로 나타내지는 지정된 기간을 해당 단위로 변환합니다. int resultNumber = (int)(Math.floor(TimeUnit.HOURS.convert(dayDiff, TimeUnit.MILLISECONDS)/24f)); if (resultNumber > 0) { return String.format("D+%d", resultNumber); } return String.format("D-%d", resultNumber); }
Method 설명 double ceil(double n) 올림 double floor(double n) 내림 long round(double n) 반올림 Split Error
String[] targetSlicing = targetDay.split("-");
해당 코드에서 targetDay.split(".")으로 바꾸니까 오류가 생겼다.
java.lang.String.split는 regular expressions를 기준으로 동작하는데 regular expression에서 "."은 아무 문자를 넣든 상관 없다는 의미로 작동한다. 그래서 .을 기준으로 나누고 싶다면 targetDay.split("\\.")과 같이 작성해야한다.
출처
'Android' 카테고리의 다른 글
[ Android ] EventBus (0) 2020.06.22 [ Android ] Git-hub 오픈 소스 import 해서 사용하기 (0) 2020.06.18 [ Android ] Fragment Toolbar에서 back button 동작 안 하는 오류 (0) 2020.05.19 [ Android ] 위험 권한 (0) 2020.05.18 [ Android ] 브로드캐스트 수신자 (0) 2020.05.18