处理负时间跨度

在我的网格输出中,我计算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); }