当前位置:首页 > 科技  > 软件

C++中时间相关函数用法详解

来源: 责编: 时间:2024-04-02 17:22:20 109观看
导读C++标准库中的 <chrono> 头文件提供了一套用于处理时间的工具,包括时钟、时间点和持续时间等。下面是 <chrono> 库的一些主要组件及其使用示例:时钟(Clocks):时钟是一种用于度量时间的设备,C++标准库提供了几种不同的时钟类

C++标准库中的 <chrono> 头文件提供了一套用于处理时间的工具,包括时钟、时间点和持续时间等。下面是 <chrono> 库的一些主要组件及其使用示例:82s28资讯网——每日最新资讯28at.com

  • 时钟(Clocks):时钟是一种用于度量时间的设备,C++标准库提供了几种不同的时钟类型,包括系统时钟、高精度时钟和稳定时钟。示例:
#include <chrono>#include <iostream>int main() {    // 获取当前系统时钟时间点    auto now = std::chrono::system_clock::now();    // 将时间点转换为时间戳    auto timestamp = std::chrono::system_clock::to_time_t(now);    // 打印时间戳    std::cout << "Timestamp: " << timestamp << std::endl;    return 0;}
  • 时间点(Time points):时间点是时钟的特定实例化,代表特定时钟上的一个瞬时点。示例:
#include <chrono>#include <iostream>int main() {    // 使用系统时钟获取当前时间点    auto now = std::chrono::system_clock::now();    // 使用 steady_clock 获取时间点    auto start = std::chrono::steady_clock::now();    // 一些操作...    // 使用 steady_clock 获取结束时间点    auto end = std::chrono::steady_clock::now();    // 计算持续时间    auto duration = end - start;    // 打印持续时间    std::cout << "Duration: " << std::chrono::duration_cast<std::chrono::milliseconds>(duration).count() << " milliseconds" << std::endl;    return 0;}
  • 持续时间(Durations):持续时间表示两个时间点之间的时间段。示例:
#include <chrono>#include <iostream>int main() {    // 创建一个持续时间为1秒的时间段    auto duration = std::chrono::seconds(1);    // 打印持续时间的秒数    std::cout << "Duration in seconds: " << duration.count() << std::endl;    return 0;}
  • 时钟精度(Clock precision):每种时钟可能具有不同的精度,可以使用std::chrono::high_resolution_clock来获取高精度时钟。示例:
#include <chrono>#include <iostream>int main() {    // 获取高精度时钟的当前时间点    auto high_res_now = std::chrono::high_resolution_clock::now();    // 打印高精度时钟的当前时间点    std::cout << "High resolution clock time: " << high_res_now.time_since_epoch().count() << std::endl;    return 0;}
  • 时间单位转换(Time unit conversion):可以使用std::chrono::duration_cast函数将持续时间从一个时间单位转换为另一个时间单位。示例:
#include <chrono>#include <iostream>int main() {    // 创建一个持续时间为1小时的时间段    auto duration_hours = std::chrono::hours(1);    // 将持续时间从小时转换为分钟    auto duration_minutes = std::chrono::duration_cast<std::chrono::minutes>(duration_hours);    // 打印转换后的持续时间    std::cout << "Duration in minutes: " << duration_minutes.count() << std::endl;    return 0;}
  • 日期和时间格式化(Date and time formatting):C++ 标准库不提供直接的日期和时间格式化功能,但可以与其他库(如strftime)结合使用来实现格式化。示例:
#include <chrono>#include <iostream>#include <ctime>int main() {    // 获取当前系统时钟时间点    auto now = std::chrono::system_clock::to_time_t(std::chrono::system_clock::now());    // 使用 strftime 将时间点格式化为字符串    std::string time_str(30, '/0');    std::strftime(&time_str[0], time_str.size(), "%Y-%m-%d %H:%M:%S", std::localtime(&now));    // 打印格式化后的时间字符串    std::cout << "Formatted time: " << time_str << std::endl;    return 0;}
  1. 时钟类型的特性(Clock traits):每种时钟类型都有一些特性,如是否稳定、是否单调递增等。可以使用std::chrono::is_steady和std::chrono::is_clock等类型特性查询特定时钟类型的属性。示例:
