C 语言 时间操作(time.h)

阅读: 评论:0

C 语言 时间操作(time.h)

C 语言 时间操作(time.h)

文章目录

  • 1、基础使用
    • 1.1、time库函数
    • 1.2、localtime库函数
    • 1.3、mktime库函数
  • 2、精确到微秒的计时器
    • 2.1、gettimeofday库函数

1、基础使用

在C语言中,用time_t来表示时间数据类型,它是一个long类型的别名,在time.h文件中定义,表示一个日历时间,是从1970年1月1日0时0分0秒到现在的秒数

typedef long time_t;  

1.1、time库函数

time函数返回1970年1月1日0时0分0秒到现在的秒数。

time_t time(time_t *t);
// 使用
time_t tnow;
tnow =time(0); 

time_t是一个long类型,返回的是秒数,不符合使用习惯,需要转成结构体类型,tm是time.h中声明的

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;    // 年份:其值等于实际年份减去1900int tm_wday;    // 星期:取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推 int tm_yday;    // 从每年的1月1日开始的天数:取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推 int tm_isdst;   // 夏令时标识符,该字段意义不大,我们不用夏令时。
};

1.2、localtime库函数

localtime就是把time_t表示的秒数转换为这个结构体,函数返回struct tm结构体的地址。

struct tm * localtime(const time_t *);

可以用格式化输出printf、sprintf或fprintf等函数,把struct tm结构体转换为我们能看的懂的结果

#define _CRT_SECURE_NO_DEPRECATE
#include <stdio.h>
#include <time.h>int main()
{time_t tnow;tnow = time(0);      // 获取当前时间printf("tnow=%lun", tnow);   // 输出整数表示的时间struct tm *sttm;sttm = localtime(&tnow);  // 把整数的时间转换为struct tm结构体的时间// yyyy-mm-dd hh24:mi:ss格式输出,此格式用得最多printf("%04u-%02u-%02u %02u:%02u:%02un", sttm->tm_year + 1900, sttm->tm_mon + 1, sttm->tm_mday, sttm->tm_hour, sttm->tm_min, sttm->tm_sec);printf("%04u年%02u月%02u日%02u时%02u分%02u秒n", sttm->tm_year + 1900, sttm->tm_mon + 1, sttm->tm_mday, sttm->tm_hour, sttm->tm_min, sttm->tm_sec);// 只输出年月日printf("%04u-%02u-%02un", sttm->tm_year + 1900, sttm->tm_mon + 1, sttm->tm_mday);system("pause");return 0;
}

1.3、mktime库函数

mktime函数的功能与localtime函数相反,是把tm结构体转换成time_t表示时间

time_t mktime(struct tm *tm);
int main(int argc,char *argv[])
{// 2019-12-25 15:05:03整数表示是1577257503struct tm sttm;  memset(&sttm,0,sizeof(sttm));_year=2019-1900; // 注意,要减_mon=12-1;        // 注意,要减_mday=_hour=_min=_sec=_isdst = 0;printf("2019-12-25 15:05:03 is %lun",mktime(&sttm));
}

2、精确到微秒的计时器

sys/time.h 是Linux 系统的日期时间头文件,timeval、timezone结构体和gettimeofday函数在windows平台中不能使用。

timeval结构体在sys/time.h文件中定义
1秒=1000000微秒。

struct timeval
{long  tv_sec;  // 1970年1月1日到现在的秒。long  tv_usec; // 当前秒的微妙,即百万分之一秒。
};

时区timezone 结构体

struct timezone
{int tz_minuteswest;  // 和UTC(格林威治时间)差了多少分钟。int tz_dsttime;      // type of DST correction,修正参数据,忽略
};

2.1、gettimeofday库函数

gettimeofday是获得当前的秒和微秒的时间,其中的秒是指1970年1月1日到现在的秒,微秒是指当前秒已逝去的微秒数,可以用于程序的计时

int gettimeofday(struct  timeval *tv, struct  timezone *tz );
当前的时间存放在tv 结构体中,当地时区的信息则放到tz所指的结构体中,tz可以为空。
函数执行成功后返回0,失败后返回-1。
#include <stdio.h>
#include <sys/time.h>   // 注意,不是time.hint main()
{struct timeval begin,end;  // 定义用于存放开始和结束的时间gettimeofday(&begin,0);    // 计时器开始printf("begin time(0)=%d,tv_sec=%d,tv_usec=%dn",time(0),begin.tv_sec,begin.tv_usec);sleep(2);usleep(100000);     // 程序睡眠十分之一秒。gettimeofday(&end,0);      // 计时器结束printf("end   time(0)=%d,tv_sec=%d,tv_usec=%dn",time(0),end.tv_sec,end.tv_usec);printf("计时过去了%d微秒。n",(end.tv_sec-begin.tv_sec)*1000000+(end.tv_usec-begin.tv_usec));
}

本文发布于:2024-01-29 13:19:08,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170650555115554.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

上一篇:程序人生
标签:语言   操作   时间   time
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23