728x90
이전 코드에서는 시작일과 종요일 기간이 나눈 등분기간 보다 짧을때
가령 등분이 15일인데 실제 기간은 4일일경우 4일 이후는 같은 값이
계속 나오는 문제가 있었습니다. 이와 같은 경우는 단순하게 1씩 더해서
시작일과 종료일 기간만큼만 화면에 출력하고 종료하는 로직으로 변경하였습니다.
/// <summary>
/// 어떤 시작과 종료 되는 시점의 기간(duration)을 일정 지정한 간격만큼
/// 배분하는 로직
/// </summary>
class Program
{
static void Main(string[] args)
{
// 시작/종료일
string fromDate = "2012-05-01";
string toDate = "2012-05-05";
int portion = 0;
int mod = 0;
int addCount = 0;
int i = 0;
int addDay = 0;
DateTime day = new DateTime();
// 시작/종료일 날짜형 변환
DateTime fromDt = DateTime.Parse(fromDate);
DateTime toDt = DateTime.Parse(toDate);
// 날짜 기간 (분모)
int duration = DayCount(fromDt, toDt);
// 기간 등분 (분자)
int numerator = 14;
if (duration > numerator)
{
// 날짜 사이의 간격(몫)
portion = duration / numerator;
// 나머지
mod = duration % numerator;
// 기간 등분만큼 Loop 반복
do
{
// 나머지 수 만큼 앞에서부터 +1을 더함
if (i <= mod)
{
addCount = i * (portion + 1);
addDay = portion + 1;
day = fromDt.AddDays(addCount);
}
else
{
addCount += (portion);
addDay = portion;
day = fromDt.AddDays(addCount);
}
i++;
Console.WriteLine("NO : {0} : {1} / {2} / {3}",
i >= 10 ? i.ToString() : "0" + i.ToString(),
day.ToString("yyyy-MM-dd"), addCount, addDay);
} while (i <= numerator);
}
else
{
// 시작일과 종료일의 기간이 등분한 날짜보다 작을때...
// 전체 날짜 표시
for (; i <= duration; i++)
{
numerator = addCount;
addCount = i;
addDay = addCount;
day = fromDt.AddDays(addCount);
int disCnt = i + 1;
Console.WriteLine("NO : {0} : {1} / {2} / {3}",
disCnt >= 10 ? disCnt.ToString() : "0" + disCnt.ToString(),
day.ToString("yyyy-MM-dd"), addCount, addDay);
}
}
Console.WriteLine("duration : {0}", duration);
Console.WriteLine("numerator : {0}", numerator);
Console.WriteLine("portion : {0}", portion);
Console.WriteLine("mod : {0}", mod);
Console.ReadLine();
}
static int DayCount(DateTime fromDt, DateTime ToDt)
{
TimeSpan ts = ToDt - fromDt;
return ts.Days;
}
기간이 짧을경우
기간이 긴경우
'.NET C#' 카테고리의 다른 글
c# DateTime (날짜, 시간, 요일 추출) Utils (0) | 2023.01.13 |
---|---|
C# GPX(GPS Exchange Format) Paser (0) | 2023.01.13 |
코드 블럭 테스트 (c# DB Helper) (0) | 2023.01.12 |
시작과 종료일 날짜 간격 구하는 로직 (0) | 2012.05.03 |
Visual Studio 2010 and .NET Framework 4.0 Training Kit - November Preview (0) | 2008.11.30 |
SQL 2008 설치전 몇가지 고려사항 (0) | 2008.11.25 |
Microsoft .Net의 새로운 로고입니다. (8) | 2008.10.29 |
댓글