http://apps.icu-project.org/icu-jsp/downloadPage.jsp?ver=4.8.1.1&base=j
icu4j-4_8_1_1.jar 파일을 lib에 추가.
* 변수를 선언하고 음력 및 양력에 해당하는 값을 배열로 저장한다.
private Calendar cal;
private ChineseCalendar chinaCal;
private String[] solarArr;
private String[] lunarArr;
public DateUtil() {
cal = Calendar.getInstance();
chinaCal = new ChineseCalendar();
solarArr = new String[]{"0101", "0301", "0505", "0606", "0815", "1225"};
lunarArr = new String[]{"0101", "0102", "0408", "0814", "0815", "0816"};
}
/**
* 해당일자가 음력 법정공휴일에 해당하는 지 확인
* @param date
* @return
*/
private boolean isHolidayLunar (String date) {
boolean result = false;
cal.set(Calendar.YEAR, Integer.parseInt(date.substring(0, 4)));
cal.set(Calendar.MONTH, Integer.parseInt(date.substring(4, 6)) - 1);
cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(date.substring(6)));
chinaCal.setTimeInMillis(cal.getTimeInMillis());
/** 음력으로 변환된 월과 일자 **/
int mm = chinaCal.get(ChineseCalendar.MONTH) + 1;
int dd = chinaCal.get(ChineseCalendar.DAY_OF_MONTH);
StringBuilder sb = new StringBuilder();
if (mm < 10) sb.append("0");
sb.append(mm);
if (dd < 10) sb.append("0");
sb.append(dd);
/** 음력 12월의 마지막날 (설날 첫번째 휴일)인지 확인 **/
if (mm == 12) {
int lastDate = chinaCal.getActualMaximum(ChineseCalendar.DAY_OF_MONTH);
if (dd == lastDate) {
return true;
}
}
for (String d : lunarArr) {
if (sb.toString().equals(d)) {
return true;
}
}
return result;
}
/**
* 해당일자가 양력 법정공휴일에 해당하는 지 확인
* @param date
* @return
*/
private boolean isHolidaySolar (String date) {
boolean result = false;
if (StringUtil.nvl(date).equals("") ||
StringUtil.nvl(date).length() > 8) {
date = new java.text.SimpleDateFormat("MMdd").format(cal.getTime());
} else {
date = date.substring(4);
}
for (String d : solarArr) {
if (date.equals(d)) {
return true;
}
}
return result;
}
/**
* 해당일자가 일요일인지 확인
* @param date
* @return
*/
private boolean isSunday (String date) {
boolean result = false;
cal.set(Calendar.YEAR, Integer.parseInt(date.substring(0, 4)));
cal.set(Calendar.MONTH, Integer.parseInt(date.substring(4, 6)) - 1);
cal.set(Calendar.DAY_OF_MONTH, Integer.parseInt(date.substring(6)));
if (cal.get ( Calendar.DAY_OF_WEEK ) == 1) {
result = true;
}
return result;
}
public String getDelvDate () {
int addDay = 1;
String date = "";
cal.setTime(new java.util.Date(System.currentTimeMillis()));
cal.add(Calendar.DATE, addDay);
date = new java.text.SimpleDateFormat("yyyyMMdd").format(cal.getTime());
boolean result = true;
/** 양력 법정공휴일부터 확인 **/
result = isHolidaySolar(date);
/** 양력 법정공휴일에 해당하지 않으면 **/
if (!result) {
/** 음력 법정공휴일에 해당하는 지 확인 **/
result = isHolidayLunar(date);
/** 음력 공휴일에 해당하면 **/
if (result) {
/** 재조정된 값이 음력, 양력 공휴일 및 일요일에 해당하지 않을 때까지 루프 **/
while (result) {
cal.add(Calendar.DATE, addDay);
date = new java.text.SimpleDateFormat("yyyyMMdd").format(cal.getTime());
result = isHolidayLunar(date);
/** 음력 공휴일에도 해당하지 않을 경우
* 이 때의 date가 일요일 및 양력 공휴일에 해당하는 지 한번 더 확인하고 일요일인지도 확인
* **/
if (!result) {
result = isHolidaySolar(date);
}
if (!result) {
result = isSunday(date);
}
}
/** 양력 및 음력 공휴일에 해당하지 않으면 **/
} else {
/** 양력 및 음력 공휴일에 해당하지 않으므로 일요일인지 확인 **/
result = isSunday(date);
if (result) {
/** 재조정된 값이 음력, 양력 공휴일 및 일요일에 해당하지 않을 때까지 루프 **/
while (result) {
cal.add(Calendar.DATE, addDay);
date = new java.text.SimpleDateFormat("yyyyMMdd").format(cal.getTime());
result = isSunday(date);
/** 재조정된 값이 양력 및 음력 공휴일에 해당하는 지 확인 **/
if (!result) {
result = isHolidaySolar(date);
}
if (!result) {
result = isHolidayLunar(date);
}
}
}
}
} else { // 양력 공휴일에 해당하면
/** 재조정된 값이 음력, 양력 공휴일 및 일요일에 해당하지 않을 때까지 루프 **/
while (result) {
cal.add(Calendar.DATE, addDay);
date = new java.text.SimpleDateFormat("yyyyMMdd").format(cal.getTime());
result = isHolidaySolar(date);
if (!result) {
result = isHolidaySolar(date);
}
if (!result) {
result = isSunday(date);
}
}
}
return date;
}
public static void main(String[] args) {
DateUtil du = new DateUtil();
du.getDelvDate();
}
참고 사이트 : http://yysvip.tistory.com/159