如何从另一个中减去一个hh.mm格式时间(十进制)?

时间:2016-11-17 11:16:12

标签: c# sql

我在SQL数据库中有4条记录。其中有2个小时的小时1和小时2

  • 记录1:小时1 - 1.00,小时2 - 1.00
  • Record2:hours1- 9.00,hours2-5.30
  • 记录3:小时1至9.00,小时2至9.00
  • Record4:hours1-3.00,hours2-3.00

所以在这里我得到了这些列的总和:

SUM of column1 : 22.00
SUM of column1 : 18.30

这些是小数,但我认为是时间。

现在我想从column1 sum中减去column2 sum,即

22.00 - 18.30 

所以我会得到3.7这是错误的,因为我认为是时间。

我想要最终答案为:3.30(要求的理由:因此当我将此结果添加到18.30(18.30 + 3.30,即21.60 = 22.00小时为60分钟= 1小时)时,我得到总计22.00)。

任何人都可以帮我解决如何获得3.30的结果吗?我不能使用TimeFormat。

1 个答案:

答案 0 :(得分:2)

正如大家在评论中所说:需要进行转换,而且必须在求和之前完成转换。

以下是:

var times1 = new decimal[] { 1.00m, 9.00m, 9.00m, 3.00m };
var times2 = new decimal[] { 1.00m, 5.30m, 9.00m, 3.00m };

var hours1 = ActualHours(times1).Sum(); // using System.Linq;
var hours2 = ActualHours(times2).Sum();
var diff = hours1 - hours2;

var result = "Actual: hours1 = " + hours1 +
                   ", hours2 = " + hours2 +
                   ", diff   = " + diff + "\r\n" +
            "Printed: hours1 = " + Print(hours1) +
                   ", hours2 = " + Print(hours2) +
                   ", diff   = " + Print(diff);

使用的方法:

public IEnumerable<decimal> ActualHours(params decimal[] values)
{
    foreach (var v in values)
    {
        var t = Math.Truncate(v);
        yield return t + (v - t) / 0.6m;
    }
}

public string Print(decimal v)
{
    var t = Math.Truncate(v);
    return (t + (v - t) * 0.6m).ToString("0.00");
}

输出:

Actual: hours1 = 22.0, hours2 = 18.5, diff = 3.5
Printed: hours1 = 22.00, hours2 = 18.30, diff = 3.30