Я делаю некоторую математику с Промежутками в .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")
но я надеялся выполнить то же только при помощи строки формата.
Я использовал .Net Reflector на TimeSpan.ToString(...) и действительно похоже, что он не поддерживает любую форму отрицательного префикса для пользовательских форматов - так что я думаю, что вам не повезло, когда дело доходит до того, чтобы заставить его работать для вас, как указано выше. :(
Похоже, что вы застряли с этим кодом, но если это так, то сейчас самое время написать метод расширения, так вы сделаете свой код более понятным, и вам не придется повторять этот код в нескольких местах, например, что-то вроде:
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».
Стандартный формат «c» обеспечивает отрицательный знак, но включает все части временного интервала.
Dim ts As New TimeSpan(-10, 1, 2)
Debug.WriteLine(ts.ToString("c"))