2012-04-26 75 views
3

我有一个包含Datetimes的列表。计算2个日期时间之差(Timespan + double)

要计算我使用TimeSpan的2个日期时间之间的差异。

public static List<DateTime> list = new List<DateTime>(); 
TimeSpan ts = new TimeSpan(); 
double result = 0; 

ts = DateTime.Now - list[list.Count-1]; 
result = ts.TotalSeconds; 

调试时这个代码两者DateTime.Nowlist[list.Count-1]具有DateTime是否其中DateTime.Now是关闭的过程更高则列表的值。

但由于某些原因,我在变量结果中一直得到0,究竟是怎么发生的?

最好的问候,皮特

+1

这工作得很好:http://ideone.com/2FViv – mellamokb 2012-04-26 14:45:56

+1

你分配给'list'有什么价值?在上面的代码中,它看起来像是一样的。 – SouthShoreAK 2012-04-26 14:47:56

回答

3

我只是尝试了以下,完美无缺。

  List<DateTime> list = new List<DateTime>(); 
      list.Add(DateTime.Now.AddDays(-1)); 
      list.Add(DateTime.Now); 
      list.Add(DateTime.Now.AddDays(1)); 
      TimeSpan ts = new TimeSpan(); 
      double result = 0; 

      ts = DateTime.Now - list[list.Count - 1]; 
      result = ts.TotalSeconds; 

附debbuging图片:

enter image description here

理由不工作可能是:

  1. 要么不被填充了名单
  2. 的价值或ts.TotalSeconds小于双倍范围(这几乎是不可能的。)
2

首先评论,你不需要= new TimeSpan(); - 当你重新设置ts进一步下跌你只能放弃这个反正。

当您看到result的值为0时,您的调试器开启了哪一行?你是否已经通过行设置了result?如果你在线上,那么该线还没有真正运行...

+0

啊好,赶不上新:)。啊,现在似乎已经在我的if语句中意外地改变了一个值,现在值正确填充了。 – PeterP 2012-04-26 14:53:05

+0

@PeterP,David M:是的,最好是摆脱'= new TimeSpan()',但这可能不是什么大不了的,因为它几乎肯定会被优化成相同的代码,无论如何,作为TimeSpan '是一个结构,所以无论如何它都由CLR进行零初始化。 – phoog 2012-04-26 15:01:54

1

而不是使用 ts = DateTime.Now --list [list.Count-1]; 使用 TS = DateTime.Now.Subtract(名单[list.Count-1]

1

我觉得时间差是小的几秒钟,它可能在毫秒或更小。尝试蜱这样。

结果= ts.Ticks;

1

您发布的代码没有问题(除非我建议您加入变量的声明和初始化)我必须猜测,但也许您正在“吞食”例外并通过空单?

然后行

ts = DateTime.Now - list[list.Count-1]; 

将抛出异常并且result将保留它的值为0

1

list没有任何元素,所以list.Count - 1没有打任何东西。另外,可能不会有整秒的计算。我添加了一个时间(使用蜱)与减去。除此之外,你所拥有的没有任何问题。

double result = 0; 
List<DateTime> list = new List<DateTime>(); 
list.Add(new DateTime(123456)); 

TimeSpan ts = DateTime.Now - list[list.Count - 1]; 
result = ts.TotalSeconds; 
相关问题