using System; using System.Text;
using System.Diagnostics;
public static class Program
public static string HumanReadableTicks(this long ticks)
if (ticks == 0) return "0 ns";
StringBuilder SB = new StringBuilder();
Action<long, string, int> addUnittoSB =
(val, displayunit, zeroplaces) =>
" {0:DZ}X".Replace("X", displayunit)
.Replace("Z", zeroplaces.ToString())
var t = TimeSpan.FromTicks(ticks);
addUnittoSB((long)t.Days, "d", 1);
addUnittoSB((long)t.Hours, "h", 1);
addUnittoSB((long)t.Minutes, "m", 1);
addUnittoSB((long)t.Seconds, "s", 1);
addUnittoSB((long)t.Milliseconds, "ms", 3);
addUnittoSB((long)((int)((t.TotalMilliseconds - (int)t.TotalMilliseconds) * 1000)), "µs", 3);
addUnittoSB((long)Convert.ToUInt64((((decimal)(t.Ticks * 100) % 1000))), "ns", 3);
return SB.ToString().TrimStart();
public static void Main()
Stopwatch sw = new Stopwatch();
Console.WriteLine("Human Readable Ticks program ran for");
System.Threading.Thread.Sleep(1345);
Console.WriteLine(sw.ElapsedTicks + " ticks or ");
Console.WriteLine(string.Format("{0:N0} nanoseconds (ns).",sw.ElapsedTicks*100));
Console.WriteLine("Human Readable format");
Console.WriteLine(sw.ElapsedTicks.HumanReadableTicks());