본문 바로가기
Android/Dev

오늘이 양력/음력 공휴일인지 확인하는 코드

by featherwing 2019. 3. 17.
반응형

오늘이 공휴일인지 아닌지를 확인하여 특정 작업을 실행시켜 주어야 할 때가 있습니다.

 

일반적인 공휴일의 경우에는 날짜 리스트를 만들어 두고 오늘의 날짜가 해당 리스트에 있을 경우로 판단해주면 되지만

 

설날이나 추석 같은 음력 공휴일이 표시된 경우라면 제법 복잡하게 생각해야 되는것 같습니다.

 

 

안드로이드  API24 , N (누가) 버전 이상부터 추가된 ChineseCalendar 를 이용하면 간단하게 확인할 수 있습니다.

 

     * ChineseCalendar 의 내용과 자세한 사용법은 안드로이드 개발자 문서의 ChineseCalendar항목을 확인 해 주세요.

 

@RequiresApi(api = Build.VERSION_CODES.N)

    public boolean checkHoliday(Date date) {

        boolean result = false;



        String[] solar = {"0101", "0301", "0505", "0606", "0815", "1003" , "1009","1225"};

        String[] lunar = {"0101", "0102", "0408", "0814", "0815", "0816", "1231"};



        List<String> ListsolarLegalHoliday = Arrays.asList(solar);

        List<String> ListlunarLegalHoliday = Arrays.asList(lunar);



        SimpleDateFormat dateFormat = new SimpleDateFormat("MMdd");

        String GregorianDate =  dateFormat.format(date);





        ChineseCalendar cc = new ChineseCalendar(date);



        //String y = String.valueOf(cc.get(ChineseCalendar.EXTENDED_YEAR) - 2637);

        String m = String.format("%02d", cc.get(ChineseCalendar.MONTH) + 1);

        String d = String.valueOf(cc.get(ChineseCalendar.DAY_OF_MONTH));

        String lunarDate = m + d;





        if (ListsolarLegalHoliday.indexOf(GregorianDate) >= 0 ||

                ListlunarLegalHoliday.indexOf(lunarDate) >= 0 ) {

            result = true;

        }



        return result;

    }

 

 

 

월일로만 표현된 양력 공휴일 리스트와 음력 공휴일 리스트를 만들어 두고

 

오늘의 양력날짜와 ChineseCalendar를 통해서 변형된 오늘의 음력 날짜를 각각 월일로 변형하여 비교해 준 뒤

 

공휴일에 해당되면 true 값을 반환 해 줍니다.

 

     * 음력 공휴일의 년도값은 나중에 사용할 경우를 위하여 만들어 두고 주석 처리 해 두었습니다.

 

 

사용할 때는 아래와 같이 사용합니다.

 

    long now = System.currentTimeMillis();

        final Date Today = new Date(now);

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
            if(checkHoliday(Today)) {

 //TODO 공휴일일 경우 할 작업

            }

}
반응형

댓글