TimeSpan FormatString,可选小时

时间:2011-01-17 02:20:15

标签: 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)

到目前为止,我有:

string TimeSpanText = string.Format("{0:h\\:mm\\:ss}", MyTimeSpan);

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

2 个答案:

答案 0 :(得分:12)

也许你想要像

这样的东西
string TimeSpanText = string.Format(
    MyTimeSpan.TotalHours >= 1 ? @"{0:h\:mm\:ss}" : @"{0:mm\:ss}",
    MyTimeSpan); 

答案 1 :(得分: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();
}

编辑:更好主意!

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

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

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