C/C++时间相关类型timeval、time_t、tm、clock_t、size_t、时间戳及其对应操作函数总结

C/C++时间相关结构体timeval、time_t、tm、clock_t、size_t及其对应操作函数总结

头文件 #include <ctime> 或 #include <sys/time.h> 或 #include <time.h>

一、结构体timeval与类型time_t、clock_t、size_t

time_t:它通常是一个长整型(long int)或整数类型,用于表示从特定参考点(通常是 1970 年 1 月 1 日 00:00:00 UTC)经过的秒数。这被广泛用作时间戳

clock_t:它也通常是一个长整型(long int)或整数类型,用于表示 CPU 时间。它通常用于衡量程序执行的时间。

size_t:这是一个无符号整数类型,用于表示内存中对象的大小。在 32位系统中通常是 unsigned int,而在 64位系统中通常是 unsigned long。

struct timeval 定义:

struct timeval
{
    long tv_sec; /*秒*/
    long tv_usec; /*微秒*/
};

常用函数:

  1. time_t time (time_t *time);
    参数可以为空,用于获取时间戳。将自 1970 年 1 月 1 日以来经过的秒数存储在时间戳指针time指向的位置(time为空则不做此处理),并返回相等值的临时time变量;

  2. clock_t clock (void);
    无参数,用于获取处理器时间片数。返回程序执行开始,处理器时钟所使用的处理器时间片数,如果不可用则返回 -1。处理器时间片需要再除以系统宏CLOCKS_PER_SEC才能得到真实的秒数;

  3. int gettimeofday(struct timeval *tv, struct timezone *tz);
    参数tv不可为空,tz通常不写默认为空,用于获取系统时间结构(struct tm)。将自 1970 年 1 月 1 日以来经过的精度为微秒的时间存储于tv结构。获取时间成功返回0,失败返回-1。结构体timezone(已废弃);

  4. struct tm *localtime (const time_t *time);
    参数time不可为空。将时间戳time转换为tm结构;

  5. struct tm *gmtime (const time_t *time);
    参数time不可为空。将时间戳time转换为tm结构;

  6. char *ctime(const time_t *timep);
    参数timep不可为空。将timep时间戳转换为一个字符串(例如:Thu Nov 11 15:53:23 2023);

  7. double difftime ( time_t time2, time_t time1 )
    两个参数不可为空。time2 是较晚的时间戳,time1 是较早的时间戳,函数返回 time2 减去 time1 的差值,以秒为单位,返回一个 double 类型的浮点数;

二、结构体tm

struct tm {
        int tm_sec;     /* seconds after the minute - [0,59] */
        int tm_min;     /* minutes after the hour - [0,59] */
        int tm_hour;    /* hours since midnight - [0,23] */
        int tm_mday;    /* day of the month - [1,31] */
        int tm_mon;     /* months since January - [0,11],使用时一般会加1的偏移量 */
        int tm_year;    /* years since 1900,使用时一般会加1900的偏移量 */
        int tm_wday;    /* days since Sunday - [0,6] */
        int tm_yday;    /* days since January 1 - [0,365] */
        int tm_isdst;   /* daylight savings time flag */
};

对应操作函数:

  1. char * asctime (const struct tm * time);
    参数time不可为空。将tm结构指针time转换为一个字符串(例如:Thu Nov 11 15:53:23 2023)。

  2. time_t mktime (struct tm *time);
    参数time不可为空。将tm结构转换为一个时间戳,这个日历时间表示从 1970 年 1 月 1 日起的秒数;

  3. size_t strftime (char *strDest, size_t maxsize, const char *format, const struct tm *timeptr);
    格式化日期和时间为指定的格式,具体格式参照format格式符:
    %a 星期几的简写
    %A 星期几的全称
    %b 月分的简写
    %B 月份的全称
    %c 标准的日期的时间串
    %C 年份的后两位数字
    %d 十进制表示的每月的第几天
    %D 月/天/年
    %e 在两字符域中,十进制表示的每月的第几天
    %F 年-月-日
    %g 年份的后两位数字,使用基于周的年
    %G 年分,使用基于周的年
    %h 简写的月份名
    %H 24小时制的小时
    %I 12小时制的小时
    %j 十进制表示的每年的第几天
    %m 十进制表示的月份
    %M 十时制表示的分钟数
    %n 新行符
    %p 本地的AM或PM的等价显示
    %r 12小时的时间
    %R 显示小时和分钟:hh:mm
    %S 十进制的秒数
    %t 水平制表符
    %T 显示时分秒:hh:mm:ss
    %u 每周的第几天,星期一为第一天 (值从0到6,星期一为0)
    %U 第年的第几周,把星期日做为第一天(值从0到53)
    %V 每年的第几周,使用基于周的年
    %w 十进制表示的星期几(值从0到6,星期天为0)
    %W 每年的第几周,把星期一做为第一天(值从0到53)
    %x 标准的日期串
    %X 标准的时间串
    %y 不带世纪的十进制年份(值从0到99)
    %Y 带世纪部分的十制年份
    %z,%Z 时区名称,如果不能得到时区名称则返回空字符。
    %% 百分号

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

邱邱玩编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值