Unix的时间接口

本文是《Hands-On System Programming with C++》的读书笔记,主要介绍了Unix时间API,包括time.h中的time_t、tm、clock_t类型,以及time()、ctime()、localtime()、gmtime()、asctime()、strftime()、difftime()、mktime()和clock()函数。同时,探讨了C++的Chrono库,如system_clock()、time_point、Duration、steady_clock和high_resolution_clock,通过实例展示了它们的使用。
摘要由CSDN通过智能技术生成

《Hands-On System Programming with C++》读书笔记之十一

POSIX的时间API time.h

POSIX的时间API是基于标准C的,但在C++中仍然需要使用。

API的类型

POSIX API time.h中定义了三种时间数据类型:

  • tm:封装日期和时间的结构体;
  • time_t:代表秒的单位,通常是整型;
  • clock_t:应用所占用的处理器时间

需要注意还有不同的时间定义:

  • System clock:操作系统维护的日期与时间,可能随时被修改
  • Steady clock:程序运行时间的计数器
  • High-resolution clock:与Steady clock相同,但具有更高精度,常用于作为基准时间测试

time() API

用于返回系统时间。

#include <ctime>
#include <iostream>

int main()
{
   
    auto t = time(nullptr);
    std::cout << "time: " << t << '\n'; // 1594069715
    time(&t);
    std::cout << "time: " << t << '\n'; // 1594069715
}

ctime() typedef

用于将time_t类型指针转换为可以识别的字符串指针。其地址内容不需要释放,也不是线程安全的。

#include <ctime>
#include <iostream>

int main()
{
   
    auto t = time(nullptr);
    std::cout << "time: " << ctime(&t) << '\n'; // Mon Jul  6 14:18:20 2020

}

localtime()与gmtime()

用于time_t类型数据的当地时间和格林尼治时间的转换,返回tm类型的结构体。同样是指针类型的转换。

asctime()函数

将tm结构体转换为可读的字符串。

#include <ctime>
#include <iostream>

int main()
{
   
    auto t = time(nullptr);
    std::cout << "time: " << asctime(localtime(&t)) << '\n';
    // time: Mon Jul  6 14:30:03 2020
    std::cout << "time: " << asctime(gmtime(&t)) << '\n';
    // time: Mon Jul  6 21:30:03 2020
}

strftime()函数

考虑线程安全和可自定义输出格式,推荐的转换方法是strftime()函数。

#include <ctime>
#include <iostream>

int main()
{
   
    auto t = time(nullptr);
    char buf[256] {
   };
    strftime(buf, sizeof(buf), "%m/%d/%Y", localtime(&t));
    std::cout << "time: " << buf << '\n'; // 07/06/2020
    strftime(buf, sizeof(buf), "%H:%M", localtime(&t));
    std::cout << "time: " << buf << '\n'; // 14:46
    strftime(buf, sizeof(buf), "%a %b %d %H:%M:%S %Y", localtime(&t));
    std::cout << "time: " << buf << '\n'; // Mon Jul 06 14:46:25 2020
}

difftime()函数

比较两个time_t类型数据的差距。

#include <ctime>
#include <iostream>
#include <unistd.h>

int main()
{
   
    auto t1 = time(nullptr);
    sleep(2);
    auto t2 = time(nullptr);
    std::cout << "diff: " << difftime(t2, t1) << '\n'; // 2
    std::cout << "diff: " << t2 - t1 << '\n'; // 2
}

difftime()比直接相减的方法通

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值