Скажем, я конвертирую несколько секунд в объект TimeSpan следующим образом:
Dim sec = 1254234568
Dim t As TimeSpan = TimeSpan.FromSeconds(sec)
Как мне отформатировать объект TimeSpan в следующем формате:
>105hr 56mn 47sec
Есть ли встроенная функция или мне нужно написать пользовательскую функцию?
Что ж, проще всего отформатировать это самостоятельно, например
return string.Format("{0}hr {1}mn {2}sec",
(int) span.TotalHours,
span.Minutes,
span.Seconds);
В VB:
Public Shared Function FormatTimeSpan(span As TimeSpan) As String
Return String.Format("{0}hr {1}mn {2}sec", _
CInt(Math.Truncate(span.TotalHours)), _
span.Minutes, _
span.Seconds)
End Function
Я не знаю, упростит ли это форматирование TimeSpan
в .NET 4.
string.Format ("{0} час {1} мин {2} сек", (int) t.TotalHours, t.Minutes, t.Seconds);
Вам может понадобиться вычислить часы. Диапазон часов в TimeSpan.ToString составляет всего 0-23.
Самое худшее, что вам потребуется, это выполнить необработанное форматирование строки а-ля Jon Skeet.
Попробуйте эту функцию:
Public Shared Function GetTimeSpanString(ByVal ts As TimeSpan) As String
Dim output As New StringBuilder()
Dim needsComma As Boolean = False
If ts = Nothing Then
Return "00:00:00"
End If
If ts.TotalHours >= 1 Then
output.AppendFormat("{0} hr", Math.Truncate(ts.TotalHours))
If ts.TotalHours > 1 Then
output.Append("s")
End If
needsComma = True
End If
If ts.Minutes > 0 Then
If needsComma Then
output.Append(", ")
End If
output.AppendFormat("{0} m", ts.Minutes)
'If ts.Minutes > 1 Then
' output.Append("s")
'End If
needsComma = True
End If
Return output.ToString()
End Function