반응형
오늘이 공휴일인지 아닌지를 확인하여 특정 작업을 실행시켜 주어야 할 때가 있습니다.
일반적인 공휴일의 경우에는 날짜 리스트를 만들어 두고 오늘의 날짜가 해당 리스트에 있을 경우로 판단해주면 되지만
설날이나 추석 같은 음력 공휴일이 표시된 경우라면 제법 복잡하게 생각해야 되는것 같습니다.
안드로이드 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 공휴일일 경우 할 작업
}
}
반응형
'Android > Dev' 카테고리의 다른 글
Uri 로부터 파일의 실제경로 구하기/외장SD카드의 경로 얻기 (7) | 2019.04.03 |
---|---|
SwipeRefreshLayout 을 사용할 때 가로 스크롤 과 충돌하지 않게하기 (0) | 2019.03.17 |
ScrollView 사용시 스크롤 중인지 판단하여 작업 제한하기 (0) | 2019.03.17 |
soundpool 사용 시 매너모드/무음모드 연동 (0) | 2018.05.05 |
특정 작업시 화면이 꺼지지 않게 유지 (0) | 2018.04.26 |
댓글