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

文章目录

    • 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.mzph.cn/pingmian/70533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go 语言结合 Redis 实现固定窗口、滑动窗口、令牌桶和漏桶限流算法的示例代码

固定窗口算法 原理&#xff1a;将时间划分为固定大小的窗口&#xff0c;在每个窗口内对请求进行计数。如果请求数超过设定的阈值&#xff0c;则拒绝后续请求&#xff0c;直到进入下一个窗口。代码&#xff1a; package mainimport ("fmt""time""git…

linux之perf(17)PMU事件采集脚本

Linux之perf(17)PMU事件采集脚本 Author: Once Day Date: 2025年2月22日 一位热衷于Linux学习和开发的菜鸟&#xff0c;试图谱写一场冒险之旅&#xff0c;也许终点只是一场白日梦… 漫漫长路&#xff0c;有人对你微笑过嘛… 全系列文章可参考专栏: Perf性能分析_Once_day的博…

兰州百合基因组(36.68 Gb)-文献精读113

The evolutionary tale of lilies: Giant genomes derived from transposon insertions and polyploidization 百合的进化故事&#xff1a;由转座子插入和多倍化导致的巨型基因组 百合&#xff08;Lilium spp.&#xff09;&#xff0c;被誉为“球根花卉之王”&#xff0c;因其…

macos sequoia 禁用 ctrl+enter 打开鼠标右键菜单功能

macos sequoia默认ctrlenter会打开鼠标右键菜单&#xff0c;使得很多软件有冲突。关闭方法&#xff1a; end

UE5.3 C++ TArray系列(一)

一.TArray概述 它们就相当于C动态数组Vector&#xff0c;但是被UE封装了&#xff0c;懂得都懂反射嘛&#xff0c;要不一不小心就被回收了。 它真的非常常见&#xff0c;我所用的容器中&#xff0c;它绝对排名第一&#xff0c;第二是TMap。 同类好理解&#xff0c;我平时也常用…

Docker+Dify部署DeepSeek-r1本地知识库

安装配置Docker Desktop 软件下载 Docker Desktop版本:4.38.0.181591 Docker Desktop下载地址:Docker: Accelerated Container Application Development 或者从这里下载:DockerDesktop-4.38.0.181591资源-CSDN文库 点击图下所示位置,下载windows-AMD64版本软件 启用Hy…

MySQL数据库——表的约束

1.空属性&#xff08;null/not null&#xff09; 两个值&#xff1a;null&#xff08;默认的&#xff09;和not null&#xff08;不为空&#xff09; 数据库默认字段基本都是字段为空&#xff0c;但是实际开发时&#xff0c;尽可能保证字段不为空&#xff0c;因为数据为空没办法…

腿足机器人之十一- 深度强化学习

腿足机器人之十一- 深度强化学习 机器人能力腿足机器人RL问题建模强化学习解决方案 强化学习算法库选择建议 深度学习技术已经在语音、图像、视频、文本等领域应用广泛&#xff0c;其和强化学习的结合使得基于深度学习的大模型能力更是上升一个台阶。因而用在腿足机器人的运动中…

如何教计算机识别视频中的人类动作

作者简介: 高科,先后在 IBM PlatformComputing从事网格计算,淘米网,网易从事游戏服务器开发,拥有丰富的C++,go等语言开发经验,mysql,mongo,redis等数据库,设计模式和网络库开发经验,对战棋类,回合制,moba类页游,手游有丰富的架构设计和开发经验。 =============…

Redisson分布式锁java语法, 可重入性实现原理 ,(还有可重试性,超时不释放,主从一致性)

Redisson在java的使用方法 Redisson分布式锁不可重入的实现原理 设置一个HSET key为锁的名字&#xff0c;field为当前获取锁的线程名字&#xff0c;value为可重入锁的当前已经重入次数 追踪源码发现RedissonClient类的tryLock就是用lua脚本和上图逻辑实现的加锁解锁&#xf…

