/**
 * 해당월 주의 최대값
 * @param dateStr		YYYYMM
 */
function getWeekCountOfMonth(dateStr) {
	var year  = Number(dateStr.substring(0, 4));
	var month = Number(dateStr.substring(4, 6));
	
	var nowDate = new Date(year, month-1, 1);

	var lastDate = new Date(year, month, 0).getDate();
	var monthSWeek = nowDate.getDay();

	var weekSeq = parseInt((parseInt(lastDate) + monthSWeek - 1)/7) + 1;

	return weekSeq;
}
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);
	}
}


[JavaScript]
/**
 * 주어진 값 다음의 날짜 구하기(과거는 - 마이너스)
 * @param nextDateInt	날짜에 더하거나 빼야할 값
 * @param nowDate		현재 날짜 및 기준날짜( new Date(), 없을 경우 new Date(), yyyymmdd 8자리)
 * @return Date
 */
function getNextDate(nextDateInt, standardDate){

	var oneDate = 1000 * 3600 * 24;	// 하루

	var nowDate;
	if( standardDate == undefined )					nowDate = new Date();
	else if( standardDate.getTime != undefined )	nowDate = standardDate;
	else if( standardDate.length == 8 )				nowDate = new Date(standardDate.substring(0, 4), parseInt(standardDate.substring(4, 6))-1, standardDate.substring(6, 8));
	
	return new Date(nowDate.getTime() + (oneDate * nextDateInt));
}



[JAVA]
/**
	 * 주어진 값 다음의 날짜 구하기(과거는 - 마이너스)
	 * @param nextDateInt	날짜에 더하거나 빼야할 값
	 * @param nowDate		현재 날짜 및 기준날짜( new Date(), 없을 경우 new Date(), yyyymmdd 8자리)
	 * @return Date
	 */
	public static Date getNextDate(int nextDateInt){
		return getNextDate(nextDateInt, new Date());
	}
	public static Date getNextDate(int nextDateInt, String nowDateStr){
		GregorianCalendar gc = new GregorianCalendar ( Integer.parseInt(nowDateStr.substring(0, 4)), (Integer.parseInt(nowDateStr.substring(4, 6))-1), Integer.parseInt(nowDateStr.substring(6, 8)) );
		return getNextDate(nextDateInt, gc.getTime());
	}
	public static Date getNextDate(int nextDateInt, Date nowDate){
		long oneDate = 1000 * 3600 * 24;	// 하루
		return new Date(nowDate.getTime() + (oneDate * nextDateInt));
	}
[ActionScript]
/**
	 * 주어진 값 다음의 날짜 구하기(과거는 - 마이너스)
	 * @param nextDateInt	날짜에 더하거나 빼야할 값
	 * @param nowDate		현재 날짜 및 기준날짜
	 * @return Date
	 */
	public static function getNextDate(nextDateInt:int, standardDate:Date) : Date {
		var oneDate:Number = 1000 * 3600 * 24;	// 하루
		return new Date(standardDate.getTime() + (oneDate * nextDateInt));
	}

+ Recent posts