如何正确循环几天

时间:2014-06-11 11:23:39

标签: c#

我正在尝试创建一个包含开始日期和结束日期的字符串。这可以循环超过X天。

int nrOfDaysToLoopBy = 3;

List<string> Dates = new List<string>();

string startDate = "2014-01-01";  //this date is given to me by an api I am just hard codeing for testing
string endDate = "2014-01-30";
DateTime StartDate = DateTime.ParseExact(startDate, "yyyy-MM-dd", CultureInfo.InvariantCulture);
DateTime EndDate = DateTime.ParseExact(endDate, "yyyy-MM-dd", CultureInfo.InvariantCulture);

DateTime myDate = StartDate;  // setting the initial date

for (DateTime date = StartDate.AddDays(nrOfDaysToLoopBy); date.Date <= EndDate.Date; date = date.AddDays(nrOfDaysToLoopBy))
{
    Dates.Add("start-date=" + myDate.ToString("yyyy-MM-dd") + "&end-date=" + date.ToString("yyyy-MM-dd"));
    myDate = date.AddDays(1); 
}

// Dealing with any left over days.
if (myDate != EndDate && EndDate > myDate)
{
   Dates.Add("start-date=" + myDate.ToString("yyyy-MM-dd") + "&end-date=" + EndDate.ToString("yyyy-MM-dd"));
}

我的结果:

start-date=2014-01-01&end-date=2014-01-04
start-date=2014-01-05&end-date=2014-01-07

这里的问题是2014-01-01和2014-01-04之间有4天而不是3。

我想要得到的结果:

start-date=2014-01-01&end-date=2014-01-03
start-date=2014-01-04&end-date=2014-01-06

更新: 我们能否同意2014-01-01&end-date=2014-01-04之间的日子 2014-01-01, 2014-01-02, 2014-01-03, and 2014-01-04那是4

我现在已经玩了几个小时了,我所做的一切都没有解决问题。

2 个答案:

答案 0 :(得分:1)

  

这里的问题是2014-01-01和2014-01-04之间有4天而不是3。

有人可能会说,在2014-01-01和2014-01-04之间有3天:在2014-01-01和2014-01-04之间,有三个24小时通过:

  • 2014-01-01 - 2014-01-02
  • 2014-01-02 - 2014-01-03
  • 2014-01-03 - 2014-01-04

你知道,问题是如何在之间定义。如果要包含开始结束日期,则需要调整添加的日期数。

编辑:

这解决了这个问题。 nrOfDaysToLoopBy-1

 for (DateTime date = StartDate.AddDays(nrOfDaysToLoopBy-1); date.Date <= EndDate.Date; date = date.AddDays(nrOfDaysToLoopBy))
 {
  }

答案 1 :(得分:1)

只需更改声明:

DateTime date = StartDate.AddDays(nrOfDaysToLoopBy);

for循环初始化

DateTime date = StartDate.AddDays(nrOfDaysToLoopBy-1);

问题在于,当您添加天数时,在您呼叫它之间的“天数”实际上是您添加的天数+ 1.因此星期一 - &gt;星期一(添加零天)是1天,星期一 - &gt;星期二(添加一天)是2天,等等。这就是为什么你需要-1开始日期的修改。

您不需要对循环上的每个其他迭代进行此更改的原因是myDate = date.AddDays(1)行。此myDatedate之间的差异减少,将其恢复到正确的差异