【问题标题】:Convert Time to decimal in C#在 C# 中将时间转换为十进制
【发布时间】:2009-12-02 16:53:52
【问题描述】:

我需要做的是有两个由用户输入的已定义字符串,

string in = "9:35"; //am
string out = "11:55"; //am

我需要减去它们,这样就可以得到他们登录的总小时数。应该等于:

string total = "2:20"

然后,我需要将其转换为小数.. 所以,2:20 将是​​

string decimal = "2.33";

我不知道该怎么做,任何帮助将不胜感激!

P.S: id 也希望能够从十进制数计算他们签到的总小时数,所以基本上相反

【问题讨论】:

  • 请务必使用 24 小时制表示中午之后的时间。此外,如果时间跨度超过午夜或超过 24 小时,则需要将日期包括在计算中,或者必须使用更复杂的算法将其考虑在内。

标签: c# time


【解决方案1】:
DateTime dt1 = DateTime.Parse("11:55");    
DateTime dt2 = DateTime.Parse("9:35");

double span = (dt1 - dt2).TotalHours;

你真的需要“2:20”还是只是一个中间步骤?

编辑:如果你想回去,你只需要做一点数学。取小数的余数乘以 60,然后四舍五入。这些将是分钟,所以只需将它们添加到小时。

【讨论】:

  • 我想你已经把两个DateTimes 颠倒了;你得到的跨度是负数。
【解决方案2】:

或者你可以这样做:

decimal dec = Convert.ToDecimal(TimeSpan.Parse("11:30").TotalHours);
// returns:  11.5

【讨论】:

    【解决方案3】:

    我知道这是一篇非常古老的帖子,但它是 Google 在寻找将小时和分钟转换为十进制小时的方法时出现的第一篇。

    在处理超过 24 小时时(例如,在处理支付期间的小时数时),这些答案都不起作用。我这样处理转换:

    string HoursWorkedThisWeek = "50:08" 
    //50 hours and 8 minutes
    string[] a = HoursWorkedThisWeek.Split(new string[] { ":" }, StringSplitOptions.None);
    //a[0] contains the hours, a[1] contains the minutes
    decHours = Math.Round(Convert.ToDecimal(a[0]) + (Convert.ToDecimal(a[1]) / 60), 2); 
    //Result is 50.13
    

    【讨论】:

      【解决方案4】:

      这个怎么样?

      TimeSpan inTime = new TimeSpan(9, 35, 0); //or TimeSpan.Parse("9:35");
      TimeSpan outTime = new TimeSpan(11, 55, 0); //or TimeSpan.Parse("11:55");
      
      TimeSpan total = outTime - inTime;
      
      decimal timevalue = total.Hours + (total.Minutes > 0 ? total.Minutes/60 : 0);
      
      string totalString = timevalue.ToString();
      

      【讨论】:

        猜你喜欢
        • 2015-03-12
        • 2016-05-09
        • 2021-06-26
        • 1970-01-01
        • 2017-04-18
        • 1970-01-01
        • 2017-07-31
        • 2013-07-20
        • 2012-06-17
        相关资源
        最近更新 更多