代码之家  ›  专栏  ›  技术社区  ›  Corey Downie

设置负时间跨度的格式

  •  25
  • Corey Downie  · 技术社区  · 14 年前

    我正在用.Net中的时间盘进行一些数学,有时总和会产生负的时间跨度。当我显示结果时,我在格式化结果时遇到了一个问题,无法将其包括在负数指示器中。

    Dim ts as New Timespan(-10,0,0)
    
    ts.ToString()
    

    这将显示“-10:00:00”,这是好的,但我不想显示秒,所以尝试了这个。

    ts.ToString("hh\:mm")
    

    这返回“10:00”,并从前面删除了“-”,这是问题的关键。我目前的解决方案是:

    If(ts < TimeSpan.Zero, "-", "") & ts.ToString("hh\:mm")
    

    但我希望通过只使用格式字符串来实现同样的功能。

    6 回复  |  直到 14 年前
        1
  •  15
  •   Will A    14 年前

        2
  •  9
  •   Hans Olsson    14 年前

    似乎您被代码困住了,但如果是这样,那么现在似乎是编写extesion方法的大好时机,这样您就可以使代码更清晰,并且不必在多个地方重复代码,因此类似于:

    Module Extensions
        <System.Runtime.CompilerServices.Extension()> _
        Public Function HoursAndMinutes(ByVal ts As TimeSpan) As String
            Return If(ts < TimeSpan.Zero, "-", "") & ts.ToString("hh\:mm")
        End Function
    End Module
    

    ts.HoursAndMinutes()
    
        3
  •  2
  •   mattmc3    14 年前

        4
  •  2
  •   Johan Hjalmarsson    11 年前

    我用的是一个模糊的代码:

    if (timeDiff.TotalSeconds < 0)
               {
                   timeDiff = timeDiff.Negate();
                   TimeChangeTb.Text = string.Format("-{0:D2}:{1:D2}:{2:D2}",
                   timeDiff.Hours,
                   timeDiff.Minutes,
                   timeDiff.Seconds);
               }
               else
               {
                   TimeChangeTb.Text = string.Format("{0:D2}:{1:D2}:{2:D2}",
                   timeDiff.Hours,
                   timeDiff.Minutes,
                   timeDiff.Seconds);
               }
    

        5
  •  1
  •   dbasnett    14 年前

    标准格式“c”提供负号,但包括时间跨度的所有部分。

        Dim ts As New TimeSpan(-10, 1, 2)
        Debug.WriteLine(ts.ToString("c"))
    
        6
  •  0
  •   Remy    10 年前

    基于@ho1 answer,我构建了一个扩展方法。现在可能更容易用了。

    public static class TimeSpanUtil
    {
        public static string HoursAndMinutes(this TimeSpan ts) 
        {
            return (ts < TimeSpan.Zero ? "-" : "") + ts.ToString("hh:mm");     
        }        
    }
    
        7
  •  0
  •   SteveL    4 年前

    在测试了不同的方法之后,我做了以下工作:

    Public Module TimeExtensions
        <Extension>
        Public Function ToHourMinute(ByVal time As TimeSpan) As String
            Return $"{If(time < TimeSpan.Zero, "-", "")}{time:hh\:mm}"
        End Function
    End Module