我正在尝试创建一个包含开始日期和结束日期的字符串。这可以循环超过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
我现在已经玩了几个小时了,我所做的一切都没有解决问题。
答案 0 :(得分:1)
这里的问题是2014-01-01和2014-01-04之间有4天而不是3。
有人可能会说,在2014-01-01和2014-01-04之间有3天:在2014-01-01和2014-01-04之间,有三个24小时通过:
你知道,问题是如何在之间定义。如果要包含开始和结束日期,则需要调整添加的日期数。
编辑:
这解决了这个问题。 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)
行。此将myDate
和date
之间的差异减少,将其恢复到正确的差异