处理负时间跨度

时间:2009-06-19 15:38:01

标签: c# .net datetime timespan

在我的网格输出中,我计算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对象不支持格式字符串。

9 个答案:

答案 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 }