using System; using System.Collections.Generic; using System.Text;
using System.Diagnostics;
public static class Program
public static string HumanReadableTimeSpan(this long milliseconds)
if (milliseconds == 0) return "0 ms";
StringBuilder sb = new StringBuilder();
Action<int, StringBuilder, int> addActionToSB =
(val, displayunit, zeroplaces) =>
" {0:DZ}X".Replace("X", displayunit.ToString())
.Replace("Z",zeroplaces.ToString())
var t = TimeSpan.FromMilliseconds(milliseconds);
addActionToSB(t.Days, new StringBuilder("d"), 1);
addActionToSB(t.Hours, new StringBuilder("h"), 2);
addActionToSB(t.Minutes, new StringBuilder("m"), 2);
addActionToSB(t.Seconds, new StringBuilder("s"), 2);
addActionToSB(t.Milliseconds, new StringBuilder("ms"), 3);
return sb.ToString().TrimStart();
public static void Main()
Stopwatch sw = new Stopwatch();
Console.WriteLine("Human Readable TimeSpan");
string output = 111311234567L.HumanReadableTimeSpan();
Console.WriteLine(output);
Console.WriteLine(sw.ElapsedTicks+" ticks");