[C#] 날짜 관련 함수 라이브러리

날짜사이 기간과 개월 수, 지정월의 마지막 날짜, 문자열 변경 등의 메소드 함수

두 날짜 사이의 기간 값 구하기

/// <summary>
/// 날짜 사이의 기간을 리턴
/// </summary>
/// <param name="dtFrom">시작일</param>
/// <param name="dtTo">종료일</param>
/// <returns>반환 기간일 ex)2년 4월 20일</returns>
public string GetDateDiffer(DateTime dtFrom, DateTime dtTo)
{
    DateTime dtCalc = dtTo.Date;

    int nYear = dtCalc.Year - dtFrom.Year;
    int nMonth = dtCalc.Month - dtFrom.Month;
    int nDay = dtCalc.Day - dtFrom.Day + 1;

    //둘다 당월의 마지막월이면 월계산에 일을 하루 더한다.
    if (dtCalc.Day == DateTime.DaysInMonth(dtCalc.Year, dtCalc.Month) &&
        dtFrom.Day == DateTime.DaysInMonth(dtFrom.Year, dtFrom.Month))
    {
        nDay = 1;
    }
    else
    {
        if (nDay < 0)
        {
            //날짜 종료일이 월말일 경우
            //일수를 시작월의 말일 - 시작일 + 1로 재계산 한다.
            if (DateTime.DaysInMonth(dtCalc.Year, dtCalc.Month) == dtCalc.Day)
            {
                nDay = DateTime.DaysInMonth(dtFrom.Year, dtFrom.Month) - dtFrom.Day + 1;
            }
            else
            {
                //날짜 종료일이 월말이 아닐 경우에는
                //일자 차이에 한달을 소환해서 재계산한다.
                nDay = DateTime.DaysInMonth(dtFrom.Year, dtFrom.Month) - dtFrom.Day + 1 + dtCalc.Day; //nDay + DateTime.DaysInMonth(dtCalc.AddMonths(-1).Year, dtCalc.AddMonths(-1).Month);
                if (nDay == DateTime.DaysInMonth(dtCalc.Year, dtCalc.Month))
                {
                    nDay = 0;
                }
                else
                {
                    nMonth = nMonth - 1;
                }
            }
        }
        else
        {
            if (nDay == DateTime.DaysInMonth(dtCalc.Year, dtCalc.Month))
            {
                nMonth = nMonth + 1;
                nDay = 0;
            }
        }

        if (nMonth < 0)
        {
            nYear = nYear - 1;
            nMonth = 12 + nMonth;
        }
    }

    return nYear.ToString() + "년" + nMonth.ToString() + "월" + nDay.ToString() + "일";

}

 

두 날짜 사이 기간의 개월 수 구하기

/// <summary>
/// 기간 사이의 달 수를 리턴
/// </summary>
/// <param name="datetime1">시작일</param>
/// <param name="datetime2">종료일</param>
/// <returns>개월 수</returns>
public int GetDiffMonth(DateTime datetime1, DateTime datetime2)
{
    int y1, y2;
    int m1, m2;
    int d1, d2;
    int result;

    y1 = datetime1.Year;
    y2 = datetime2.Year;
    m1 = datetime1.Month;
    m2 = datetime2.Month;
    d1 = datetime1.Day;
    d2 = datetime2.Day;

    if (d1 < d2)
        m1 -= 1;
    if (m1 < m2)
    {
        m1 += 12;
        y1 -= 1;
    }

    result = (y1 - y2) * 12 + (m1 - m2);

    return Math.Abs(result) - 1;
}




지정한 달의 마지막 날짜 구하기

/// <summary>지정 월의 마지막 날짜를 구한다.</summary>
/// <param name="nYear">Year</param>
/// <param name="nMonth">Month</param>
/// <returns>오류가 없는 경우 지정 달의 마지막 날짜를 응답하며, 그렇지 않은 경우 -1을 응답한다.</returns>
public int GetLastDayOfMonth(int nYear, int nMonth)
{
          int nLastDay = -1;

          try
          {
              if ((nYear >= 1) && (1 <= nMonth) & (nMonth <= 12))
              {
                  nLastDay = new DateTime(nYear, nMonth, 1).AddMonths(1).AddDays(-1).Day;
              }
          }
          catch (Exception ex)
          {
              ex.ToString();
          }

          return nLastDay;
 
}

 

문자열을 날짜 형으로 형변환(String -> DateTime)

/// <summary>
/// 날짜(년월일) 문자열을 DateTime형으로 변경
/// 구분자가 있어도 무방함.
/// 년도가 두자리인경우 4자리로 변경함
/// </summary>
/// <param name="sDate">문자열</param>
/// <returns>DateTime형 날짜</returns>
public DateTime Str2LongDate(string sDate)
{
            sDate = sDate.Trim();
            sDate = sDate.Replace("-","").Replace("/","");

            if (sDate.Length == 12)
            {
                if (sDate.Substring(0, 1).Equals("9"))
                    sDate = "19" + sDate;
                else
                    sDate = "20" + sDate;
            }

            int nYear = Int32.Parse(sDate.Substring(0, 4));
            int nMonth = Int32.Parse(sDate.Substring(4, 2));
            int nDay = Int32.Parse(sDate.Substring(6, 2));
            int nHour = Int32.Parse(sDate.Substring(8, 2));
            int nMinute = Int32.Parse(sDate.Substring(10, 2));
            int nSec = Int32.Parse(sDate.Substring(12, 2));

            DateTime dtReturn = new DateTime(nYear, nMonth, nDay, nHour, nMinute, nSec);

            return dtReturn;
}

 

댓글 남기기