std::chrono::round(std::chrono::time_point)
Von cppreference.com
< cpp | chrono | time point
| Definiert in Header <chrono> |
||
| template< class ToDuration, class Clock, class Duration > constexpr std::chrono::time_point<Clock, ToDuration> |
(seit C++17) | |
Gibt den nächstgelegenen Zeitpunkt zurück, der in ToDuration darstellbar ist, gerundet auf die nächste gerade Zahl im Halbierungsfall.
Die Funktion nimmt nicht an der Überladungsauflö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.
Inhalt |
[edit] Parameter
| tp | - | Zeitpunkt, der auf den nächsten Wert gerundet werden soll |
[edit] Rückgabewert
tp, gerundet auf den nächstgelegenen Zeitpunkt mit der Dauer vom Typ ToDuration, gerundet auf die nächste gerade Zahl im Halbierungsfall.
[edit] 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())}; } |
[edit] Beispiel
Führen Sie diesen Code aus
#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
[edit] Siehe auch
| (C++11) |
konvertiert einen Zeitpunkt in einen anderen auf derselben Uhr mit einer anderen Dauer (Funktionstemplate) |
| konvertiert einen Zeitpunkt in einen anderen und rundet auf (Funktionstemplate) | |
| konvertiert einen Zeitpunkt in einen anderen und rundet ab (Funktionstemplate) | |
| (C++17) |
konvertiert eine Dauer in eine andere, rundet auf die nächste, bei Gleichstand zu geraden Zahlen (Funktionstemplate) |
| (C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11)(C++11) |
nächste ganze Zahl, Rundung weg von Null bei Halbwertigkeiten (Funktion) |