날짜사이 기간과 개월 수, 지정월의 마지막 날짜, 문자열 변경 등의 메소드 함수
두 날짜 사이의 기간 값 구하기
/// <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; }