C语言常用时间相关函数

19 篇文章 0 订阅
14 篇文章 1 订阅

首先讲一下#include <time.h>#include <sys/time.h>的区别,前者是C99标准库函数,后者是Linux系统函数,如果Windows平台装了MinGW(Minimalist GNU for Windows)工具也是可以使用<sys/time.h>的,<sys/time.h>中调用了<time.h>
在这里插入图片描述


获取时间戳-time

函数原型:

time_t time(time_t *timer)

变量time_t实际上是long类型,使用时既可以传入变量指针,又可以直接利用其返回值。

使用范例

#include <stdio.h>
#include <time.h>

int main() 
{   
    time_t timer;
    timer = time(NULL);
    printf("time = %d", timer);

    return 0;
}
//输出 time = 1606706081

或者

    time_t timer;
    time(&timer);
    printf("time = %d", timer);

获取微秒级时间戳-gettimeofday

函数原型:

int gettimeofday(struct  timeval*tv,struct  timezone *tz )

struct timeval
{
  long tv_sec;
  long tv_usec;
};

使用范例

#include <stdio.h>
#include <sys/time.h>

int main() 
{   
    struct timeval tv;
    
    gettimeofday(&tv, NULL);

    printf("sec = %d\r\n", tv.tv_sec);
    printf("usec = %d\r\n", tv.tv_usec);

    return 0;
}
//输出 sec = 1606706045
//    usec = 938334

时间戳 to 本地时间-localtime

根据系统的时区信息转换成本地时间
函数原型:

struct tm *localtime(const time_t *timer)
struct tm 
{
    int tm_sec;         /* 秒 – 取值区间为[0,59] */
    int tm_min;         /* 分 - 取值区间为[0,59] */
    int tm_hour;        /* 时 - 取值区间为[0,23] */
    int tm_mday;        /* 一个月中的日期 - 取值区间为[1,31] */
    int tm_mon;         /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */
    int tm_year;        /* 年份,其值等于实际年份减去1900 */
    int tm_wday;        /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一 */
    int tm_yday;        /* 从每年1月1日开始的天数– 取值区间[0,365],其中0代表1月1日 */
    int tm_isdst;       /* 夏令时标识符,夏令时tm_isdst为正;不实行夏令时tm_isdst为0 */    
};

使用范例

#include <stdio.h>
#include <time.h>

int main() 
{   
    time_t timer;
    struct tm *tm_now;

    timer = time(NULL);
    tm_now = localtime(&timer);
    
    printf("%d-%d-%d %d:%d:%d", tm_now->tm_year+1900, tm_now->tm_mon+1, tm_now->tm_mday,\
                                tm_now->tm_hour, tm_now->tm_min, tm_now->tm_sec);

    getchar();
    return 0;
}
//输出 2020-11-30 11:12:37

时间戳 to UTC-gmtime

函数原型:

struct tm *gmtime(const time_t *timer)

使用方法类比localtime。


struct tm to时间戳

函数原型:

time_t mktime(struct tm *tmp)

使用范例

#include <stdio.h>
#include <time.h>

int main() 
{   
    time_t time1, time2;
    struct tm* now_time;

    time1 = time(NULL);
    now_time = localtime(&time1);
    time2 = mktime(now_time);

    printf("time2 = %ld\n", time2);

    return 0;
}
//输出 time2 = 1606706081

时间戳to 时间字符串

char *ctime(const time_t *timep)

使用范例

#include <stdio.h>
#include <time.h>

int main() 
{   
    time_t timer;
    timer = time(NULL);
    printf("%s", ctime(&timer));

    return 0;
}
//输出 Mon Nov 30 11:18:08 2020

struct tm to 时间字符串

函数原型:

char *asctime(const struct tm *timeptr)

使用范例

#include <stdio.h>
#include <time.h>

int main() 
{   
    time_t timer;
    struct tm *tm_now;

    timer = time(NULL);
    tm_now = localtime(&timer);
    
    printf("%s", asctime(tm_now));

    return 0;
}
//输出 Mon Nov 30 11:18:08 2020

延时函数

Windows

头文件#include<windows.h>
函数原型:

void Sleep(unsigned long time) 

单位毫秒


Linux

头文件#include <unistd.h>
函数原型:

unsigned int sleep(unsigned int seconds);

单位
返回值:若进程/线程挂起到参数所指定的时间则返回0,若有信号中断则返回剩余秒数;

void usleep(unsigned long usec);

单位微秒

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在C语言中,可以使用clock()函数和time()函数来计算时间差。 clock()函数返回程序运行的时钟周期数,单位为毫秒。可以使用clock()函数获取程序执行某个代码块所用的时间。示例代码如下: ```c #include <time.h> #include <stdio.h> #include <stdlib.h> int main() { time_t c_start, c_end; c_start = clock(); // 获取开始时间 // 执行需要计时的代码块 // ... c_end = clock(); // 获取结束时间 double time_used = (double)(c_end - c_start) / CLOCKS_PER_SEC * 1000; // 计算时间差,单位为毫秒 printf("The code used %f ms\n", time_used); return 0; } ``` 另外,time()函数返回自1970年1月1日以来经过的秒数,可以用来获取系统时间。示例代码如下: ```c #include <time.h> #include <stdio.h> #include <stdlib.h> int main() { time_t t_start, t_end; t_start = time(NULL); // 获取开始时间 // 执行需要计时的代码块 // ... t_end = time(NULL); // 获取结束时间 double time_used = difftime(t_end, t_start); // 计算时间差,单位为秒 printf("The code used %f s\n", time_used); return 0; } ``` 以上是两种常用的计算时间差的方法,可以根据具体需求选择使用。 #### 引用[.reference_title] - *1* [C语言时间差计算函数clock() 与 time ()用法分析](https://blog.csdn.net/linpengbin/article/details/43454187)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [简易的时间差计算(C语言)](https://blog.csdn.net/m0_51566313/article/details/127281900)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [C语言 利用gettimeofday()时间差计算](https://blog.csdn.net/qq524425141/article/details/51569730)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值