C++17中std::chrono::duration和std::chrono::time_point的舍入函数

news/2025/2/23 9:52:13

文章目录

    • 1. std::chrono::duration的舍入函数
      • 1.1 floor
      • 1.2 ceil
      • 1.3 round
    • 2. std::chrono::time_point的舍入函数
      • 2.1 示例
    • 3. 舍入函数的应用场景
      • 3.1 时间测量
      • 3.2 数据记录
      • 3.3 时间同步
    • 4. 总结

在C++17中, std::chrono库提供了一组强大的时间处理工具,包括 std::chrono::durationstd::chrono::time_point。这些工具不仅支持时间间隔和时间点的表示,还引入了舍入函数,用于将时间值转换为指定精度的近似值。本文将详细介绍这些舍入函数的使用方法和应用场景。

1. std::chrono::duration的舍入函数

std::chrono::duration是一个模板类,用于表示时间间隔。在C++17中,std::chrono提供了floorceilround三个舍入函数,用于将duration值转换为指定精度的近似值。

1.1 floor

floor函数将duration值向下舍入到指定的精度。例如,将秒级时间间隔舍入到毫秒级时,floor会丢弃小于毫秒的部分。

#include <chrono>
#include <iostream>

int main() {
    std::chrono::duration<double> d{1.23456};
    auto rounded = std::chrono::floor<std::chrono::milliseconds>(d);
    std::cout << rounded.count() << "ms\n";  // 输出:1234ms
}

1.2 ceil

ceil函数将duration值向上舍入到指定的精度。例如,将秒级时间间隔舍入到毫秒级时,ceil会将小于毫秒的部分进位。

std::chrono::duration<double> d{1.23456};
auto rounded = std::chrono::ceil<std::chrono::milliseconds>(d);
std::cout << rounded.count() << "ms\n";  // 输出:1235ms

1.3 round

round函数将duration值四舍五入到指定的精度。它在半数情况下会舍入到最接近的偶数。

std::chrono::duration<double> d{1.23456};
auto rounded = std::chrono::round<std::chrono::milliseconds>(d);
std::cout << rounded.count() << "ms\n";  // 输出:1235ms

2. std::chrono::time_point的舍入函数

std::chrono::time_point表示某个时钟上的特定时刻。与duration类似,time_point也支持floorceilround函数,用于将时间点舍入到指定的精度。

2.1 示例

以下代码展示了如何对time_point进行舍入操作:

#include <chrono>
#include <iostream>

int main() {
    auto now = std::chrono::system_clock::now();
    auto rounded = std::chrono::round<std::chrono::seconds>(now);

    std::time_t t = std::chrono::system_clock::to_time_t(rounded);
    std::cout << std::ctime(&t);  // 输出舍入后的时间点
}

在上述代码中,now是一个time_point,表示当前时间。通过round函数,我们将时间点舍入到秒级精度。

3. 舍入函数的应用场景

3.1 时间测量

在性能分析或计时场景中,时间间隔可能需要舍入到更易读的单位(如毫秒或秒)。舍入函数可以方便地实现这一需求。

3.2 数据记录

当记录时间戳时,可能需要将时间点舍入到特定的精度,以减少存储空间或提高数据一致性。

3.3 时间同步

在分布式系统中,时间点的舍入可以用于同步不同节点的时间,确保它们在相同的精度级别上操作。

4. 总结

C++17中引入的std::chrono::durationstd::chrono::time_point的舍入函数,为时间处理提供了极大的便利。通过floorceilround函数,开发者可以轻松地将时间值舍入到指定的精度,从而简化代码逻辑并提高代码的可读性。

这些函数不仅适用于时间间隔的处理,还可以用于时间点的舍入,广泛应用于时间测量、数据记录和时间同步等场景。如果你正在处理时间相关的任务,不妨尝试使用这些强大的工具。

希望本文能帮助你更好地理解和使用C++17中的时间处理功能!如果你有任何问题或建议,欢迎在评论区留言。


http://www.niftyadmin.cn/n/5863283.html

相关文章

androidnetflix手机版遥控器操作

Application.java // 记录Activity的生命周期 /*** hide*//* package */ final void attach(Context context) {attachBaseContext(context);JoyarHelper.getInstance().attachBaseContext(context);mLoadedApk ContextImpl.getImpl(context).mPackageInfo;}/* package */ vo…

【IO】java IO流的类型及IO模型

文章目录 分类字节流输入流输出流 字符流输入流输出流 字节缓冲流字符缓冲流4中常见的IO模型BIO&#xff08;同步阻塞模型&#xff09;同步非阻塞模型NIO&#xff08;多路复用模型&#xff09;AIO异步 分类 根据数据流向分为&#xff1a;输入流、输出流&#xff08;以内存为中…

Spring MVC中环境配置的实战应用

在现代的Spring MVC应用中&#xff0c;环境配置是一个非常重要的环节。通过合理配置环境&#xff0c;我们可以轻松地在开发环境、测试环境和生产环境之间切换&#xff0c;而无需修改代码。本文将通过一个具体的实例&#xff0c;展示如何在Spring MVC中设置环境配置&#xff0c;…

0222-leetcode-1768.交替合并字符串、389找不同、

1768.交替合并字符串 题目 给你两个字符串 word1 和 word2 。请你从 word1 开始&#xff0c;通过交替添加字母来合并字符串。如果一个字符串比另一个字符串长&#xff0c;就将多出来的字母追加到合并后字符串的末尾。 返回 合并后的字符串 。 示例 1&#xff1a; 输入&…

[VSCode]彻底卸载和重装,并搭建Java开发环境

VSCode彻底卸载 由于当初是朋友帮忙装的&#xff0c;所以准备卸载,自己装一遍 从控制面板找到 vscode 将其卸载。 此时仅仅是删除了应用软件 删除安装插件 在图示路径中找到 .vscode 文件夹&#xff0c;将其删除&#xff0c;即可彻底清除安装的插件 C:\Users\user\.vscode …

组合优化问题的机器学习研究——以图匹配问题为例

【OR Talk NO.17 | 组合优化问题的机器学习研究——以图匹配问题为例】https://www.bilibili.com/video/BV1Zf4y1S7Zr?vd_source7c2b5de7032bf3907543a7675013ce3a 定义&#xff1a; 什么是图匹配&#xff1f; 在三个图片上提取点&#xff0c;包括内点、外点、噪声点&#x…

Win11 24h2 不能正常使用ensp的问题(已解决)

因为Win11 24h2的内核大小更改&#xff0c;目前virtualbox在7.1.4中更新解决了。所以Win11 24H2系统版本无法使用 5.x.xx的virtualbox版本&#xff0c;virtualbox对于这个5.x.xx版本早已停止维护&#xff0c;所以这个以后不会有调整。 对应的报错代码是 virtualbox错误代码&…

计算机视觉算法实战 —— 虚拟试衣:从技术突破到商业落地(主页有源码)

✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连 ✨ ✨个人主页欢迎您的访问 ✨期待您的三连✨ ​ 一、领域简介✨✨ 虚拟试衣&#xff08;Virtual Try-On&#xff09; 是计算机视觉与增强现实&#xff08;AR&#xff09;的交叉领域&#xf…