es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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);

“`

Tags:  , ,

Answer

  1. Avatar for 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 un time_point al techo del minuto, se puede hacer lo siguiente:

    “`
    std::chrono::time_point time_point_now = std::chrono::system_clock::now();

    auto time_since_epoch = time_point_now.time_since_epoch();
    auto minutes_since_epoch = std::chrono::duration_cast(time_since_epoch);

    // Si el time_point ya está en un minuto, no es necesario redondear
    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(ceil_minutes_since_epoch);
    }
    “`

Comments are closed.