삼성에서 관리하는 일정의 주차는 조금 다릅니다.
1. 한 주는 월요일~일요일까지이다.
2. 한 주의 기준은 목요일이다.
3. 즉, 목요일을 기준으로 주차를 구하면 된다.
4. 2015년의 첫 목요일은 1월 1일이므로 첫주는 2014년 12월 29일(월) ~ 2015년 1월 4일(일)까지이다.
2. 한 주의 기준은 목요일이다.
3. 즉, 목요일을 기준으로 주차를 구하면 된다.
4. 2015년의 첫 목요일은 1월 1일이므로 첫주는 2014년 12월 29일(월) ~ 2015년 1월 4일(일)까지이다.
위 내용으로 삼성에서의 주차를 구하는 Java Util을 만들어 봤습니다.
혹시, 업무에 필요하시다면 참고하세요~
package oboe.pjt.util;
import java.util.Calendar;
public class DateUtilAdd extends oboe.foundation.util.DateUtil
{
/**
* 두 날짜의 주차수 차이를 반환한다.
*
* @return int
* @throws Exception
* @since 1.0
*/
public static int getWeekNumOfTwoDate( Calendar cal1, Calendar cal2 ) throws Exception
{
Calendar calThur1 = getCalThursdayThisWeek( cal1 );
Calendar calThur2 = getCalThursdayThisWeek( cal2 );
Calendar startCal = Calendar.getInstance();
Calendar endCal = Calendar.getInstance();
if( calThur1.before( calThur2 ) ) {
startCal.set( calThur1.get( Calendar.YEAR ), calThur1.get( Calendar.MONTH ), calThur1.get( Calendar.DATE ) );
endCal.set( calThur2.get( Calendar.YEAR ), calThur2.get( Calendar.MONTH ), calThur2.get( Calendar.DATE ) );
} else {
startCal.set( calThur2.get( Calendar.YEAR ), calThur2.get( Calendar.MONTH ), calThur2.get( Calendar.DATE ) );
endCal.set( calThur1.get( Calendar.YEAR ), calThur1.get( Calendar.MONTH ), calThur1.get( Calendar.DATE ) );
}
int periodWeek = 0;
while( endCal.after( startCal ) ) {
startCal.add( Calendar.DATE, 7);
periodWeek++;
}
return periodWeek;
}
/**
* 해당월의 주차수를 반환한다.
*
* @return int
* @throws Exception
* @since 1.0
*/
public static int getWeekNumOfMonthTsst( Calendar cal ) throws Exception
{
Calendar thisMonthCal = Calendar.getInstance();
thisMonthCal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), 1 );
Calendar nextMonthCal = Calendar.getInstance();
nextMonthCal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ) + 1, 1 );
Calendar thisMonthFirstThursday = getCalFirstWeekThursdayOfMonthTsst( thisMonthCal );
Calendar nextMonthFirstThursday = getCalFirstWeekThursdayOfMonthTsst( nextMonthCal );
int periodWeek = 0;
while( nextMonthFirstThursday.after( thisMonthFirstThursday ) ) {
thisMonthFirstThursday.add( Calendar.DATE, 7);
periodWeek++;
}
return periodWeek;
}
/**
* 해당월의 몇번째 주인지를 반환한다.
*
* @return int
* @throws Exception
* @since 1.0
*/
public static int getCountWeekOfMonthTsst( Calendar cal ) throws Exception
{
Calendar thisThursdayCal = getCalThursdayThisWeek( cal );
Calendar firstThursdayYearCal = getCalFirstWeekThursdayOfMonthTsst( cal );
int periodWeek = 0;
while( !thisThursdayCal.before( firstThursdayYearCal ) ) {
firstThursdayYearCal.add( Calendar.DATE, 7);
periodWeek++;
}
return periodWeek;
}
/**
* 해당년도의 몇번째 주인지를 반환한다.
*
* @return int
* @throws Exception
* @since 1.0
*/
public static int getCountWeekOfYearTsst( Calendar cal ) throws Exception
{
Calendar thisThursdayCal = getCalThursdayThisWeek( cal );
Calendar firstThursdayYearCal = getCalFirstWeekThursdayOfYearTsst( thisThursdayCal );
int periodWeek = 0;
while( !thisThursdayCal.before( firstThursdayYearCal ) ) {
firstThursdayYearCal.add( Calendar.DATE, 7);
periodWeek++;
}
return periodWeek;
}
/**
* 해당월의 첫주 시작 목요일을 구한다.
*
* @return int
* @throws Exception
* @since 1.0
*/
public static Calendar getCalFirstWeekThursdayOfMonthTsst( Calendar cal ) throws Exception
{
// 해당년의 시작일(1월 1일)을 셋팅하기
Calendar firstCal = Calendar.getInstance();
firstCal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), 1 );
// 기준이 되는 목요일을 구하자.
firstCal = getCalThursdayThisWeek( firstCal );
// 기준이 되는 목요일이 전월이라면 7일을 더하자.
if( cal.get( Calendar.MONTH ) != firstCal.get( Calendar.MONTH ) ) {
firstCal.add( Calendar.DATE, 7 );
}
return firstCal;
}
/**
* 해당월의 마지막주 종료 목요일을 구한다.
*
* @return int
* @throws Exception
* @since 1.0
*/
public static Calendar getCalLastWeekThursdayOfMonthTsst( Calendar cal ) throws Exception
{
// 해당월의 마지막날짜를 셋팅하자
Calendar lastCal = Calendar.getInstance();
lastCal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ) + 1, 1 );
lastCal.add( lastCal.get( Calendar.DATE), -1 );
// 기준이 되는 목요일을 구하자.
lastCal = getCalThursdayThisWeek( lastCal );
// 기준이 되는 목요일이 내년이라면 7일을 빼자.
if( cal.get( Calendar.MONTH ) != lastCal.get( Calendar.MONTH ) ) {
cal.add( Calendar.DATE, -7 );
}
return cal;
}
/**
* 해당년도의 첫주 시작 목요일을 구한다.
*
* @return int
* @throws Exception
* @since 1.0
*/
public static Calendar getCalFirstWeekThursdayOfYearTsst( Calendar cal ) throws Exception
{
// 해당년의 시작일(1월 1일)을 셋팅하기
Calendar firstCal = Calendar.getInstance();
firstCal.set( cal.get( Calendar.YEAR ), 0, 1 );
// 기준이 되는 목요일을 구하자.
firstCal = getCalThursdayThisWeek( firstCal );
// 기준이 되는 목요일이 전년도라면 7일을 더하자.
if( cal.get( Calendar.YEAR ) != firstCal.get( Calendar.YEAR ) ) {
firstCal.add( Calendar.DATE, 7 );
}
return firstCal;
}
/**
* 해당년도의 마지막주 종료 목요일을 구한다.
*
* @return int
* @throws Exception
* @since 1.0
*/
public static Calendar getCalLastWeekThursdayOfYearTsst( Calendar cal ) throws Exception
{
// 해당년도의 마지막날짜(12월 31일)을 셋팅하자.
int year = cal.get( Calendar.YEAR );
cal.set( year, 11, 31 );
// 기준이 되는 목요일을 구하자.
Calendar lastCal = Calendar.getInstance();
lastCal = getCalThursdayThisWeek( cal );
// 기준이 되는 목요일이 내년이라면 7일을 빼자.
if( lastCal.get( Calendar.YEAR ) != year ) {
lastCal.add( Calendar.DATE, -7 );
}
return lastCal;
}
/**
* 한주의 기준이 되는 목요일을 구하자.
* - 목요일을 기준으로 앞뒤 3일이 한주가 된다.
*
* @return int
* @throws Exception
* @since 1.0
*/
public static Calendar getCalThursdayThisWeek( Calendar cal ) throws Exception
{
int dayOfWeek = cal.get( Calendar.DAY_OF_WEEK );
Calendar thursdayCal = Calendar.getInstance();
thursdayCal.set( cal.get( Calendar.YEAR ), cal.get( Calendar.MONTH ), cal.get( Calendar.DATE ) );
// 일요일은 3일을 빼서 목요일을 구하고
if( dayOfWeek == 1 ) {
thursdayCal.add( Calendar.DATE, -3 );
}
// 일요일이 아니면 목요일의 숫자 5에서 해당요일의 값을 빼준값을 더한다.
else {
thursdayCal.add( Calendar.DATE, 5 - dayOfWeek );
}
return thursdayCal;
}
}
'프로그래밍 언어 > java + jsp + jstl' 카테고리의 다른 글
| [JSTL] 날짜 format 형식(yyyy.MM.dd)에 맞게 화면에 출력하기 (0) | 2015.04.14 |
|---|---|
| [Java/jsp] 날짜 타입 변경 - Calendar를 Date로, Date를 Calendar로 변환하는 방법 (0) | 2015.04.14 |
| [java/jsp] Html Tag(태그) 제거하는 정규식 (1) | 2015.03.19 |
| [자바] The serializable class OboeObject does not declare a static final serialVersionUID field of type long 에러 발생시 해결 방법 (0) | 2015.02.04 |
| [자바]Type safety: Unchecked cast from List ~ to ~ 경고시 처리 방법 (0) | 2015.02.04 |
댓글