C#:DateTime-经过一段时间

本文关键字:一段时间 经过 DateTime- | 更新日期: 2023-09-27 18:10:33

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

开始结束日期时间格式,相差至少一个月

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

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

我还不习惯C#,很抱歉问了这个蹩脚的问题,并提前感谢你的回答。

C#:DateTime-经过一段时间

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;

确保你的边界是正确的。循环在currentDay < end时进行,但如果您的时间范围是包容性的而不是排他性的,则可能需要currentDay <= end

这样做(不要比较是否相等,因为小时可能不同,循环将永远进行(。

    while ( begin <= end )
    {
       ...some code here...              
       begin = begin.AddDays(1);
    }

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

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

DateTime对象知道如何适当地增加月份、年份等,所以您不必担心这一点。

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

如果你觉得for循环更可读,你也可以使用它:

for (DateTime date = startDate; date < endDate; date = date.AddDays(1))
{
    // Your code here
}