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。
总小时数应仅显示总小时数减去分钟数。
当您使用.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();