How can I String.Format a TimeSpan object with a custom format in .NET?

后端 未结 19 1469
情深已故
情深已故 2020-11-22 12:25

What is the recommended way of formatting TimeSpan objects into a string with a custom format?

19条回答
  •  深忆病人
    2020-11-22 12:41

    Here is my extension method:

    public static string ToFormattedString(this TimeSpan ts)
    {
        const string separator = ", ";
    
        if (ts.TotalMilliseconds < 1) { return "No time"; }
    
        return string.Join(separator, new string[]
        {
            ts.Days > 0 ? ts.Days + (ts.Days > 1 ? " days" : " day") : null,
            ts.Hours > 0 ? ts.Hours + (ts.Hours > 1 ? " hours" : " hour") : null,
            ts.Minutes > 0 ? ts.Minutes + (ts.Minutes > 1 ? " minutes" : " minute") : null,
            ts.Seconds > 0 ? ts.Seconds + (ts.Seconds > 1 ? " seconds" : " second") : null,
            ts.Milliseconds > 0 ? ts.Milliseconds + (ts.Milliseconds > 1 ? " milliseconds" : " millisecond") : null,
        }.Where(t => t != null));
    }
    

    Example call:

    string time = new TimeSpan(3, 14, 15, 0, 65).ToFormattedString();
    

    Output:

    3 days, 14 hours, 15 minutes, 65 milliseconds
    

提交回复
热议问题