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

本文关键字:格式 显示 分钟 错误 方法 Totalhours | 更新日期: 2023-09-27 17:57:37

我有下面的代码,它显示总小时数,但对于小于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。

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

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

当您使用.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。)

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

 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();

我使用.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();