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

seconds
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;
}
  1. 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
  1. 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
  1. 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