将DateTime除以自定义增量到秒

时间:2014-06-17 18:10:01

标签: c# list datetime reporting timespan

小挑战。似乎无法弄清楚。

如果我有30个"部分"我想用这个值除以任意两个(开始和结束)日期,我该怎么做?

var sections = 30;
var start = new DateTime("2014-06-17T18:17:00.772Z");
var end = new DateTime("2014-06-17T19:10:29.123Z");
var dateRange = new List<DateTime>();

for(int i = 0; i < sections; i++)
{
// What! dateRange.Add( new DateTime(...) );
}

基本上,我需要30点数据。

但是当我开始经过&#34;秒或几分钟的时间时它变得复杂了#34;作为开始和结束日期。

那么我如何总是在指定的部分计数中捕获日期?

非常感谢任何帮助。

埃里克

3 个答案:

答案 0 :(得分:1)

你应该能够这样做:

var sections = 30;
var start = new DateTime(2015,12, 1);
var end = new DateTime(2016, 3, 1);
var dateRange = new List<DateTime>();

var difference = (end - start).TotalMilliseconds;  //difference in milliseconds
var oneSection = difference/sections;    //length on one section in milliseconds
var tempDate = start;
for (int i = 0; i < sections - 1; i++)   //add one section less
{
    tempDate = tempDate.AddMilliseconds(oneSection);
    dateRange.Add(tempDate);
}
dateRange.Add(end);   //add end as last section

答案 1 :(得分:1)

您可以计算开始日期和结束日期之间的差异。获得总秒数的差异,除以seciotns (30),这将为您提供start日期所需的增量。稍后您可以使用循环并填写dateRange,如:

var sections = 30;
var start = new DateTime(2015,1,1);
var end = new DateTime(2015,3,1);
var totalDays = Math.Abs((end - start).TotalSeconds);
var increment = totalDays / sections;
var dateRange = new List<DateTime>();
for (int i = 0; i < sections; i++)
{
    start = start.AddSeconds(increment);
    dateRange.Add(start);
}

列表中的最后一项不会是end日期。如果您想将end作为列表中的最后一项,请明确地执行以下操作:

dateRange[dateRange.Count - 1] = end;

答案 2 :(得分:0)

我假设您希望开始和结束时间“勾起”这些部分,这意味着您需要根据N-1段计算间隔。这是使用Linq的单线:

var sections = 30;
var start = DateTime.Parse("2014-06-17T18:17:00.772");
var end = DateTime.Parse("2014-06-17T19:10:29.123");

var dateRange = Enumerable.Range(0,sections)
                          .Select(i => start.AddTicks((end-start).Ticks/(sections-1) * i));

的产率:

2014-06-17 18:17:00Z 
2014-06-17 18:18:51Z 
2014-06-17 18:20:42Z 
2014-06-17 18:22:32Z 
2014-06-17 18:24:23Z 
2014-06-17 18:26:13Z 
2014-06-17 18:28:04Z 
2014-06-17 18:29:55Z 
2014-06-17 18:31:45Z 
2014-06-17 18:33:36Z 
2014-06-17 18:35:27Z 
2014-06-17 18:37:17Z 
2014-06-17 18:39:08Z 
2014-06-17 18:40:58Z 
2014-06-17 18:42:49Z 
2014-06-17 18:44:40Z 
2014-06-17 18:46:30Z 
2014-06-17 18:48:21Z 
2014-06-17 18:50:12Z 
2014-06-17 18:52:02Z 
2014-06-17 18:53:53Z 
2014-06-17 18:55:44Z 
2014-06-17 18:57:34Z 
2014-06-17 18:59:25Z 
2014-06-17 19:01:15Z 
2014-06-17 19:03:06Z 
2014-06-17 19:04:57Z 
2014-06-17 19:06:47Z 
2014-06-17 19:08:38Z 
2014-06-17 19:10:29Z