我有一些代码,例如27:30(27小时30分钟)并将其转换为小数,如27.5。我有另一个相反的功能。
public class Time
{
public static string Hours(decimal d)
{
return TimeSpan.FromHours((double)(d + 0.005M)).ToString("h\\:mm");
}
public static decimal Hours(string s)
{
decimal r;
if (decimal.TryParse(s, out r))
return r;
return (decimal)TimeSpan.Parse(s).TotalHours + 0.005M;
}
}
问题是从十进制到字符串的转换似乎包裹到24小时。如果我给它30.0它给了我6:00这是错的。应该是30:00
我该怎么办才能避免包裹?
由于
答案 0 :(得分:3)
TotalHours
没有格式说明符,所以你必须自己编写整个逻辑:
public static string Hours(decimal d)
{
var ts = TimeSpan.FromHours((double)(d + 0.005M));
return string.Format("{0:0}:{1:00}", (int)ts.TotalHours, ts.Minutes);
}
(int)ts.TotalHours
从小时开始截断minuts。
答案 1 :(得分:0)
使用DateTime.ToString
仅获取会议记录,并自行计算小时数。
return string.Format("{0:0}:{1}", Math.Truncate(d+0.005m), TimeSpan.FromHours(d+0.005m).ToString("mm"));
答案 2 :(得分:0)
h
格式仅报告未计入天数的小时数。请参阅here。
如果您想要非标准行为,可以通过添加d
输出天数或在自己的代码中执行转换。