Namespaces
Variants

std::chrono:: round (std::chrono::time_point)

From cppreference.net
Definiert im Header <chrono>
template < class ToDuration, class Clock, class Duration >

constexpr std:: chrono :: time_point < Clock, ToDuration >

round ( const std:: chrono :: time_point < Clock, Duration > & tp ) ;
(seit C++17)

Gibt den nächsten Zeitpunkt zu tp zurück, der in ToDuration darstellbar ist, wobei bei Halbwertsfällen zur geraden Zahl gerundet wird.

Die Funktion nimmt nicht an der Überlagerungsauflösung teil, es sei denn ToDuration ist eine Spezialisierung von std::chrono::duration und std:: chrono :: treat_as_floating_point_v < typename ToDuration :: rep > ist false .

Inhaltsverzeichnis

Parameter

tp - Zeitpunkt zum Runden auf den nächstgelegenen Wert

Rückgabewert

tp auf den nächsten Zeitpunkt gerundet mit einer Dauer vom Typ ToDuration , bei halben Werten wird zur geraden Zahl gerundet.

Mögliche Implementierung

namespace detail
{
    template<class> inline constexpr bool is_duration_v = false;
    template<class Rep, class Period> inline constexpr bool is_duration_v<
        std::chrono::duration<Rep, Period>> = true;
}
template<class To, class Clock, class FromDuration,
         class = std::enable_if_t<detail::is_duration_v<To> &&
                !std::chrono::treat_as_floating_point_v<typename To::rep>>>
constexpr std::chrono::time_point<Clock, To> round(
    const std::chrono::time_point<Clock, FromDuration>& tp)
{
    return std::chrono::time_point<Clock, To>{
        std::chrono::round<To>(tp.time_since_epoch())};
}

Beispiel

#include <chrono>
#include <iostream>
#include <string>
template<typename TimePoint>
std::string to_string(const TimePoint& time_point)
{
    return std::to_string(time_point.time_since_epoch().count());
}
int main()
{
    using namespace std::literals::chrono_literals;
    using Sec = std::chrono::seconds;
    std::cout << "Time point\t" "Cast\t" "Floor\t" "Round\t" "Ceil\n";
    std::cout << "(ms)\t\t"     "(s)\t"  "(s)\t"   "(s)\t"   "(s)\n";
    for (const auto value_ms : {5432ms, 5678ms})
    {
        std::chrono::time_point<std::chrono::system_clock, std::chrono::milliseconds>
            time_point_ms(value_ms);
        std::cout
            << to_string(time_point_ms) << "\t\t"
            << to_string(std::chrono::time_point_cast<Sec>(time_point_ms)) << '\t'
            << to_string(std::chrono::floor<Sec>(time_point_ms)) << '\t'
            << to_string(std::chrono::round<Sec>(time_point_ms)) << '\t'
            << to_string(std::chrono::ceil<Sec>(time_point_ms)) << '\n';
    }
}

Ausgabe:

Time point	Cast	Floor	Round	Ceil
(ms)		(s)	(s)	(s)	(s)
5432		5	5	5	6
5678		5	5	6	6

Siehe auch

konvertiert einen Zeitpunkt zu einem anderen Zeitpunkt auf derselben Uhr, mit einer anderen Dauer
(Funktions-Template)
konvertiert einen time_point zu einem anderen, aufrundend
(Funktions-Template)
konvertiert einen time_point zu einem anderen, abrundend
(Funktions-Template)
konvertiert eine Dauer zu einer anderen, rundend zur nächsten, bei Gleichheit zur geraden Zahl
(Funktions-Template)
(C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11) (C++11)
nächstgelegene Ganzzahl, bei halben Zahlen weg von Null rundend
(Funktion)