显示经过的总分钟数的时间格式

时间:2019-03-06 14:54:44

标签: c# wpf vb.net datetime string-formatting

我想给用户选择显示计时器的格式的选项。用户可以选择的时间格式:

mm\:ss
mm\:ss\.f
mm\:ss\.ff
hh\:mm\:ss
hh\:mm\:ss\.f
hh\:mm\:ss\.ff

然后在代码中,我有一个时间跨度,该时间跨度会转换为String,例如:

Return timespan.ToString(TimeFormat)

问题是,如果用户使用mm:ss格式,则会显示Minutes,并且经过59分钟后,它将再次从零开始。我想要的是显示总分钟数。所以60分43秒

我已经阅读了整个MS文档,但找不到解决方案。 https://docs.microsoft.com/en-us/dotnet/standard/base-types/standard-date-and-time-format-strings

3 个答案:

答案 0 :(得分:2)

您可以返回一个自定义格式的字符串。像这样:

if (TimeFormat == "some format")
    return $"{timespan.TotalMinutes} minutes, {timespan.Seconds} seconds";

答案 1 :(得分:0)

听起来您需要'g'格式:

  

此说明符仅输出所需的内容。它对文化敏感,格式为[-] [d':'] h':'mm':'ss [.FFFFFFF]。

Details here

答案 2 :(得分:0)

根据我从评论中得到的建议以及更多的谷歌搜索,我没有找到一个像解决方案这样的框架,所以我发现了一个肮脏的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