Как быстро округлить timestamp до секунд, минут, часов, дней и т.д.?

Для округления timestamp до определенной единицы времени, такой как секунды, минуты, часы или дни, в C++ можно использовать различные подходы.

Самый простой способ округления timestamp до секунд состоит в том, чтобы разделить значение timestamp на количество миллисекунд в секунде (1000), округлить полученный результат до целого числа и затем умножить на количество миллисекунд в секунде.

Вот пример кода, демонстрирующий этот подход:

#include <iostream>
#include <cmath>
#include <chrono>

int main() {
    // Получаем текущий timestamp в миллисекундах
    auto timestamp = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();

    // Округляем timestamp до секунд
    auto roundedTimestamp = std::round(timestamp / 1000.0) * 1000;

    std::cout << "Округленное время: " << roundedTimestamp << std::endl;

    return 0;
}

Аналогичным образом можно округлить timestamp до других единиц времени.

Например, для округления до минут нужно разделить timestamp на количество миллисекунд в минуте (60 000), округлить полученный результат до целого числа и затем умножить на количество миллисекунд в минуте (60 000):

auto roundedTimestamp = std::round(timestamp / 60000.0) * 60000;

Для округления до часов нужно разделить timestamp на количество миллисекунд в часе (3 600 000), округлить полученный результат до целого числа и затем умножить на количество миллисекунд в часе (3 600 000):

auto roundedTimestamp = std::round(timestamp / 3600000.0) * 3600000;

Для округления до дней нужно разделить timestamp на количество миллисекунд в сутках (86 400 000), округлить полученный результат до целого числа и затем умножить на количество миллисекунд в сутках (86 400 000):

auto roundedTimestamp = std::round(timestamp / 86400000.0) * 86400000;

Таким образом, вы можете использовать эти подходы для округления timestamp до необходимой единицы времени в C++.