YOLOv8与DAttention机制的融合:复杂场景下目标检测性能的增强

文章目录 1. YOLOv8简介2. DAttention (DAT)注意力机制概述2.1 DAttention机制的工作原理 3. YOLOv8与DAttention (DAT)的结合3.1 引入DAT的动机3.2 集成方法3.3 代码实现 4. 实验与结果分析4.1 实验设置4.2 结果分析推理速度性能对比 5. 深度分析&#xff1a;DAttention在YOLO…

MAC快速本地部署Deepseek (win也可以)

MAC快速本地部署Deepseek (win也可以) 下载安装ollama 地址: https://ollama.com/ Ollama 是一个开源的大型语言模型&#xff08;LLM&#xff09;本地运行框架&#xff0c;旨在简化大模型的部署和管理流程&#xff0c;使开发者、研究人员及爱好者能够高效地在本地环境中实验和…

springboot+dubbo+zookeeper的注册服务和调用实践

目录 zookeeper为什么可作为注册中心zookeeper注册中心优缺点启动zookeeper编写springboot项目提供dubbo服务1. 服务接口2. Springboot引入dubbo实现服务接口2.1 工程目录和依赖2.2 启动程序和application.properties2.3 DubboService 实现服务接口2.4 测试api&#xff0c;用于…

GTSAM 库详细介绍与使用指南

GTSAM 库详细介绍与使用指南 一、GTSAM 概述 GTSAM&#xff08;Georgia Tech Smoothing and Mapping&#xff09;是由佐治亚理工学院开发的 C 开源库&#xff0c;专注于 概率图模型&#xff08;尤其是因子图&#xff09;的构建与优化&#xff0c;广泛应用于机器人定位与建图&a…

Missing required prop: “maxlength“

背景&#xff1a; 封装一个使用功能相同使用频率较高的input公共组件作为子组件&#xff0c;大多数长度要求为200&#xff0c;且实时显示统计子数&#xff0c;部分input有输入提示。 代码实现如下&#xff1a; <template><el-input v-model"inputValue" t…

基于YOLOv8的人脸识别系统

文章目录 一.前言 二.原理阐述 三.源代码 四.代码改进 五.流程概述 一.前言 原开源项目是对于某时段校园门口学生出入的视频,使用YOLOv8目标检测算法以及yolov8l-face模型将目标换算成只检测人脸, 通过该模型中的track技术实现检测出的人脸进行自动跟踪, 通过跟踪到的…

✨ 索引有哪些缺点以及具体有哪些索引类型

索引的定义与原理 索引是数据库中用于提高数据检索效率的数据结构。它就像是书籍的目录&#xff0c;通过目录可以快速定位到所需内容的页码&#xff0c;而在数据库中&#xff0c;索引可以帮助数据库系统快速找到符合查询条件的数据行&#xff0c;而不必对整个表进行扫描。 其…

TCP...

什么是TCP&#xff1f; TCP是面向连接的、可靠的、基于字节流的传输层通信协议 面向连接&#xff1a;一定是「一对一」才能连接&#xff0c;不能像 UDP 协议可以一个主机同时向多个主机发送消息&#xff0c;也就是一对多&#xff0c;是无法做到的&#xff1b;字节流&#xff…

工业通信协议 EtherNet/IP 全面解析

工业通信协议 EtherNet/IP 全面解析 EtherNet/IP&#xff08;以太网工业协议&#xff09;是一种基于标准以太网的工业自动化通信协议&#xff0c;由 ODVA&#xff08;开放设备网供应商协会&#xff09; 管理。它融合了 CIP&#xff08;通用工业协议&#xff09; 和以太网技术&…

react+typescript,初始化与项目配置

1&#xff0c;创建项目 npx create-react-app music --template typescript 2&#xff0c;配置项目别名 npm install craco/cracoalpha -D 1&#xff0c;最外层与src平级创建 craco.config.jsconst path require(path)const resolve (dir) > path.resolve(__dirname, d…