日期:2014-05-19  浏览次数:20828 次

请问一个日期计算的问题,类似于计算周岁.
比如说,
给定一个初始日期A,
给定一个中间月份和日期B,
给定一个结束日期C,

从这个A一天加一天的过,每当这个A的月份和日期和这个B的月份及日期相等,就加1,直到循环到C,然后计算一共循环了几次,怎么计算.
比如:A=2005-11-01  
            B=     10-01
            C=2008-10-02
从A=2005-11-01开始:

        2005-11-01
  2005-11-02
        2005-11-03
  ...................
        2006-10-01                     -----> 这里和B的月,日相同,所以循环为1.

...................
  2008-10-01                   -----> 这里和B的月,日相同,所以循环为2次.
  2008-10-02(结束至C)
所以得出一共循环2次.
那么如何计算出它呢?

------解决方案--------------------
DateTime A = new DateTime(2005, 11, 01);
DateTime C = new DateTime(2008, 10, 02);

int i = 1;
DateTime temp = A;
while (C > temp)
{
temp = A.AddDays(i);
if (temp.Month == 10 && temp.Day == 1)
Console.WriteLine(temp);
i++;
}
------解决方案--------------------
try

DateTime A = new DateTime(2005, 11, 01);
DateTime C = new DateTime(2008, 10, 02);
DateTime temp = new DateTime(A.Year, 10, 01); //以上数字可以为变量,不过那时最好用DateTime.TryParse方法来转换

if (temp < A)
temp = temp.AddYears(1);

int i=0;
while(temp <C)
{
temp = temp.AddYears(1);
i++;
}

MessageBox.Show(i.ToString()); //结果为3

思路:如果A的年份加B小于A,那么计算起始时间从A年加1开始,否则从A年加B开始,如楼主所给例子,2005-10-01小于A,所以超始日期从2006-10-01算起,然后年份加1,判断是否小于C即可