Time and Numeric Utilities
Duration Casting
std::chrono duration types make unit conversion explicit.
duration
A duration stores an amount of time together with its unit.
duration_cast
`duration_cast` converts a duration to another unit when the conversion may lose detail.
Duration Casting
duration_casting.cpp
Replay: real traced execution (multi-file project)
#include <chrono>
#include <iostream>
int main() {
int seconds = 125;
std::chrono::seconds total(seconds);
auto minutes = std::chrono::duration_cast<std::chrono::minutes>(total);
int leftover = static_cast<int>((total - minutes).count());
std::cout << "seconds=" << seconds << std::endl;
std::cout << "minutes=" << minutes.count() << std::endl;
std::cout << "leftover=" << leftover << std::endl;
return 0;
}
#include <chrono>
#include <iostream>
int main() {
int seconds = 45;
std::chrono::seconds total(seconds);
auto minutes = std::chrono::duration_cast<std::chrono::minutes>(total);
int leftover = static_cast<int>((total - minutes).count());
std::cout << "seconds=" << seconds << std::endl;
std::cout << "minutes=" << minutes.count() << std::endl;
std::cout << "leftover=" << leftover << std::endl;
return 0;
}
#include <chrono>
#include <iostream>
int main() {
int seconds = 3661;
std::chrono::seconds total(seconds);
auto minutes = std::chrono::duration_cast<std::chrono::minutes>(total);
int leftover = static_cast<int>((total - minutes).count());
std::cout << "seconds=" << seconds << std::endl;
std::cout << "minutes=" << minutes.count() << std::endl;
std::cout << "leftover=" << leftover << std::endl;
return 0;
}
seconds ← 125, total ← (empty), minutes ← (empty), leftover ← 5
4int main() {5 int seconds→ 125 = 125; //@seconds=45, 366167 std::chrono::seconds total→ (empty)(seconds125);8 auto minutes→ (empty) = std::chrono::duration_cast<std::chrono::minutes>(total(empty));9 int leftover→ 5 = static_cast<int>((total(empty) - minutes(empty)).count());1011 std::cout << "seconds=" << seconds125 << std::endl;12 std::cout << "minutes=" << minutes(empty).count() << std::endl;13 std::cout << "leftover=" << leftover5 << std::endl;14 return 0;15}outputseconds=125 minutes=2 leftover=5
seconds ← 45, total ← (empty), minutes ← (empty), leftover ← 45
4int main() {5 int seconds→ 45 = 45;67 std::chrono::seconds total→ (empty)(seconds45);8 auto minutes→ (empty) = std::chrono::duration_cast<std::chrono::minutes>(total(empty));9 int leftover→ 45 = static_cast<int>((total(empty) - minutes(empty)).count());1011 std::cout << "seconds=" << seconds45 << std::endl;12 std::cout << "minutes=" << minutes(empty).count() << std::endl;13 std::cout << "leftover=" << leftover45 << std::endl;14 return 0;15}outputseconds=45 minutes=0 leftover=45
seconds ← 3661, total ← (empty), minutes ← (empty), leftover ← 1
4int main() {5 int seconds→ 3661 = 3661;67 std::chrono::seconds total→ (empty)(seconds3661);8 auto minutes→ (empty) = std::chrono::duration_cast<std::chrono::minutes>(total(empty));9 int leftover→ 1 = static_cast<int>((total(empty) - minutes(empty)).count());1011 std::cout << "seconds=" << seconds3661 << std::endl;12 std::cout << "minutes=" << minutes(empty).count() << std::endl;13 std::cout << "leftover=" << leftover1 << std::endl;14 return 0;15}outputseconds=3661 minutes=61 leftover=1