从0到1用代码入门C语言(六)

249 阅读2分钟

本文已参与 ⌈新人创作礼⌋ 活动,一起开启掘金创作之路。

十三、时间

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 )