본문 바로가기
자바

날짜 며칠 전으로 ...

by 뚜벅초 2017. 5. 6.

-

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// 며칠 전 계산
public static int[] fewDaysAgo(int beforeDay) {
    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.MONTH, +1);
 
    int temp = cal.get(Calendar.DAY_OF_MONTH);
    if (beforeDay < 0 && ((beforeDay + temp) < 1)) {
        cal.add(Calendar.MONTH, -1); // 미리 1달 앞으로 감
        cal.add(Calendar.DAY_OF_MONTH, beforeDay); // 이전 달의 월을 기준으로 계산
        cal.add(Calendar.MONTH, +1); // 8번 계산 후 month -1 되므로 다시 +1
    } else {
        cal.add(Calendar.DAY_OF_MONTH, beforeDay);
    }
 
    int[] result = {cal.get(Calendar.YEAR), cal.get(Calendar.MONTH), cal.get(Calendar.DAY_OF_MONTH)};
    return result;
}
cs

-

자바 calendar에서 오늘을 기준으로 며칠 전을 구하기

안드로이드에서 검색 기간을 2017년 5월 6일(당시 오늘)과 6일전으로 설정하도록 했습니다.


이전에는 별 문제 없이 사용하고 있었어요.

문제 발생일은 2017년 5월 6일 입니다. 그 날을 기준으로 6일전을 했더니 2017년 4월 31일로 설정 되었습니다.


웹서버에서 Exception이 발생 되었고, 해당 원인은 2017년 4월 31일은 없는 날이라서 발생 된 것입니다.

왜 java calendar는 2017년 4월 30일이 아닌 31일로 보냈을까요...?


어디까지 제 생각입니다..

5월은 31일까지 있습니다.. 6일에서 6일전으로 가게되면 5, 4, 3, 2, 1일에서 다시 해당 달의 31일로 간 후 월을 1달 전으로 옮기는 것 같습니다..

그래서 4월 31일이 된 것이죠.. 


그래서 미리 달을 이전 달을 기준으로 계산하고, 자바 캘린더가 다시 앞 달로 옮길테니(이전 전 달이 되겠죠..), 다시 달을 +1을 해줍니다..