【问题标题】: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)。

标签: c# .net datetime timespan


【解决方案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 对象的绝对值”。
            猜你喜欢
            • 1970-01-01
            • 2011-02-12
            • 2015-10-01
            • 2011-04-29
            • 2011-09-15
            • 1970-01-01
            • 2019-04-28
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多