【C++】时间相关

1 定义时间单位

    std::chrono::minutes minut{2};        // 2 minutes
    std::chrono::seconds sec{3};          // 3 seconds
    std::chrono::milliseconds mills{500}; // 500 milliseconds

    auto dul = sec - mills; //两者差值,单位默认转换为较小的
    std::cout << "dul.count():" << dul.count() << endl;

    this_thread::sleep_for(std::chrono::milliseconds(500));//当前线程休眠500毫秒

    //chrono::duration_cast<>()时间单位转换
    std::chrono::duration_cast<chrono::seconds>(minut).count();//2分钟换算为秒

2 获取时间点

    std::chrono::system_clock::time_point time = std::chrono::system_clock::now();

    std::time_t t = std::chrono::system_clock::to_time_t(time);
    std::cout << "t:" << std::put_time(std::localtime(&t), "%Y%m%d %X") << endl;
  • **system_clock:**从系统获取的时钟。
  • **steady_clock:**不能被修改的时钟。可以获取稳定可靠的时间间隔,后一次调用now()的值和前一次的差值是不因为修改了系统时间而改变,它保证了稳定的时间间隔。它的用法和system用法一样。
  • **high_resolution_clock:**高精度时钟,实际上是system_clock或者steady_clock的别名。

3 获取时间差

    std::chrono::steady_clock::time_point start = std::chrono::steady_clock::now();
    this_thread::sleep_for(std::chrono::milliseconds(500)); //当前线程休眠500毫秒
    std::chrono::steady_clock::time_point end = std::chrono::steady_clock::now();
    auto dul = std::chrono::duration_cast<chrono::milliseconds>(end - start);
    std::cout << "dul:" << dul.count() << "milliseconds" << endl;

4 clock_t

返回从程序执行起(一般为程序的开头),处理器时钟锁使用的时间,为了获取CPU所使用的秒数,则需要除以CLOCKS_PER_SEC宏。

    clock_t start, end;
    start = clock();
    Sleep(500);
    end = clock();
    double dul = end - start;//毫秒
    std::cout << "dul:" << dul / CLOCKS_PER_SEC << endl;//转换为秒

5 time_t

time()函数可以获取从1970年到现在经过了多少秒,并定义time_t类型。但是我们是无法直接通过描述看出当前的年月日的,所以需要用函数进行转化。

第一种是直接输出字符指针类型,这种函数的好处是可以直接打印字符串,但是它的缺点是无法按照想要的格式输出。

第二种函数是输出struct tm结构体类型指针,这种结构体中分别定义了年月日时分秒等,我们可以利用它输出成我们想要的格式。

struct tm
{
    int tm_sec;  /*秒,正常范围0-59, 但允许至61*/
    int tm_min;  /*分钟,0-59*/
    int tm_hour; /*小时, 0-23*/
    int tm_mday; /*日,即一个月中的第几天,1-31*/
    int tm_mon;  /*月, 从一月算起,0-11*/  1+p->tm_mon;
    int tm_year;  /*年, 从1900至今已经多少年*/  1900+ p->tm_year;
    int tm_wday; /*星期,一周中的第几天, 从星期日算起,0-6*/
    int tm_yday; /*从今年1月1日到目前的天数,范围0-365*/
    int tm_isdst; /*日光节约时间的旗标*/
};
————————————————
版权声明:本文为CSDN博主「YuXi_0520」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44032878/article/details/87939039

这里重点强调一下std::put_time()函数,它可以及那个tm对象指针,格式化输出日期和时间信息。

说明符替换示例
%a星期英文的缩写Thu
%A完整的星期英文Thursday
%b月份英文缩写Aug
%B完整的月份英文August
%c日期和时间表示Thu Aug 23 14:55:02 2019
%C年份除以100,并截断为整数(00-99)20
%d月份中的某一天,用零填充(01-31)23
%DMM/DD/YY日期的简写,相当于%m/%d/%y08/23/19
%e月份中的某日,空格填充(1-31)23
%FYYYY-MM-DD日期的简写,相当于%Y-%m-%d
%g基于周的年份,后两位数字(00-99)
%G一年中周
%h月份名称的缩写(与%b相同)Aug
%H24小时格式(00-23)
%I12小时格式(01-12)
%j一年中的某日(001-366)
%m月份的十进制数(01-12)
%M分钟(00-59)
%n新行字符('/n'
%p指定AM或PM
%r12小时时钟时间02:55:02 pm
%R24小时HH:MM时间,相当于%H:%M
%S秒(00-61)
%t水平制表符(’/t’)
%TISO 8601时间格式 (HH:MM:SS),相当于%H:%M:%S
%uISO 8601工作日,星期一的数字为11-7
%U周数,以第一个星期日为第一周的第一天(00-53
%VISO 8601周编号(00-53)
%w工作日,使用十进制数,星期日为00-6
%W周数,第一个星期一作为第一周的第一天(00-53)
%x日期的表示08/23/01
%X时间的表示14:55:02
%y年份,最后两位数字(00-99)
%Y年份,四位数字2001
%zISO 8601偏离UTC在时区(1分钟=1,1小时=100)+100
%Z时区名称或缩写CDT
%%%符号%
    time_t now;
    time(&now);                                 //获取从1970至今过了多少秒,存入time_t类型的now
    std::cout << "now:" << ctime(&now) << endl; //使用ctime函数转换为固定格式 Wed Feb 16 14:04:45 2022

    tm *t = localtime(&now);
    std::cout << "t:" << asctime(t) << endl; //使用asctime函数将tm指针转换为固定格式 Wed Feb 16 14:06:56 2022

    std::cout << "t:" << std::put_time(t, "%Y/%m/%d/ %X") << endl;//使用put_time函数格式化输出 2022/02/16/ 14:38:45
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值