Форматирование отрицательного TimeSpan

Я делаю некоторую математику с Промежутками в .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")

но я надеялся выполнить то же только при помощи строки формата.

25
задан Corey Downie 11 July 2010 в 17:02
поделиться

4 ответа

Я использовал .Net Reflector на TimeSpan.ToString(...) и действительно похоже, что он не поддерживает любую форму отрицательного префикса для пользовательских форматов - так что я думаю, что вам не повезло, когда дело доходит до того, чтобы заставить его работать для вас, как указано выше. :(

14
ответ дан 28 November 2019 в 21:46
поделиться

Похоже, что вы застряли с этим кодом, но если это так, то сейчас самое время написать метод расширения, так вы сделаете свой код более понятным, и вам не придется повторять этот код в нескольких местах, например, что-то вроде:

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()
8
ответ дан 28 November 2019 в 21:46
поделиться

Я согласен с Уиллом. MSDN и Reflector указывают на то, что вам не повезло. Лучшее, что вы получите, - это либо использовать то, что у вас есть, либо написать свой собственный IFormatProvider, либо использовать один из стандартных форматов для временного интервала, например «g».

2
ответ дан 28 November 2019 в 21:46
поделиться

Стандартный формат «c» обеспечивает отрицательный знак, но включает все части временного интервала.

    Dim ts As New TimeSpan(-10, 1, 2)
    Debug.WriteLine(ts.ToString("c"))
1
ответ дан 28 November 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: