在我的网格输出中,我计算TimeSpan
并取其TotalHours
。 e.g。
(Eval("WorkedHours") - Eval("BadgedHours")).TotalHours
目标是将TotalHours
显示为39:44
,因此我需要将值从7.5
转换为07:30
。这没问题......除非它是否定的!
我可以使用
从TimeSpan
创建Hours
对象
TimeSpan.FromHours( (Eval("WorkedHours") - Eval("BadgedHours")).TotalHours)
如果是否定的,我无法将其转换为DateTime
以使用.ToString("HH:mm")
方法,而TimeSpan
对象不支持格式字符串。
答案 0 :(得分:74)
是否有TimeSpan.Duration
方法?我认为这会处理你想要做的事情。
答案 1 :(得分:9)
static string ToHMString(TimeSpan timespan) {
if (timespan.Ticks < 0) return "-" + ToHMString(timespan.Negate());
return timespan.TotalHours.ToString("#0") + ":" + timespan.Minutes.ToString("00");
}
Console.WriteLine(ToHMString(TimeSpan.FromHours(3))); //Prints "3:00"
Console.WriteLine(ToHMString(TimeSpan.FromHours(-27.75))); //Prints "-28:45"
如果时间跨度超过24小时,这也可以正常工作。
答案 2 :(得分:8)
只需将其乘以-1或使用绝对值函数。
答案 3 :(得分:5)
TimeSpan类中有一个Negate方法。
链接到MSDN文档: TimeSpan.Negate Method()
答案 4 :(得分:4)
它的工作。这个
mytimespam.Negate();
答案 5 :(得分:3)
简单的解决方案是:
string format = "HH:mm";
if(hours < 0)
format = "-" + format;
hours = Math.Abs(hours)
答案 6 :(得分:1)
嗨,我把它写成了一些我一直在编写的代码,希望有所帮助
(results)是一个int变量
(TimeSpan.FromMinutes(result)) < TimeSpan.Zero ? "-" + TimeSpan.FromMinutes(result).ToString(@"hh\:mm") : "" + TimeSpan.FromMinutes(result).ToString(@"hh\:mm");
答案 7 :(得分:0)
我检查过每一个地方。但我没有得到正确答案,为什么我用这种方式完成
TimeSpan diff = actualout.Subtract(actualin);
string a =(diff.ToString()).ToString();
if(a.Contains("-"))
{
diff = new TimeSpan(0,0,0,0);
}
答案 8 :(得分:0)
TimeSpan Diff = Date1 - Date2;
if ((int)Diff.TotalDays < 0) { // your code }