fork(1) download
  1. #include <chrono>
  2. #include <iostream>
  3.  
  4. template<typename T>
  5. void print_time_diff(std::ostream& out, T prior, T latter)
  6. {
  7. namespace sc = std::chrono;
  8. auto diff = sc::duration_cast<sc::milliseconds>(latter - prior).count();
  9. auto const msecs = diff % 1000;
  10. diff /= 1000;
  11. auto const secs = diff % 60;
  12. diff /= 60;
  13. auto const mins = diff % 60;
  14. diff /= 60;
  15. auto const hours = diff % 24;
  16. diff /= 24;
  17. auto const days = diff;
  18.  
  19. bool printed_earlier = false;
  20. if (days >= 1) {
  21. printed_earlier = true;
  22. out << days << (1 != days ? " days" : " day") << ' ';
  23. }
  24. if (printed_earlier || hours >= 1) {
  25. printed_earlier = true;
  26. out << hours << (1 != hours ? " hours" : " hour") << ' ';
  27. }
  28. if (printed_earlier || mins >= 1) {
  29. printed_earlier = true;
  30. out << mins << (1 != mins ? " minutes" : " minute") << ' ';
  31. }
  32. if (printed_earlier || secs >= 1) {
  33. printed_earlier = true;
  34. out << secs << (1 != secs ? " seconds" : " second") << ' ';
  35. }
  36. if (printed_earlier || msecs >= 1) {
  37. printed_earlier = true;
  38. out << msecs << (1 != msecs ? " milliseconds" : " millisecond");
  39. }
  40. }
  41.  
  42. int main()
  43. {
  44. namespace sc = std::chrono;
  45. using hours = sc::hours;
  46. using mins = sc::minutes;
  47. using secs = sc::seconds;
  48. using msecs = sc::milliseconds;
  49.  
  50. auto const prior = std::chrono::system_clock::now();
  51. auto const latter = prior + hours(24) + hours(4) + mins(3) + secs(45);
  52. print_time_diff(std::cout, prior, latter);
  53. std::cout << '\n';
  54. auto const latter2 = prior + mins(32) + secs(54) + msecs(345);
  55. print_time_diff(std::cout, prior, latter2);
  56. }
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
1 day 4 hours 3 minutes 45 seconds 0 milliseconds
32 minutes 54 seconds 345 milliseconds