검색 조건 세팅 중에
기준일자 대비 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);
이처럼 하면 된다.
요기까지~
'프로그래밍 > C#' 카테고리의 다른 글
C# 일정 범위 내에 IP 체크하기 (0) | 2017.11.09 |
---|---|
C# WebBrowser 키이벤트 엔터키 막기 (0) | 2017.09.26 |
DataTable에서 Group By Sum 하기 (0) | 2015.01.19 |
C# DataTable에서 특정 컬럼만 Select해서 DataTable 만들기 (0) | 2015.01.18 |
C# OLEDB로 엑셀 읽기 시 문자 또는 숫자가 읽히지 않을 때 (0) | 2014.09.17 |
C# request 인코딩 처리하기 (0) | 2014.02.05 |
DataRow에서 rowID 구하기 (0) | 2014.02.03 |
C# 에서 웹브라우져 실행시키기 (0) | 2014.02.03 |