处理负时间跨度
在我的网格输出中,我计算TimeSpan
并获取其TotalHours
。 例如
(Eval("WorkedHours") - Eval("BadgedHours")).TotalHours
目标是将TotalHours
显示为39:44
,因此我需要将值从7.5
转换为07:30
。 这没问题……除非它是否定的!
我可以从Hours
with创建一个TimeSpan
对象
TimeSpan.FromHours( (Eval("WorkedHours") - Eval("BadgedHours")).TotalHours)
如果它是否定的,我无法将其转换为DateTime
以使用.ToString("HH:mm")
方法,并且TimeSpan
对象不支持格式字符串。
是不是有TimeSpan.Duration
方法? 我认为这会处理你想要做的事情。
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小时,这也将正常工作。
只需将其乘以-1或使用绝对值函数即可。
它的工作
mytimespam.Negate();
TimeSpan类中有一个Negate方法。
链接到MSDN文档: TimeSpan.Negate方法()
简单的解决方案是:
string format = "HH:mm"; if(hours < 0) format = "-" + format; hours = Math.Abs(hours)
嗨,我把它写成了一些我写的代码,希望它有所帮助
(结果)是一个int变量
(TimeSpan.FromMinutes(result)) < TimeSpan.Zero ? "-" + TimeSpan.FromMinutes(result).ToString(@"hh\:mm") : "" + TimeSpan.FromMinutes(result).ToString(@"hh\:mm");
我检查了每一个地方。但我没有得到一个正确的答案,为什么我用这种方式完成
TimeSpan diff = actualout.Subtract(actualin); string a =(diff.ToString()).ToString(); if(a.Contains("-")) { diff = new TimeSpan(0,0,0,0); }