4

我有一段时间,我想通过它并在每个日期执行相同的代码。

beginendDateTime格式,至少相差一个月

while ( !(begin.Equals(end)) )
        {
           ...some code here...              
           begin = begin.AddDays(1);
        }
  1. 我不确定当 Day 值到达确切月份(确切年份)的末尾时它是否会自动升级 Month 值 - 例如,二月的天数并不总是相同,所以......

  2. 有没有更好/更短/更好的方法将日期增加一天?例如这样的事情:begin.Day++; 或者这个:begin++;

我不习惯 C#,但很抱歉提出这个蹩脚的问题,并提前感谢您的任何回答。

4

4 回答 4

5

1) 是的。所有日期算术都为您正确处理。

2) 是的。你可以做:

var oneDay = TimeSpan.FromDays(1);
...
begin += oneDay;

您还可以使用for循环:

var oneDay = TimeSpan.FromDays(1);

for (DateTime currentDay = begin; currentDay < end; currentDay += oneDay)
{
    // Some code here.
}

最后一件事:如果您想确保忽略时间组件,您可以确保将开始日期和结束日期的时间部分设置为午夜,如下所示:

begin = begin.Date;
end   = end.Date;

确保你的界限是正确的。循环进行 while currentDay < end- 但currentDay <= end如果您的时间范围是包容性的而不是独占性的,您可能需要。

于 2013-04-24T08:04:33.803 回答
2

这样做(不要比较是否相等,因为时间可能不同并且循环会永远进行)。

    while ( begin <= end )
    {
       ...some code here...              
       begin = begin.AddDays(1);
    }
于 2013-04-24T08:06:13.220 回答
0

您发布的代码是正确的,应该可以正常工作。不用担心,AddDays 方法会在必要时自动增加月份和年份。

如果您发现它更具可读性,也可以使用 for 循环:

for (DateTime date = startDate; date < endDate; date = date.AddDays(1))
{
    // Your code here
}
于 2013-04-24T08:05:45.997 回答
0

你可以试试这个,我认为它更简洁一点:

while (DateTime.Compare(begin, end) < 0)
{
    /* Some code here */
    begin = begin.AddDays(1);
}

DateTime 对象知道如何适当地增加月数、年数等,因此您不必担心。

于 2013-04-24T08:07:42.097 回答