첨부 실행 코드는 나눔고딕코딩 폰트를 사용합니다.
유용한 소스 코드가 있으면 icodebroker@naver.com으로 보내주시면 감사합니다.
블로그 자료는 자유롭게 사용하세요.

728x90
반응형

▶ DurationManager.cs

using System;

/// <summary>
/// 경과 기간 관리자
/// </summary>
public class DurationManager
{
    //////////////////////////////////////////////////////////////////////////////////////////////////// Field
    ////////////////////////////////////////////////////////////////////////////////////////// Private

    #region Field

    /// <summary>
    /// 월별 일수 배열
    /// </summary>
    private int[] dayCountPerMonthArray = new int[12] { 31, -1, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };

    /// <summary>
    /// 시작일
    /// </summary>
    private DateTime startDate;

    /// <summary>
    /// 종료일
    /// </summary>
    private DateTime endDate;

    /// <summary>
    /// 연도 수
    /// </summary>
    private int yearCount;

    /// <summary>
    /// 월 수
    /// </summary>
    private int monthCount;

    /// <summary>
    /// 일 수
    /// </summary>
    private int dayCount;

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Property
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 연도 수 - YearCount

    /// <summary>
    /// 연도 수
    /// </summary>
    public int YearCount
    {
        get
        {
            return this.yearCount;
        }
    }

    #endregion

    #region 월 수 - MonthCount

    /// <summary>
    /// 월 수
    /// </summary>
    public int MonthCount
    {
        get
        {
            return this.monthCount;
        }
    }

    #endregion

    #region 일 수 - DayCount

    /// <summary>
    /// 일 수
    /// </summary>
    public int DayCount
    {
        get
        {
            return this.dayCount;
        }
    }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Constructor
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 생성자 - DurationManager(startDate, endDate)

    /// <summary>
    /// 생성자
    /// </summary>
    /// <param name="startDate">시작일</param>
    /// <param name="endDate">종료일</param>
    public DurationManager(DateTime startDate, DateTime endDate)
    {
        if(startDate > endDate)
        {
            this.startDate = endDate;
            this.endDate   = startDate;
        }
        else
        {
            this.startDate = startDate;
            this.endDate   = endDate;
        }

        int increment = 0;

        if(this.startDate.Day > this.endDate.Day)
        {
            increment = this.dayCountPerMonthArray[this.startDate.Month - 1];
        }

        if(increment == -1)
        {
            if(DateTime.IsLeapYear(this.startDate.Year))
            {
                increment = 29;
            }
            else
            {
                increment = 28;
            }
        }

        #region 일 수 계산

        if(increment != 0)
        {
            this.dayCount = (this.endDate.Day + increment) - this.startDate.Day;

            increment = 1;
        }
        else
        {
            this.dayCount = this.endDate.Day - this.startDate.Day;
        }

        #endregion

        #region 월 수 계산

        if((this.startDate.Month + increment) > this.endDate.Month)
        {
            this.monthCount = (this.endDate.Month + 12) - (this.startDate.Month + increment);

            increment = 1;
        }
        else
        {
            this.monthCount = (this.endDate.Month) - (this.startDate.Month + increment);

            increment = 0;
        }

        #endregion

        #region 연도 수 계산

        this.yearCount = this.endDate.Year - (this.startDate.Year + increment);

        #endregion
    }

    #endregion

    ////////////////////////////////////////////////////////////////////////////////////////// Private

    #region 생성자 - DurationManager()

    /// <summary>
    /// 생성자
    /// </summary>
    private DurationManager()
    {
    }

    #endregion

    //////////////////////////////////////////////////////////////////////////////////////////////////// Method
    ////////////////////////////////////////////////////////////////////////////////////////// Public

    #region 문자열 구하기 - ToString()

    /// <summary>
    /// 문자열 구하기
    /// </summary>
    /// <returns>문자열</returns>
    public override string ToString()
    {
        return string.Format("{0} 년 {1} 월 {2} 일", this.yearCount, this.monthCount, this.dayCount);
    }

    #endregion
}

 

728x90
반응형
Posted by 사용자 icodebroker
TAG , ,

댓글을 달아 주세요