import java.text.SimpleDateFormat; import java.util.Date; import java.util.GregorianCalendar; import com.ibm.icu.util.Calendar; public class DateUtil { /** * 월의 해당 주의 날짜 배열을 얻어온다. * @param yyyymm * @param weekSeq * @return */ public static int[] getRangeDateOfWeek(String yyyymm, int weekSeq) { int rangeDateOfWeek [] = new int[7]; int startDayOfWeek = dayOfWeek(yyyymm.substring(0, 4), yyyymm.substring(4, 6), "1"); if( startDayOfWeek == 0 || weekSeq > 1 ){ Calendar cal = converterDate(yyyymm+"01"); int lastDateOfMonth = getLastDateOfMonth(new SimpleDateFormat("yyyyMM").format(cal.getTime())); int startDate = 1 + ((weekSeq-1)*7) - startDayOfWeek; for( int i=0; i<7; i++ ){ if( startDate > lastDateOfMonth ){ startDate = 1; } rangeDateOfWeek[i] = startDate++; } }else{ Calendar cal = converterDate(yyyymm+"01"); cal.add(Calendar.MONTH, -1); int lastDateOfBeforeMonth = getLastDateOfMonth(new SimpleDateFormat("yyyyMM").format(cal.getTime())); int startDate = (lastDateOfBeforeMonth + 1) - startDayOfWeek; for( int i=0; i<7; i++ ){ if( startDate > lastDateOfBeforeMonth ){ startDate = 1; } rangeDateOfWeek[i] = startDate++; } } return rangeDateOfWeek; } /** * 특정날짜의 요일의 숫자를 리턴 * 0:일요일 ~ 6:토요일 * @return */ public static int dayOfWeek(String sYear, String sMonth, String sDay) { int iYear = Integer.parseInt(sYear); int iMonth = Integer.parseInt(sMonth) - 1; int isDay = Integer.parseInt(sDay); GregorianCalendar gc = new GregorianCalendar(iYear, iMonth, isDay); return gc.get(gc.DAY_OF_WEEK) - 1; } /** * String 형식의 날자를 Calendar 로 변환 해준다. * * @param yyyymmdd * @return */ public static Calendar converterDate(String yyyymmdd) { Calendar cal = Calendar.getInstance(); // 양력 달력 if (yyyymmdd == null) return cal; String date = yyyymmdd.trim(); if (date.length() != 8) { if (date.length() == 4) date = date + "0101"; else if (date.length() == 6) date = date + "01"; else if (date.length() > 8) date = date.substring(0, 8); else return cal; } 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))); return cal; } /** * 해당 월의 마지막일을 구한다. * @return */ public static int getLastDateOfMonth() { return getLastDateOfMonth(new Date()); } public static int getLastDateOfMonth(Date date) { return getLastDateOfMonth(new SimpleDateFormat("yyyyMM").format(date)); } public static int getLastDateOfMonth(String yyyymm) { int year = Integer.parseInt(yyyymm.substring(0, 4)); int month = Integer.parseInt(yyyymm.substring(4, 6)) - 1; Calendar destDate = Calendar.getInstance(); destDate.set(year, month, 1); return destDate.getActualMaximum(Calendar.DATE); } }
날짜(Date, Calendar), 한주의 시작~끝 날짜, 요일, 마지막일
2012. 7. 11. 15:08