43

在我的网格输出中,我计算 aTimeSpan并取其TotalHours. 例如

(Eval("WorkedHours") - Eval("BadgedHours")).TotalHours

目标是显示TotalHoursas 39:44,所以我需要将值从 转换7.507:30。这没问题......除非它是负面的!

我可以创建一个TimeSpan对象Hours

TimeSpan.FromHours( (Eval("WorkedHours") - Eval("BadgedHours")).TotalHours)

如果为负数,我无法将其转换为 aDateTime以使用该.ToString("HH:mm")方法,并且该TimeSpan对象不支持格式字符串。

4

9 回答 9

96

没有TimeSpan.Duration方法吗?我认为这将处理您正在尝试做的事情。

返回一个新的 TimeSpan 对象,其值为当前 TimeSpan 对象的绝对值。

于 2011-11-27T22:37:44.280 回答
11
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 小时,这也将正常工作。

于 2009-06-19T16:14:40.963 回答
9

只需将其乘以 -1 或使用绝对值函数。

于 2009-06-19T15:41:45.487 回答
9

TimeSpan 类中有一个 Negate 方法。

链接到 MSDN 文档: TimeSpan.Negate Method()

于 2011-11-01T11:47:51.023 回答
3

它的工作。试试这个

mytimespam.Negate();

于 2015-01-02T11:26:07.587 回答
3

简单的解决方案是:

string format = "HH:mm";
if(hours < 0)
  format = "-" + format;

hours = Math.Abs(hours)
于 2009-06-19T15:42:18.870 回答
1

嗨,我把它变成了我一直在写的一些代码,希望它有帮助

(结果) 是一个 int 变量

(TimeSpan.FromMinutes(result)) < TimeSpan.Zero ? "-" + TimeSpan.FromMinutes(result).ToString(@"hh\:mm") : "" + TimeSpan.FromMinutes(result).ToString(@"hh\:mm");

于 2014-11-18T15:19:48.637 回答
1
TimeSpan Diff = Date1 - Date2;

if ((int)Diff.TotalDays < 0) { // your code }
于 2019-06-22T13:06:49.017 回答
1

我检查了每一个地方。但我没有得到正确的答案,为什么我用这种方式完成

TimeSpan diff = actualout.Subtract(actualin);
 string a =(diff.ToString()).ToString();
if(a.Contains("-"))
 {        
 diff = new TimeSpan(0,0,0,0);
}
于 2018-02-20T09:04:38.797 回答