Totalhours方法以错误的格式显示分钟

时间:2014-04-09 10:42:25

标签: c# .net

我有以下代码显示totalhours,但totalhours显示不同于60分钟的值。那是35分钟或45分钟(大于30分钟),它分别显示为.533和.75,当我对这些值应用Convert.ToInt32()时,它将其舍入为1,这是我不想要的。

int imins = 31; 
TimeSpan ts = TimeSpan.FromMinutes(imins);           
Console.WriteLine(Convert.ToInt32( ts.TotalHours) +":" + ts.Minutes); //string.Format("{0:00}:{1:00}", 
Console.Read();

我的目的是以格式示例hh:mm显示时间,但如果我使用总小时数。小时说显示31分钟,我得到的输出是01:31这是错误的,应该是00:31。< / p>

总小时数应仅显示总小时数减去分钟数。

3 个答案:

答案 0 :(得分:2)

当您使用.NET 4时,您可以使用TimeSpan.ToString(string)为您进行格式化,从而简化您的生活

using System;

class Test
{
    static void Main()
    {
        int minutes = 31; 
        TimeSpan ts = TimeSpan.FromMinutes(minutes);
        string text = ts.ToString("h':'mm");
        Console.WriteLine(text); // 0:31
    }
}

编辑:如果你需要它进入多天,但仍然只显示小时数,我不确定TimeSpan是否处理了这个问题。在这种情况下,您可以使用简单的强制转换为int

using System;

class Test
{
    static void Main()
    {
        int minutes = 31; 
        TimeSpan ts = TimeSpan.FromMinutes(minutes);
        string text = string.Format("{0}:{1:mm}", (int) ts.TotalHours, ts);
        Console.WriteLine(text); // 0:31
    }
}

或者使用我的Noda Time库,支持支持:

using System;
using NodaTime;
using NodaTime.Text;

class Test
{
    static void Main()
    {
        Duration duration = Duration.FromMinutes(6000);
        var pattern = DurationPattern.CreateWithInvariantCulture("H:mm");
        string text = pattern.Format(duration);
        Console.WriteLine(text); // 0:31
    }
}

(假设您希望100小时的输出为100:00而不是4:04:00。)

答案 1 :(得分:1)

Math.Truncate()上使用Convert.ToInt32()代替ts.TotalHours它会计算指定的双精度浮点数的整数部分。

 int imins = 31; 
            TimeSpan ts = TimeSpan.FromMinutes(imins);           
            Console.WriteLine(Math.Truncate(ts.TotalHours) + ":" + ts.Minutes  );            //string.Format("{0:00}:{1:00}", 
            Console.Read();

如果你想要这样的输出00:31,你可以

int imins = 31;
            TimeSpan ts = TimeSpan.FromMinutes(imins);
            Console.WriteLine(Math.Truncate(ts.TotalHours).ToString().PadLeft(2,'0') + ":" +  ts.Minutes.ToString().PadLeft(2,'0'));            //string.Format("{0:00}:{1:00}", 
            Console.Read();

答案 2 :(得分:0)

我使用.Net 3.5

以这种方式应用它
int imins = 31;    
TimeSpan ts = TimeSpan.FromMinutes(imins);  
string sHours = ts.Hours.ToString();

if (sHours.Length == 1)
  sHours = "0" + sHours;

string sMinutes = ts.Minutes.ToString();

if (sMinutes.Length == 1)
  sMinutes = "0" + sMinutes;

Console.WriteLine(sHours + ":" + sMinutes);
Console.Read();