【问题标题】:Adding every day from TimeDate.ElaspedDays to a list将 TimeDelta.Elapsed Days 中的每一天添加到列表中
【发布时间】:2014-03-18 17:24:14
【问题描述】:

我是使用 DateTime 的新手,但我想知道它是否能够动态地将两点之间的每一天添加到列表中。

例如,我的代码如下所示:

{
  startTime = new DateTime(startYear, startMonth, startDay);
  endTime = new DateTime(endYear, endMonth, endDay);        
  TimeSpan elapsed = endTime.Subtract(startTime);               
  startString = startDay.ToString();
  elapsedString = elapsed.TotalDays.ToString();
}

通过这个我可以返回两点之间的总天数。但是,elapsed.TotalDays.ToString(); 仅返回两点之间的总天数。我想知道是否可以在两点之间每天返回并将其放入列表中?

【问题讨论】:

  • 之间的意思是否包括开始和结束日期?
  • 好信息,你应该把它放在你的主要帖子正文中。我的最新编辑反映了这一变化。

标签: c# list datetime


【解决方案1】:

我认为你可以使用 for 进行迭代

list<int>Dates = new List<int>();

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

【讨论】:

  • 从未想过将forDateTime 一起使用。 :)
  • 老实说,我参考了 stackoverflow 链接 stackoverflow.com/questions/3359768/…> 所以感谢他
【解决方案2】:

您可以通过Enumerable.Range 做到这一点

using System;
using System.Linq;

var totalDays = (int)endTime.Subtract(startTime).TotalDays;
var days = Enumerable.Range(0, totalDays)
                     .Select(n => startTime.AddDays(n))
                     .ToList();

开始日期和结束日期都包含在days 列表中。首先将范围设置为从零开始,然后将n 单独保留。

【讨论】:

    【解决方案3】:

    试试这个,应该可以的:

    int totalDays = endTime.Subtract(startTime).TotalDays as int;
    List<DateTime> dates = new List<DateTime>(totalDays + 1); // using this constructor will make filling in the list more performant
    
    dates.Add(startTime); // since you mentionned start and end should be included
    
    for (var i = 1; i < totalDays; i++)
    {
        dates.Add(startTime.AddDays(i));
    }
    
    dates.Add(endTime);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 2018-03-31
      • 2020-03-19
      • 1970-01-01
      • 2021-12-22
      • 1970-01-01
      相关资源
      最近更新 更多