c语言时间操作

⌚Time: 2022-12-26 14:10:10

👨‍💻Author: Jack Ge

time_t

定义于头文件 <time.h>

typedef /* unspecified */ time_t;

time函数

是指返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数的函数,主要用来获取当前的系统时间,返回的结果是一个time_t类型。

struct 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;    // 年份:其值等于实际年份减去1900

  int tm_wday;    // 星期:取值区间为[0,6],其中0代表星期天,1代表星期一,以此类推

  int tm_yday;    // 从每年的1月1日开始的天数:取值区间为[0,365],其中0代表1月1日,1代表1月2日,以此类推

  int tm_isdst;   // 夏令时标识符,该字段意义不大

};

localtime函数

localtime 函数用于把 time_t 表示的时间转换为 struct tm 结构体表示的时间,函数返回struct tm结构体的地址


struct tm * localtime(const time_t *);

mktime函数

mktime 函数用于把 struct tm 表示的时间转换为 time_t 表示的时间,返回time_t


time_t mktime(struct tm *tm);

测试


#include <time.h>

#include <stdio.h>

#include <string.h>

int main(){



    time_t tNow = time(NULL);

    //打印自1970年到现在的秒数

    printf("second from 1970 :%lld\n",tNow);

    //将time_t转化struct tm,获取当前时间

    struct tm *pTm = localtime(&tNow);

    printf("current time:%04d-%02d-%02d %02d:%02d:%02d\n",1900+pTm->tm_year,1+pTm->tm_mon,pTm->tm_mday,pTm->tm_hour,pTm->tm_min,pTm->tm_sec);

    //打印10分钟后时间

    time_t t10MinLater = tNow+10*60;

    struct tm *pTm10 = localtime(&t10MinLater);

    printf("time after 10 mintues:%04d-%02d-%02d %02d:%02d:%02d\n",1900+pTm10->tm_year,1+pTm10->tm_mon,pTm10->tm_mday,pTm10->tm_hour,pTm10->tm_min,pTm10->tm_sec);

    //struct tm转化time_t,由指定的时间得到time_t

    struct tm tmT;

    memset((char*)&tmT,0,sizeof(struct tm));

    tmT.tm_year = 2020-1900;

    tmT.tm_mon = 4-1;

    tmT.tm_mday = 12; 

    tmT.tm_hour = 7;

    tmT.tm_min = 55;

    tmT.tm_sec = 55;

    tmT.tm_isdst = 0;

    printf("2020-04-12 07:55:55 is %lld\n",mktime(&tmT));

    

    return 0;

}