TimeSpan FormatString,可选小时

fre*_*hie 14 c# asp.net

我有一个时间跨度,ts大多数是分钟和秒,但有时是几个小时.我想ts返回一个格式化的字符串,它会给出以下结果:

3:30 (hours not displayed, showing only full minutes)
13:30 
1:13:30 (shows only full hours instead of 01:13:30)
Run Code Online (Sandbox Code Playgroud)

到目前为止,我有:

string TimeSpanText = string.Format("{0:h\\:mm\\:ss}", MyTimeSpan);
Run Code Online (Sandbox Code Playgroud)

但它没有给出上述结果.我怎样才能达到我想要的效果?

Gab*_*abe 12

也许你想要的东西

string TimeSpanText = string.Format(
    MyTimeSpan.TotalHours >= 1 ? @"{0:h\:mm\:ss}" : @"{0:mm\:ss}",
    MyTimeSpan); 
Run Code Online (Sandbox Code Playgroud)


Ben*_*Ben 6

我不认为单个格式字符串会给你你想要的东西,但自己构建输出是一个简单的任务:

public string FormatTimeSpan(TimeSpan ts)
{
    var sb = new StringBuilder();

    if ((int) ts.TotalHours > 0)
    {
        sb.Append((int) ts.TotalHours);
        sb.Append(":");
    }

    sb.Append(ts.Minutes.ToString("m"));
    sb.Append(":");
    sb.Append(ts.Seconds.ToString("ss"));

    return sb.ToString();
}
Run Code Online (Sandbox Code Playgroud)

编辑:更好的主意!

您可以将上面的方法作为TimeSpan类的扩展方法,如下所示:

public static class Extensions
{
    public static string ToMyFormat(this TimeSpan ts)
    {
        // Code as above.
    }
}
Run Code Online (Sandbox Code Playgroud)

然后使用它就像调用一样简单ts.ToMyFormat().