C#.net减去小时数

时间:2014-01-17 10:02:11

标签: c#

我正在使用C#.net。我想通过减去两个双精度值找到总小时数。我尝试了下面的代码,

            double val = 150.20;
            double val1 = 30.50;


            DateTime x = DateTime.FromOADate(val);
            DateTime y = DateTime.FromOADate(val1);

            double res = (x - y).TotalHours;

结果应该是119.40小时。但我没有得到正确的答案。可以任何1帮我如何减去两个双精度值并获得总数。

6 个答案:

答案 0 :(得分:3)

你可以这样做:

TimeSpan val = TimeSpan.FromHours(150.20);
TimeSpan val2 = TimeSpan.FromHours(30.50);
TimeSpan difference = val.Subtract(val2);

Console.WriteLine("{0} hours and {1} minutes",
                   difference.Hours, difference.Minutes);

Console.WriteLine("or, {0} hours in total",
                   difference.TotalHours); // displays 119.7

如果在150.20之间你不是指150.20小时而是150小时20分钟,那么将前两行更改为:

TimeSpan val = new TimeSpan(150, 20, 0);
TimeSpan val2 = new TimeSpan(30, 50, 0);

另一方面,如果你不需要分钟/小时算术,为什么不计算

double val = ...;
double val2 = ...;
double difference = val - val2;

答案 1 :(得分:2)

如果150.20表示150小时20分钟而30.50表示30小时50分钟,则结果应为119.30而不是119.40

    double val = 150.20;
    double val1 = 30.50;

    string[] temp1 = val.ToString().Split('.');
    string[] temp2 = val1.ToString().Split('.');
    TimeSpan ts1 = TimeSpan.FromHours(double.Parse(temp1[0])) + TimeSpan.FromMinutes(double.Parse(temp1[1] + "0"));
    TimeSpan ts2 = TimeSpan.FromHours(double.Parse(temp2[0])) + TimeSpan.FromMinutes(double.Parse(temp2[1] + "0"));

    TimeSpan ts = ts1.Subtract(ts2);
    double totalHours = ts.TotalHours;
    string[] temp = totalHours.ToString().Split('.');
    Console.WriteLine(temp[0] + "." + double.Parse("0." + temp[1]) * 60);

答案 2 :(得分:0)

从另一个日期中减去一个日期会返回一个TimeSpan,其编码方式与DateTime不同。 因此,当您将TimeSpan转换为double时,您会获得与您在起始位置时可能直观期望的数字不同的数字。

在这种情况下,valval1对应于日期:

  

29/05/1900 04:48:00和

     

29/01/1900 12:00:00

结果时间跨度是119天16小时48分钟,当转换回双倍时,给你2872.799999

我假设valval1代表DateTimes,所以只需使用TimeSpan类型进行其他地方建议的计算。

如果valval1代表小时数,那么只需使用

即可
double hours = val - val1;

如果150.20表示150小时20分钟,那么请使用:

TimeSpan GetTimeSpan(double val)
{
    int hours = (int)Math.Floor(val);
    int minutes = (int)Math.Round((val - hours) * 100);

    return new TimeSpan((int)hours, minutes, 0);
}

....
TimeSpan ts1 = GetTimeSpan(val);
TimeSpan ts2 = GetTimeSpan(val1);

TimeSpan diff = ts1 - ts2;

double resultHours = Math.Floor(diff.TotalHours) + ((double)diff.Minutes/100);

结果将是119.30

答案 3 :(得分:0)

TimeSpan dt1 = TimeSpan.FromHours(150.20);
TimeSpan dt2 = TimeSpan.FromHours(30.50);
TimeSpan difference = dt1 - dt2;
Label1.Text = difference.Hours.ToString() + ":" + difference.Minutes.ToString();

答案 4 :(得分:0)

我不确定我是否完全理解您的要求,但认为这些时间是参考时间

如果是这种情况,请尝试此

    double val = 150.20;
    double val1 = 30.50;

    DateTime referenceTime = DateTime.Now; // Or whatever is the time since when you have the hours 
    DateTime valDateTime = referenceTime.AddHours(val);
    DateTime val1DateTime = referenceTime.AddHours(val1);

    double hours = Math.Abs((val1DateTime - valDateTime).TotalHours);

答案 5 :(得分:0)

如果我们认为ValVal1基于TimeSpan的结果小时数如下:

        double val = 150.20;
        double val1 = 30.50;

        TimeSpan x = TimeSpan.FromHours(val);
        TimeSpan y = TimeSpan.FromHours(val1);

        double res =   x.Subtract(y).TotalHours;   // Display 119.7

如果我们假设ValVal1Days结果如下:

        double val = 150.20;
        double val1 = 30.50;

        TimeSpan x = TimeSpan.FromDays(val);
        TimeSpan y = TimeSpan.FromDays(val1);

        double res = x.Subtract(y).TotalHours;   // Display 2872.8