C 时间相关函数

本文介绍了C语言中与时间相关的函数,包括Linux下的时间函数和SYSTEMTIME数据结构的使用。通过示例展示了如何利用`clock()`函数计算CPU耗时,但需要注意这并不等于程序的总运行时间。参考了优快云和博客园的相关文章进行讲解。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

windows下的时间函数

时间数据结构:
windows.h
typedef struct _systemtime { 
    word wyear; 
    word wmonth; 
    word wdayofweek; 
    word wday; 
    word whour; 
    word wminute; 
    word wsecond; 
    word wmilliseconds; 

} SYSTEMTIME

三个函数:

SYSTEMTIME localtm, systm; 
 GetLocalTime(&localtm);//本地时间在控制面板中设置的时间
 GetSystemTime(&systm);//UTC coordinated Universal Time 


DWORD GetTickCount(void);  winbase.h //开机后的毫秒数 精度1ms
winbase.h已被包含进windows.h头文件中,所以要使用GetTickCount只需包含windows.h就可以了。
用一个DWORD类型的值存放一个时间数值,那么经历足够长的时间,这个数值一定会溢出绕回到零(wrap around to zero),我们可以计算这个时间。先算一下一天有多少毫秒mmsEachDay = 24*60*60*1000=86,400,000ms。而一个DWORD最大能表示多达数值呢?DWORD在头文件windef.h中定义如下
Typedef unsigned long DWORD;(32位是4字节,在64位系统是8字节)
可以看出DWORD是一个占四个字节即两个字的空间无符号整数(32位操作系统),它能表示的最大值为232=4,294,967,695,而4,294,967,695/86,400,000 = 49.71,所以若系统持续运行(run continuously)49.71天,这个数会溢出绕回到零。




linux下的时间函数

数据结构

时间值      time_t 
    指代1970-01-01 00:00:00 到现在的秒数(对long的重定义)
时间详情  struct tm
struct tm {
   int tm_sec;    /* 秒,取值范围(0~59),但当遇到闰秒时则会有60秒的取值。 */
   int tm_min;    /* 分钟数,取值范围(0-59) */
   int tm_hour;   /* 小时数,取值范围(0-23) */
   int tm_mday;   /* 当天在这个月中是第几天,取值范围(1-31) */
   int tm_mon;    /* 当前月份是第几个月,取值范围(0-11) */
   int tm_year;   /* 从1900年开始至今的年数,即(Year - 1900)的值 */
   int tm_wday;   /* 当天在本周是第几天,取值范围(0-6, Sunday = 0) */
   int tm_yday;   /* 当天在今年是第几天,取值范围(0-365, 1 Jan = 0) */
   int tm_isdst;  /* 夏令时标记,值大于0表示夏令时生效;等于0表示夏令时失效;小于0表示数据不可用。 */
   char *tm_zone; /* 时区名称,根据系统不同可能不被声明或不同全名。 */
};

时间函数:
    获取当前时间值:
        time_t time(time_t *t); 支持链式表达
    把tm时间转为time_t时间
        time_t mktime(struct tm tm)
    把time_t时间转为tm时间
        struct *tm localtime(time_t *t)    把time_t 转为 当地时间
        struct *tm gmtime(time_t *t)      把time_t 转为 UTC时间
    把tm时间转为字符串
        size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
        char str_f_t [100];
        strftime(str_f_t, sizeof(str_f_t), "%G-%m-%d %H:%M:%S", gm_time);
    程序执行CPU周期数:
        clock_t clock(void);    time.h 中 clock_t 是long定义
        返回程序开始执行到现在的CPU周期数,CLOCKS_PER_SEC 代表一秒钟时间CPU周期数

        用(clock_end - clock_start) / CLOCKS_PER_SEC 可以得到CPU耗时(不是程序耗时)

reference

    https://blog.youkuaiyun.com/zxx910509/article/details/53694796

    https://www.cnblogs.com/abc-begin/p/8018597.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值