fork download
  1. using System;
  2.  
  3. namespace ConsoleApplication
  4. {
  5. public class Program
  6. {
  7. public static void Main()
  8. {
  9. Console.WriteLine("100ms: " + ToMostNonZeroTime(100));
  10. Console.WriteLine("1000ms: " + ToMostNonZeroTime(1000));
  11. Console.WriteLine("10000ms: " + ToMostNonZeroTime(10000));
  12. Console.WriteLine("100000ms: " + ToMostNonZeroTime(100000));
  13. Console.WriteLine("1000000ms: " + ToMostNonZeroTime(1000000));
  14. Console.WriteLine("10000000ms: " + ToMostNonZeroTime(10000000));
  15. Console.WriteLine("100000000ms: " + ToMostNonZeroTime(100000000));
  16. Console.WriteLine("1000000000ms: " + ToMostNonZeroTime(1000000000));
  17. Console.WriteLine("20000000000ms: " + ToMostNonZeroTime(20000000000L));
  18. Console.WriteLine("200000000000ms: " + ToMostNonZeroTime(200000000000L));
  19. }
  20.  
  21. static string ToMostNonZeroTime(long ms) {
  22. const int hundretsNanosecondsInMillisecond = 10000;
  23. long ticks = (long)ms * hundretsNanosecondsInMillisecond;
  24. var dt = new DateTime(ticks);
  25.  
  26. if((dt.Year - 1) > 0) { // starts with 1
  27. double daysToYear = (dt.DayOfYear - 1) * 1.0 / (DateTime.IsLeapYear(dt.Year) ? 366 : 365);
  28. daysToYear += dt.Year - 1;
  29. return $"{daysToYear:0.0} years";
  30. }
  31. if((dt.Month - 1) > 0) {
  32. double daysToMonth = (dt.Day - 1) * 1.0 / DateTime.DaysInMonth(dt.Year, dt.Month);
  33. daysToMonth += dt.Day - 1;
  34. return $"{daysToMonth:0.0} months";
  35. }
  36. // can use TimeSpan then:
  37. var ts = TimeSpan.FromMilliseconds(ms);
  38. if(ts.TotalDays >= 1)
  39. return $"{ts.TotalDays:0.0} days";
  40. if(ts.TotalHours >= 1)
  41. return $"{ts.TotalHours:0.0} hours";
  42. if(ts.TotalMinutes >= 1)
  43. return $"{ts.TotalMinutes:0.0} minutes";
  44. if(ts.TotalSeconds >= 1)
  45. return $"{ts.TotalSeconds:0.0} seconds";
  46. return $"{ms} milliseconds";
  47. }
  48. }
  49. }
  50.  
Success #stdin #stdout 0s 131776KB
stdin
Standard input is empty
stdout
100ms: 100 milliseconds
1000ms: 1.0 seconds
10000ms: 10.0 seconds
100000ms: 1.7 minutes
1000000ms: 16.7 minutes
10000000ms: 2.8 hours
100000000ms: 1.2 days
1000000000ms: 11.6 days
20000000000ms: 19.6 months
200000000000ms: 6.3 years