C# 显示总运行分钟数的时间格式

C# 显示总运行分钟数的时间格式,c#,wpf,vb.net,datetime,string-formatting,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 然后在代码中,我有一个时间跨度,它被转换为字符串,如: Return timespan.ToString(TimeFormat) 问题是,如果用户使用mm:ss格式,则会显示分钟数,当它经过59分钟时,它会再次从零开始。我想显示的是总分钟数。所以60分钟43秒 我已经阅读了整个MS文档,但找不

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

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文档,但找不到解决方案。

听起来您需要“g”格式:

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


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

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

根据我从评论中得到的建议和更多的谷歌搜索,我找不到一个非常像框架的解决方案,所以我用了一个脏兮兮的Select案例

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

不幸的是,使用标准的.ToString格式化程序是不可能的。我可以推荐你去看看这样的东西吗:如果是120分钟呢?您的格式显示两个字符,持续几分钟?您应该创建自己的函数。如果您不在其他任何地方使用它,则可能会覆盖到字符串。在该函数中,您可以检查输入,对于以mm开头的人,可以声明自己的处理。创建自己的字符串是否会占用大量CPU时间?您必须每次检查是否有一小时,如果有,请更改格式类型。仅供参考:该格式连接到一个计时器,该计时器由调度程序在60hzThanks刷新,以获取提示,但是这并没有给我任何关于用户希望看到的毫秒数的控制。如果用户担心>60分钟,他们真的担心毫秒数吗?我认为这应该是{timespan.TotalMinutes}-否则它会再次缠绕。@Neil:对,我修改了我的答案。谢谢。我想OP想要显示timespan.Seconds而不是timespan.TotalSeconds。例如60分43秒,而不是60分3643秒。