Ce face std::chrono::duration_cast
duration_cast<minutes>(d) transformă durata d în minute. Dacă unitatea țintă este mai mare, partea fracționară se taie (spre zero): 150 de secunde devin 2 minute.
Din C++17 există și std::chrono::floor (rotunjire în jos), ceil (în sus) și round (la cel mai apropiat). Pentru numere negative, duration_cast și floor dau rezultate diferite.
Cel mai des se folosește la afișarea unui timp măsurat: duration_cast<milliseconds>(sfarsit - inceput).count().
Parametri
| Parametru | Descriere |
|---|---|
ToDuration |
Tipul țintă, de exemplu std::chrono::minutes. |
d |
Durata de convertit. |
Ce returnează
Durata în noua unitate.
Exemple
Exemplul 1: Trunchiere și variantele de rotunjire
#include <chrono>
#include <print>
int main() {
using namespace std::chrono;
seconds s(150);
std::println("duration_cast: {}", duration_cast<minutes>(s));
std::println("floor: {}", floor<minutes>(s));
std::println("ceil: {}", ceil<minutes>(s));
std::println("round: {}", round<minutes>(s));
seconds negativ(-150);
std::println("-150 s: cast {}, floor {}", duration_cast<minutes>(negativ), floor<minutes>(negativ));
}
Rezultat
duration_cast: 2min
floor: 2min
ceil: 3min
round: 2min
-150 s: cast -2min, floor -3min
Exemplul 2: Ore, minute și secunde dintr-un număr de secunde
#include <chrono>
#include <print>
int main() {
using namespace std::chrono;
seconds total(7384);
auto h = duration_cast<hours>(total);
auto m = duration_cast<minutes>(total - h);
auto s = total - h - m;
std::println("{}h {}m {}s", h.count(), m.count(), s.count());
std::println("{:%H:%M:%S}", total); // formatare directă (C++20)
}
Rezultat
2h 3m 4s
02:03:04
Greșeli frecvente
- Te aștepți ca
duration_castsă rotunjească: 119 secunde devin 1 minut, nu 2. Pentru rotunjire foloseștestd::chrono::round.
Comenzi înrudite
std::chrono::duration: O durată de timp cu unitate de măsură: secunde, milisecunde, minute, ore. Conversiile sunt automate și sigure.std::chrono::steady_clock: Ceas monoton, care nu sare niciodată înapoi: ceasul corect pentru măsurarea duratelor.std::chrono::time_point: Un moment în timp măsurat după un anumit ceas. Diferența a două momente este o durată.