C#:DateTime-经过一段时间
本文关键字:一段时间 经过 DateTime- | 更新日期: 2023-09-27 18:10:33
我有一段时间,我想遍历它,并在每个日期执行相同的代码。
开始和结束是日期时间格式,相差至少一个月
while ( !(begin.Equals(end)) )
{
...some code here...
begin = begin.AddDays(1);
}
我不确定它是否会在Day值达到确切月份(确切年份(结束时自动升级Month值-例如,二月的天数并不总是相同的,所以…
有没有更好/更短/更好的方法把日期增加一天?例如:
begin.Day++
;或者这个:begin++;
?
我还不习惯C#,很抱歉问了这个蹩脚的问题,并提前感谢你的回答。
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
}