2013-04-24 52 views
4

我有一段时间,我想通过它并在每个日期执行相同的代码。C#:DateTime - 经过一段时间?

开始结束日期时间格式,每月至少

while (!(begin.Equals(end))) 
     { 
      ...some code here...    
      begin = begin.AddDays(1); 
     } 
  1. 我不知道的区别,如果它会自动升级,月值的时候,天数值到达一个确切的月份(在确切的一年)结束 - 例如二月并不总是有相同的天数,所以...

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

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

+1

是什么阻止了你自己尝试? – MarcinJuraszek 2013-04-24 08:08:15

+0

我没有完成内部代码,我喜欢尝试一切,当我有我想要的代码的所有部分,即使这意味着我可能在第一部分中有一些问题..我很愚蠢,我知道。如果不知道他们是否会好或不好,我可以有更多的线路:| (没有错误和警告就足够我开始:D) – 2013-04-24 08:13:30

回答

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; 

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

0

你发布的代码是正确的,应该可以正常工作。别担心,AddDays method会在需要时自动增加月份和年份。

您还可以,如果你觉得它更具可读性使用for循环:

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

这将无法正常工作。日期是不可变的,AddDays返回一个新的实例 – adrianm 2013-04-24 08:11:05

+0

@adrianm感谢您的反馈。我已经错过了for循环声明结尾处的赋值部分的确。现在已经纠正了。 – 2013-04-24 08:16:20

2

做这种方式(不比较平等,因为时间可能是不同的,环路将会永存)。

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

+1,我打算提出相同的观点......你打败了我! – series0ne 2013-04-24 08:08:39

+0

我根本没有考虑时间,因为我只在那里设定日期,所以谢谢你的意见。 – 2013-04-24 08:17:47

0

你可以试试这个,我认为这是一个小更简洁:

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

DateTime对象知道如何增加月,年等中的,所以你不用担心关于那个。

相关问题