#include <chrono>#include <iostream>int main() {    // 查询系统时钟是否稳定    std::cout << "System clock is steady: " << std::chrono::is_steady<std::chrono::system_clock>::value << std::endl;    // 查询高精度时钟是否为时钟类型    std::cout << "High resolution clock is a clock type: " << std::chrono::is_clock<std::chrono::high_resolution_clock>::value << std::endl;    return 0;}
  • 时钟转换(Clock conversion):可以使用std::chrono::time_point_cast函数将时间点从一个时钟类型转换为另一个时钟类型。示例:
#include <chrono>#include <iostream>int main() {    // 获取系统时钟的当前时间点    auto sys_now = std::chrono::system_clock::now();    // 将系统时钟的时间点转换为高精度时钟的时间点    auto high_res_now = std::chrono::time_point_cast<std::chrono::high_resolution_clock::duration>(sys_now);    // 打印高精度时钟的时间点    std::cout << "High resolution clock time: " << high_res_now.time_since_epoch().count() << std::endl;    return 0;}
  • 自定义时钟(Custom clocks):可以根据需要自定义时钟类型,并提供时钟类型的必要特性和实现。示例:
#include <chrono>#include <iostream>// 自定义时钟类型struct MyClock {    using duration = std::chrono::nanoseconds; // 持续时间类型    using rep = duration::rep; // 表示时间的基本类型    using period = duration::period; // 时间单位    using time_point = std::chrono::time_point<MyClock>; // 时间点类型    static constexpr bool is_steady = false; // 是否稳定    static time_point now() noexcept { return time_point(std::chrono::duration_cast<duration>(std::chrono::steady_clock::now().time_since_epoch())); }};int main() {    // 获取自定义时钟的当前时间点    auto my_clock_now = MyClock::now();    // 打印自定义时钟的时间点    std::cout << "Custom clock time: " << my_clock_now.time_since_epoch().count() << std::endl;    return 0;}

82s28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-80873-0.htmlC++中时间相关函数用法详解

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: SpringBoot动态权限校验:从零到一实现高效、优雅的解决方案

下一篇: Next.js项目部署,跨端适配,图表渲染优化复盘

标签:
  • 热门焦点
  • 从 Pulsar Client 的原理到它的监控面板

    从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 之家push系统迭代之路

    之家push系统迭代之路

    前言在这个信息爆炸的互联网时代,能够及时准确获取信息是当今社会要解决的关键问题之一。随着之家用户体量和内容规模的不断增大,传统的靠"主动拉"获取信息的方式已不能满足用
  • 三言两语说透柯里化和反柯里化

    三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 只需五步,使用start.spring.io快速入门Spring编程

    只需五步,使用start.spring.io快速入门Spring编程

    步骤1打开https://start.spring.io/,按照屏幕截图中的内容创建项目,添加 Spring Web 依赖项,并单击“生成”按钮下载 .zip 文件,为下一步做准备。请在进入步骤2之前进行解压。图
  • 19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    19个 JavaScript 单行代码技巧,让你看起来像个专业人士

    今天这篇文章跟大家分享18个JS单行代码,你只需花几分钟时间,即可帮助您了解一些您可能不知道的 JS 知识,如果您已经知道了,就当作复习一下,古人云,温故而知新嘛。现在,我们就开始今
  • .NET 程序的 GDI 句柄泄露的再反思

    .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 为什么你不应该使用Div作为可点击元素

    为什么你不应该使用Div作为可点击元素

    按钮是为任何网络应用程序提供交互性的最常见方式。但我们经常倾向于使用其他HTML元素,如 div span 等作为 clickable 元素。但通过这样做,我们错过了许多内置浏览器的功能。
  • 三星折叠屏手机去年销售近1000万台 今年目标定为1500万

    三星折叠屏手机去年销售近1000万台 今年目标定为1500万

    7月29日消息,三星率先发力可折叠手机市场,在全球市场已经取得了非常亮眼的成绩,接下来会进一步巩固和扩大这一优势。三星在推出Galaxy Z Flip5和Galax
  • OPPO K11搭载高性能石墨散热系统:旗舰同款 性能凉爽释放

    OPPO K11搭载高性能石墨散热系统:旗舰同款 性能凉爽释放

    日前OPPO官方宣布,将于7月25日14:30举办新品发布会,届时全新的OPPO K11将正式与大家见面,将主打旗舰影像,和同档位竞品相比,其最大的卖点就是将配备索尼
Top