Ce face std::chrono::time_point
time_point<Ceas, Durata> este un moment: o durată numărată de la „epoca” ceasului (pentru system_clock, 1 ianuarie 1970 UTC). time_since_epoch() returnează această durată.
Operațiile au sens fizic: moment + durată = moment, moment − moment = durată, iar două momente se pot compara. Nu poți aduna două momente între ele.
C++20 adaugă alias-uri utile: sys_days (moment cu precizie de o zi), sys_seconds (precizie de o secundă). time_point_cast, floor, round schimbă precizia.
Ce returnează
Un moment în timp; time_since_epoch() returnează o durată.
Exemple
Exemplul 1: Operații cu momente
#include <chrono>
#include <print>
int main() {
using namespace std::chrono;
sys_seconds plecare = sys_days{2025y / July / 1} + 22h + 15min;
sys_seconds sosire = plecare + 9h + 40min;
std::println("Plecare: {}", plecare);
std::println("Sosire: {}", sosire);
std::println("Durata: {}", duration_cast<minutes>(sosire - plecare));
std::println("Sosește a doua zi: {}", floor<days>(sosire) > floor<days>(plecare));
}
Rezultat
Plecare: 2025-07-01 22:15:00
Sosire: 2025-07-02 07:55:00
Durata: 580min
Sosește a doua zi: true
Exemplul 2: time_since_epoch
#include <chrono>
#include <print>
int main() {
using namespace std::chrono;
sys_days ziua = 2000y / January / 1;
std::println("zile de la 1970: {}", ziua.time_since_epoch());
std::println("secunde: {}", duration_cast<seconds>(ziua.time_since_epoch()).count());
}
Rezultat
zile de la 1970: 10957d
secunde: 946684800
Greșeli frecvente
- Scazi momente de la ceasuri diferite (
system_clockșisteady_clock). Nu compilează, pentru că au epoci diferite și diferența nu are sens.
Comenzi înrudite
std::chrono::system_clock: Ceasul sistemului: data și ora reale (UTC), care pot fi transformate în dată calendaristică.std::chrono::duration: O durată de timp cu unitate de măsură: secunde, milisecunde, minute, ore. Conversiile sunt automate și sigure.std::chrono::year_month_day: O dată calendaristică (an, lună, zi) cu validare, ziua săptămânii și calcule cu luni și ani.