格式化否定的TimeSpan

我正在使用.Net中的Timespans进行一些数学计算,偶尔会得出一个负的Timespan。 当我显示结果时,我无法格式化它以包含负面指标。

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")

但我希望通过仅使用格式字符串来完成相同的操作。


我在TimeSpan.ToString(...)上使用了.Net Reflector,它看起来不像它支持任何形式的自定义格式的负面前缀 - 所以我认为在获取它时你运气不佳像上面一样为你工作。 :(


看起来你被这个代码困住了,但如果是这样的话,这似乎是编写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()

我同意威尔。 MSDN和Reflector都表示你运气不好。 最好的办法是使用你所拥有的,编写你自己的IFormatProvider,或者使用像g这样的时间标准格式之一。

链接地址: http://www.djcxy.com/p/18503.html

上一篇: Formatting a negative TimeSpan

下一篇: How do I convert a TimeSpan to a formatted string?