处理负时间跨度

Posted

技术标签:

【中文标题】处理负时间跨度【英文标题】:Handle negative time spans 【发布时间】:2010-11-04 08:31:27 【问题描述】:

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

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

目标是将TotalHours 显示为39:44,因此我需要将值从7.5 转换为07:30。这没问题......除非它是负面的!

我可以使用

Hours 创建一个 TimeSpan 对象
TimeSpan.FromHours( (Eval("WorkedHours") - Eval("BadgedHours")).TotalHours)

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

【问题讨论】:

请考虑将代码 sn-ps 重新格式化为内联代码或代码段,并添加适当的平台标签(我猜是您的 sn-ps 中的 .NET)。 【参考方案1】:

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

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

【讨论】:

这是最简单的方法,只需减去您的两个 DateTimes,在结果上调用 Duration(),然后执行 TotalHours。【参考方案2】:
TimeSpan Diff = Date1 - Date2;

if ((int)Diff.TotalDays < 0)  // your code 

【讨论】:

【参考方案3】:

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

TimeSpan diff = actualout.Subtract(actualin);
 string a =(diff.ToString()).ToString();
if(a.Contains("-"))
         
 diff = new TimeSpan(0,0,0,0);

【讨论】:

比较简单的方法是比较if (diff &lt; TimeSpan.Zero)【参考方案4】:

TimeSpan 类中有一个 Negate 方法。

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

【讨论】:

【参考方案5】:

它的工作。试试这个

mytimespam.Negate();

【讨论】:

时间垃圾邮件,呵呵 ;)【参考方案6】:

你好,我把这个变成了我一直在写的一些代码,希望对你有帮助

(结果)是一个 int 变量

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

【讨论】:

【参考方案7】:

简单的解决方案是:

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

hours = Math.Abs(hours)

【讨论】:

【参考方案8】:
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 小时,这也将正常工作。

【讨论】:

【参考方案9】:

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

【讨论】:

对于任何在谷歌上搜索过的人:使用TimeSpan.Duration 方法。来自 MSDN:“返回一个新的 TimeSpan 对象,其值为当前 TimeSpan 对象的绝对值”。

以上是关于处理负时间跨度的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Selenium 中使用 @FindBy 注释来处理跨度文本?

整数序列的元素最大跨度值

007:整数序列的元素最大跨度值

整数序列的元素最大跨度值

Spark适用场景以及与Hadoop MapReduce优势对比

ReLU 可以处理负输入吗?