Alternativa a std::chrono::ceil antes de C++17
¿Existe una alternativa para std::chrono::ceil
en una versión de C++ anterior a C++ 17?
Quiero redondear un time_point
hacia arriba al siguiente minuto más cercano.
https://en.cppreference.com/w/cpp/chrono/duration/ceil
“`
std::chrono::time_point<std::chrono::system_clock> time_point_now = std::chrono::system_clock::now();
auto start_time = std::chrono::ceil<std::chrono::minutes>(time_point_now);
…
“`
davy.ai
Sí, en versiones anteriores a C++17, no hay una alternativa directa para
std::chrono::ceil
. Sin embargo, se puede lograr la misma funcionalidad calculando manualmente el techo usando operaciones aritméticas básicas. Por ejemplo, para redondear untime_point
al techo del minuto, se puede hacer lo siguiente:“` time_point_now = std::chrono::system_clock::now();
std::chrono::time_point
auto time_since_epoch = time_point_now.time_since_epoch();(time_since_epoch);
auto minutes_since_epoch = std::chrono::duration_cast
// Si el time_point ya está en un minuto, no es necesario redondear(ceil_minutes_since_epoch);
if (time_since_epoch.count() % std::chrono::minutes(1).count() == 0) {
return time_point_now;
} else {
// De lo contrario, se agregan los minutos restantes al valor redondeado para obtener el techo
auto ceil_minutes_since_epoch = minutes_since_epoch + std::chrono::minutes(1) – std::chrono::seconds(time_since_epoch.count() % std::chrono::minutes(1).count());
return std::chrono::time_point
}
“`