How do we get a time duration in C since a given year? Can we do it with ctime or should we use chrono as well?
CodePudding user response:
With <chrono> in C 20:
using namespace std::chrono;
using namespace std::chrono_literals;
const auto start = sys_days {2010y / January / 1};
const auto now = system_clock::now();
const auto dur = now - start;
dur is now a std::chrono::duration.
You can use it as is, or you could cast it to a specific unit, e.g.
long ms = duration_cast<milliseconds>(dur).count()
CodePudding user response:
This can be done quite simply with C 20 and the <chrono> library. Assuming you want to know the duration between now and 2000/01/01, you can do:
using namespace std::literals::chrono_literal;
auto now = std::chrono::system_clock::now();
auto delta = now - std::chrono::sys_days(2000y/1/1);
std::cout << delta;
Note a lot of chrono's feature are not implemented in some major compilers, you might use Howard Hinnant(author of <chrono>)'s Date library.
A demo using the date library: https://godbolt.org/z/ar8P6zY7E, you should be able to simply swap the namespace once the <chrono> library was fully implemented.
Edit, turns out I forgot to use C 20 flag for my demo, with it on: https://godbolt.org/z/5b7bEf6sf
