我有以下代码显示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>
总小时数应仅显示总小时数减去分钟数。
答案 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();