본문 바로가기
프로그래밍/C#

C# 1년전 같은주차 같은요일 날짜 구하기

by zoo10 2014. 10. 23.

검색 조건 세팅 중에

기준일자 대비 1년전 같은주차 같은요일 날짜 구해달라는게 있었다.

삽질하다가 만든 허접한 클래스이다.

필요하신 분은 사용해 보시고 버그가 있으면 피드백 주셔서 발전시켰으면 한다.


public class CustmizeCalendar
{
    #region 전역변수
    System.Globalization.DateTimeFormatInfo dfi = System.Globalization.DateTimeFormatInfo.CurrentInfo;
    System.Globalization.Calendar cal = System.Globalization.CultureInfo.InvariantCulture.Calendar;
    #endregion

    #region 생성자
    /// <summary>
    /// 생성자
    /// </summary>
    public CustmizeCalendar() { }
    #endregion

    #region 같은 주차 같은 요일의 날짜 반환
    /// <summary>
    /// 같은 주차 같은 요일의 날짜 반환
    /// </summary>
    /// <param name="strDt">기준일자</param>
    /// <param name="y">년도 변경값</param>
    /// <returns></returns>
    public DateTime GetLastSameWeekSameDay(string strDt, int y)
    {
        DateTime dtCurrent = DateTime.Parse(strDt);
        DateTime dtLast = cal.AddYears(dtCurrent, y);

  //기준일자의 주차        
    int weekCurrent = cal.GetWeekOfYear(dtCurrent, dfi.CalendarWeekRule, dfi.FirstDayOfWeek); 

//+, - 년도의 일자 주차
    int weekLast = cal.GetWeekOfYear(dtLast, dfi.CalendarWeekRule, dfi.FirstDayOfWeek);         

        int weekGap = (weekCurrent - weekLast) * 7; //주차 사이의 차이
        dtLast = dtLast.AddDays(weekGap);   //주차 조정

        int dayCurrent = (int)dtCurrent.DayOfWeek;  //기준요일
        int dayLast = (int)dtLast.DayOfWeek;        //변경된 요일
        int dayGap = dayCurrent - dayLast;          //두 요일 사이의 차
        dtLast = dtLast.AddDays(dayGap);            //요일로 조정

        return dtLast;
    }
    #endregion
}



실제 사용은

DateTime dt = DateTime.Now;

CustmizeCalendar ccDate = new CustmizeCalendar();
DateTime dtLE = ccDate.GetLastSameWeekSameDay(dt, -1);

이처럼 하면 된다.

요기까지~