格式化负TimeSpan

Cor*_*nie 25 .net vb.net formatting timespan

我正在使用.Net中的Timespans进行一些数学计算,偶尔总结会产生负时间跨度.当我显示结果时,我无法格式化它以包含负面指示器.

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

ts.ToString()
Run Code Online (Sandbox Code Playgroud)

这将显示"-10:00:00",这很好,但我不想显示秒,所以尝试了这个.

ts.ToString("hh\:mm")
Run Code Online (Sandbox Code Playgroud)

这将返回"10:00"并从前面删除" - ",这是问题的关键.我目前的解决方案是:

If(ts < TimeSpan.Zero, "-", "") & ts.ToString("hh\:mm")
Run Code Online (Sandbox Code Playgroud)

但我希望只使用格式字符串来完成同样的工作.

Wil*_*l A 14

我在TimeSpan.ToString(...)上使用了.Net Reflector,它看起来并不像自定义格式支持任何形式的负前缀 - 所以我觉得你在获取它时运气不好为你工作,如上所述.:(


Han*_*son 8

看起来你似乎坚持使用该代码,但如果是这样,这似乎是编写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
Run Code Online (Sandbox Code Playgroud)

然后你可以称之为:

ts.HoursAndMinutes()
Run Code Online (Sandbox Code Playgroud)