本文已参与 ⌈新人创作礼⌋ 活动,一起开启掘金创作之路。
十三、时间
UNIX系统依据计算机产生的年代和应用选用1970.1.1作为纪元时间
C语言中使用time_t表示时间数据类型
typedef long time_t;
C语言中有标准的库函数time.h,调用方法为:
time_t tnow;
tnow=tome(0);
time.h中声明的tm结构体:
struct tm
{
int tm_sec;
int tm_min;
int tm_hour;
int tm_mday;
int tm_mon;
int tm_year;//其值等于实际年份-1900
int tm_wday;
int tm_yday;
int tm_isdst;//夏令时标识符
}
localtime函数用于把time_t表示的时间转换为struct tm结构体表示的时间,函数返回struct tm结构体的地址。函数:
struct tm *localtime(const time_t *);
#include <stdio.h>
#include <time.h>
int main(int argc,char *argv[])
{
time_t tnow;
tnow=time(0); // 获取当前时间
printf("tnow=%lu\n",tnow); // 输出整数表示的时间
struct tm *sttm;
sttm=localtime(&tnow); // 把整数的时间转换为struct tm结构体的时间
// yyyy-mm-dd hh24:mi:ss格式输出,此格式用得最多
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月%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-%02u\n",sttm->tm_year+1900,sttm->tm_mon+1,sttm->tm_mday);
}
mktime函数用于把struct tm表示的时间转换成time_t表示的时间
time_t mktime(struct tm *tm);
睡眠程序:可以使用sleep和usleep两个库函数,需要包含unistd.h头文件
unsigned int sleep(unsigned int seconds);
int usleep(useconds_t usec);
sleep函数的参数是秒,usleep函数的参数是微秒,1秒=1000000微秒
timeval结构体在sys/time.h文件中定义
struct timeval
{
long tv_sec; // 1970年1月1日到现在的秒。
long tv_usec; // 当前秒的微妙,即百万分之一秒。
};
timezone 结构体在sys/time.h文件中定义
struct timezone
{
int tz_minuteswest; // 和UTC(格林威治时间)差了多少分钟。
int tz_dsttime; // type of DST correction,修正参数据,忽略
};
gettimeofday是获得当前的秒和微秒的时间,其中的秒是指1970年1月1日到现在的秒,微秒是指当前秒已逝去的微秒数,可以用于程序的计时。调用gettimeofday函数需要包含sys/time.h头文件。
int gettimeofday(struct timeval *tv, struct timezone *tz )