显示总经过分钟数的时间格式
Timeformat that show total elapsed minutes
我想让用户选择计时器的显示格式。用户可以选择的时间格式:
mm\:ss
mm\:ss\.f
mm\:ss\.ff
hh\:mm\:ss
hh\:mm\:ss\.f
hh\:mm\:ss\.ff
然后在代码中我有一个时间跨度被转换为字符串,如:
Return timespan.ToString(TimeFormat)
问题是,如果用户使用 mm:ss 格式,则会显示分钟,当它经过 59 分钟时,它会再次从零开始。我想要的是显示总分钟数。所以 60 分 43 秒
我已经阅读了整个 MS 文档,但找不到解决方案。
https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings
听起来您需要 'g' 格式:
This specifier outputs only what is needed. It is culture-sensitive and takes the form [-][d’:’]h’:’mm’:’ss[.FFFFFFF].
您可以 return 一个自定义格式的字符串。像这样:
if (TimeFormat == "some format")
return $"{timespan.TotalMinutes} minutes, {timespan.Seconds} seconds";
根据我从评论中得到的建议和更多的谷歌搜索,我没有找到一个非常像解决方案的框架,所以我找到了一个非常有用的 Select Case
。
Select Case objSettings.TimeFormat
Case "m\:ss"
Return String.Format("{0}:{1:00}", Math.Floor(time.TotalMinutes), time.Seconds)
Case "m\:ss\.f"
Return String.Format("{0}:{1}", Math.Floor(time.TotalMinutes), time.ToString("ss\.f"))
Case "m\:ss\.ff"
Return String.Format("{0}:{1}", Math.Floor(time.TotalMinutes), time.ToString("ss\.ff"))
Case "mm\:ss"
Return String.Format("{0:0#}:{1:00}", Math.Floor(time.TotalMinutes), time.Seconds)
Case "mm\:ss\.f"
Return String.Format("{0:0#}:{1:00}", Math.Floor(time.TotalMinutes), time.ToString("ss\.f"))
Case "mm\:ss\.ff"
Return String.Format("{0:0#}:{1:00}", Math.Floor(time.TotalMinutes), time.ToString("ss\.ff"))
Case "hh\:mm\:ss"
Return String.Format("{0:0#}:{1}", Math.Floor(time.TotalHours), time.ToString("mm\:ss"))
Case "hh\:mm\:ss\.f"
Return String.Format("{0:0#}:{1}", Math.Floor(time.TotalHours), time.ToString("mm\:ss\.f"))
Case "hh\:mm\:ss\.ff"
Return String.Format("{0:0#}:{1}", Math.Floor(time.TotalHours), time.ToString("mm\:ss\.ff"))
Case Else
Return time.ToString(objSettings.TimeFormat)
End Select
我想让用户选择计时器的显示格式。用户可以选择的时间格式:
mm\:ss
mm\:ss\.f
mm\:ss\.ff
hh\:mm\:ss
hh\:mm\:ss\.f
hh\:mm\:ss\.ff
然后在代码中我有一个时间跨度被转换为字符串,如:
Return timespan.ToString(TimeFormat)
问题是,如果用户使用 mm:ss 格式,则会显示分钟,当它经过 59 分钟时,它会再次从零开始。我想要的是显示总分钟数。所以 60 分 43 秒
我已经阅读了整个 MS 文档,但找不到解决方案。 https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings
听起来您需要 'g' 格式:
This specifier outputs only what is needed. It is culture-sensitive and takes the form [-][d’:’]h’:’mm’:’ss[.FFFFFFF].
您可以 return 一个自定义格式的字符串。像这样:
if (TimeFormat == "some format")
return $"{timespan.TotalMinutes} minutes, {timespan.Seconds} seconds";
根据我从评论中得到的建议和更多的谷歌搜索,我没有找到一个非常像解决方案的框架,所以我找到了一个非常有用的 Select Case
。
Select Case objSettings.TimeFormat
Case "m\:ss"
Return String.Format("{0}:{1:00}", Math.Floor(time.TotalMinutes), time.Seconds)
Case "m\:ss\.f"
Return String.Format("{0}:{1}", Math.Floor(time.TotalMinutes), time.ToString("ss\.f"))
Case "m\:ss\.ff"
Return String.Format("{0}:{1}", Math.Floor(time.TotalMinutes), time.ToString("ss\.ff"))
Case "mm\:ss"
Return String.Format("{0:0#}:{1:00}", Math.Floor(time.TotalMinutes), time.Seconds)
Case "mm\:ss\.f"
Return String.Format("{0:0#}:{1:00}", Math.Floor(time.TotalMinutes), time.ToString("ss\.f"))
Case "mm\:ss\.ff"
Return String.Format("{0:0#}:{1:00}", Math.Floor(time.TotalMinutes), time.ToString("ss\.ff"))
Case "hh\:mm\:ss"
Return String.Format("{0:0#}:{1}", Math.Floor(time.TotalHours), time.ToString("mm\:ss"))
Case "hh\:mm\:ss\.f"
Return String.Format("{0:0#}:{1}", Math.Floor(time.TotalHours), time.ToString("mm\:ss\.f"))
Case "hh\:mm\:ss\.ff"
Return String.Format("{0:0#}:{1}", Math.Floor(time.TotalHours), time.ToString("mm\:ss\.ff"))
Case Else
Return time.ToString(objSettings.TimeFormat)
End Select