Все современные утилиты времени C ++ описаны в справочнике для <chrono>
библиотеки
Да начиная с c ++ 14 у нас есть std::literals::chrono_literals
, что позволяет нам использовать следующие литералы:
operator""h
operator""min
operator""s
operator""ms
operator""us
operator""ns
Например (из cppreference ):
#include <iostream>
#include <chrono>
int main()
{
using namespace std::chrono_literals;
auto day = 24h;
auto halfhour = 0.5h;
std::cout << "one day is " << day.count() << " hours\n"
<< "half an hour is " << halfhour.count() << " hours\n";
}
Не напрямую , но начиная с c ++ 11 существует std::chrono::duration
, с несколькими удобными вспомогательными типами, помогающими правильно описать время(например, std::chrono::millisceonds
, std::chrono::hours
и т. д.).Используя их, вы легко можете сделать то, что вам нужно.
Сокращенный пример из cppreference .Как вы можете видеть, единицу нужно печатать отдельно, но выбрать правильную единицу для печати было бы достаточно просто с некоторой магией шаблона.
#include <iostream>
#include <chrono>
int main()
{
std::chrono::seconds sec(1);
std::cout << sec.count() <<" second is equal to:\n";
// integer scale conversion with no precision loss: no cast
std::cout << std::chrono::microseconds(sec).count() << " microseconds\n";
// integer scale conversion with precision loss: requires a cast
std::cout << std::chrono::duration_cast<std::chrono::minutes>(sec).count()
<< " minutes\n";
}