【问题标题】:Calculate difference between 2 datetimes (Timespan + double)计算 2 个日期时间之间的差异(时间跨度 + 双倍)
【发布时间】:2012-04-26 23:00:23
【问题描述】:

我有一个包含日期时间的列表。

要计算 2 DateTime 之间的差异,我使用 TimeSpan

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] 都有 DateTimes,其中 DateTime.Now 肯定高于列表的值。

但由于某种原因,我在变量结果中一直得到 0,到底是怎么回事?

最好的问候,皮特

【问题讨论】:

  • 这很好用:ideone.com/2FViv
  • 您为list 分配了什么值?在上面的代码中,它看起来像是 emtpy。

标签: c# .net


【解决方案1】:

我刚刚尝试了以下,效果很好。

            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;

附上调试图:

不工作的原因可能是:

  1. 您的列表没有被填充
  2. 或者ts.TotalSeconds的值小于双倍范围(这实际上是不可能的。)

【讨论】:

    【解决方案2】:

    第一个评论,你不需要= new TimeSpan(); - 当你再次设置ts 时,你只会丢弃它。

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

    【讨论】:

    • 啊,不错,新的越少越好:)。啊,似乎在我的 if 语句中意外更改了一个值,现在该值已正确填充。
    • @PeterP, David M:是的,最好去掉 ` = new TimeSpan(), but it's probably not a big deal either way, since it will almost certainly be optimized into the same code, anyway, as TimeSpan` 是一个结构,所以无论如何它都会被 CLR 零初始化。
    【解决方案3】:

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

    【讨论】:

      【解决方案4】:

      我认为时差很小,只有几秒,可能是毫秒甚至更小。试试这样的滴答声。

      结果 = ts.Ticks;

      【讨论】:

        【解决方案5】:

        您发布的代码没有任何问题(除了我建议您加入变量的声明和初始化)。我不得不猜测,但也许你正在“吞下”异常并传递空列表?

        然后一行

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

        将引发异常,result 将保留其值 0

        【讨论】:

          【解决方案6】:

          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;
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2010-11-08
            • 1970-01-01
            • 2021-11-25
            • 2011-08-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多