服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C++中时间相关函数用法详解

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

2024-04-01 15:26Linux兵工厂 C/C++

C++标准库中的 头文件提供了一套用于处理时间的工具,包括时钟、时间点和持续时间等。下面是 库的一些主要组件及其使用示例

C++标准库中的 <chrono> 头文件提供了一套用于处理时间的工具,包括时钟、时间点和持续时间等。下面是 <chrono> 库的一些主要组件及其使用示例:

  • 时钟(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;
}

原文地址:https://mp.weixin.qq.com/s/UiPoH867LjoGNyn-bF_aEQ

延伸 · 阅读

精彩推荐
  • C/C++C/C++字符串查找函数全面了解

    C/C++字符串查找函数全面了解

    下面小编就为大家带来一篇C/C++字符串查找函数全面了解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...

    C++教程网10272021-04-16
  • C/C++C++ DLL动态库的创建与调用(类库,隐式调用)

    C++ DLL动态库的创建与调用(类库,隐式调用)

    本文主要介绍了C++ DLL动态库的创建与调用(类库,隐式调用),文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    廷益--飞鸟6772022-12-06
  • C/C++C++类和对象实战之Date类的实现方法

    C++类和对象实战之Date类的实现方法

    C++ 标准库没有提供所谓的日期类型,C++ 继承了C语言用于日期和时间操作的结构和函数,这篇文章主要给大家介绍了C++类和对象实战之Date类的实现方法,需要的...

    可口也可樂、7452022-07-09
  • C/C++C语言判断一个数是否是2的幂次方或4的幂次方

    C语言判断一个数是否是2的幂次方或4的幂次方

    本文中我们来看一下如何用C语言判断一个数是否是2的幂次方或4的幂次方的方法,并且判断出来是多少次方,需要的朋友可以参考下...

    C语言中文网7082021-04-05
  • C/C++centos 7 vscode cmake 编译c++工程的教程详解

    centos 7 vscode cmake 编译c++工程的教程详解

    这篇文章给大家介绍了centos 7 使用vscode+cmake配置简单c++项目的方法,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考...

    快牵着我的袜子6842021-09-08
  • C/C++VS2019中在源文件中如何使用自己写的头文件

    VS2019中在源文件中如何使用自己写的头文件

    通过头文件的形式直接调用自定义的函数,从而免去对函数的原型进行声明,本文就详细的介绍一下VS2019中在源文件中如何使用自己写的头文件,感兴趣的...

    落春只在无意间9352022-01-04
  • C/C++C++内存四区之代码区、全局区、栈区和堆区

    C++内存四区之代码区、全局区、栈区和堆区

    C++编译器会把代码直接分为四个小区,弄懂这四小区对我们理解内存有所帮助,所以下面这篇文章主要给大家介绍了关于C++内存四区之代码区、全局区、栈区...

    ZhiboZhao11442021-11-21
  • C/C++C++函数对象详解附带实例

    C++函数对象详解附带实例

    这篇文章主要介绍了C++函数对象详解附带实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随...

    C语言中文网5422021-10-26