using System; using System.Globalization; using System.Linq; using System.Collections.Generic; public class Test { public static string GetReadableTimespan(TimeSpan ts) { const int SECOND = 1; const int MINUTE = 60 * SECOND; const int HOUR = 60 * MINUTE; const int DAY = 24 * HOUR; const int MONTH = 30 * DAY; double delta = Math.Abs(ts.TotalSeconds); if (delta < 0) { return "not yet"; } if (delta < 1 * MINUTE) { return ts.Seconds == 1 ? "one second ago" : ts.Seconds + " seconds ago"; } if (delta < 2 * MINUTE) { return "a minute ago"; } if (delta < 45 * MINUTE) { return ts.Minutes + " minutes ago"; } if (delta < 90 * MINUTE) { return "an hour ago"; } if (delta < 24 * HOUR) { return ts.Hours + " hours ago"; } if (delta < 48 * HOUR) { return "yesterday"; } if (delta < 30 * DAY) { return ts.Days + " days ago"; } if (delta < 12 * MONTH) { int months = Convert.ToInt32(Math.Floor((double)ts.Days / 30)); return months <= 1 ? "one month ago" : months + " months ago"; } else { int years = Convert.ToInt32(Math.Floor((double)ts.Days / 365)); return years <= 1 ? "one year ago" : years + " years ago"; } } public static void Main() { string[] strTimeSpans = new[]{"00hr:00min:17sec","00hr:03min:18sec","00hr:05min:25sec","01hr:39min:44sec"}; TimeSpan[] timespans = strTimeSpans .Select(s => { var parts = s.Split(':'); int hour = int.Parse(parts[0].Substring(0, 2)); int min = int.Parse(parts[1].Substring(0, 2)); int sec = int.Parse(parts[2].Substring(0, 2)); return new TimeSpan(hour, min, sec); }).ToArray(); foreach (TimeSpan ts in timespans) Console.WriteLine(GetReadableTimespan(ts)); } }