C语言-时间函数整理

it2023-12-16  83

由于工作的需要,对时间函数使用的比较多, 整理如下:

clock_t:这是一个适合存储处理器时间的类型。

time_t is:这是一个适合存储日历时间类型。

struct tm:这是一个用来保存时间和日期的结构。

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 到 11        */    int tm_year;        /* 自 1900 年起的年数        */    int tm_wday;        /* 一周中的第几天,范围从 0 到 6    */    int tm_yday;        /* 一年中的第几天,范围从 0 到 365    */    int tm_isdst;       /* 夏令时                };

time_t time(time_t *timer):计算当前日历时间,并把它编码成 time_t 格式

char *ctime(const time_t *timer):返回一个表示当地时间的字符串,当地时间是基于参数 timer。

time_t mktime(struct tm *timeptr):把 timeptr 所指向的结构转换为 time_t 值。

代码示例如下:

#define _CRT_SECURE_NO_WARNINGS #include <time.h> #include<stdio.h> #define TZ_TIMETH_LENG 64 typedef struct { int iYear; //年 int iMonth; //月 int iDay; //日 int iHour; //时 int iMin; //分 int iSecond; //秒 int iMsecond; //毫秒 }UTIL_IVMS_TIME_T; int main() { time_t timep; struct tm *info; time(&timep); /*得到time_t类型的UTC时间*/ printf("timep:%d\n", timep); char pTimeStr[TZ_TIMETH_LENG] = {0}; //返回本地时间的tm info = localtime(&timep); sprintf(pTimeStr,"%4d-%2d-%2dT%2d:%2d:%2dZ",info->tm_year+1900,info->tm_mon+1,info->tm_mday,info->tm_hour,info->tm_min,info->tm_sec); printf("pTimeStr:%s\n", pTimeStr); UTIL_IVMS_TIME_T pstruTime; sscanf(pTimeStr, "%4d-%2d-%2dT%2d:%2d:%2dZ", &pstruTime.iYear, &pstruTime.iMonth, &pstruTime.iDay, &pstruTime.iHour, &pstruTime.iMin, &pstruTime.iSecond); pstruTime.iMsecond = 0; struct tm struTm={0}; struTm.tm_year=pstruTime.iYear - 1900; struTm.tm_mon=pstruTime.iMonth - 1; struTm.tm_mday=pstruTime.iDay; struTm.tm_hour=pstruTime.iHour; struTm.tm_min=pstruTime.iMin; struTm.tm_sec=pstruTime.iSecond; //返回的是UTC时间 time_t timeStamp = mktime(&struTm); printf("timeStamp:%d\n", timeStamp); printf("dur:%d\n", (timeStamp-timep)/3600); struct tm *p; p = gmtime(&timep); /*得到tm结构的UTC时间*/ sprintf(pTimeStr,"%4d-%2d-%2dT%2d:%2d:%2dZ",info->tm_year+1900,info->tm_mon+1,info->tm_mday,info->tm_hour,info->tm_min,info->tm_sec); printf("pTimeStr:%s\n", pTimeStr); sscanf(pTimeStr, "%4d-%2d-%2dT%2d:%2d:%2dZ", &pstruTime.iYear, &pstruTime.iMonth, &pstruTime.iDay, &pstruTime.iHour, &pstruTime.iMin, &pstruTime.iSecond); pstruTime.iMsecond = 0; struTm.tm_year=pstruTime.iYear - 1900; struTm.tm_mon=pstruTime.iMonth - 1; struTm.tm_mday=pstruTime.iDay; struTm.tm_hour=pstruTime.iHour; struTm.tm_min=pstruTime.iMin; struTm.tm_sec=pstruTime.iSecond; //返回的是UTC时间 timeStamp = mktime(&struTm); printf("timeStamp:%d\n", timeStamp); printf("dur:%d\n", (timeStamp-timep)/3600); return 0; }

运行结构:

 

注意事项:

1.mktime有时区转化

2.time():返回的是UTC时间

参考文献:

https://www.runoob.com/cprogramming/c-standard-library-time-h.html

https://www.runoob.com/w3cnote/cpp-time_t.html

 

最新回复(0)