time使用
time_t time (time_t *t)
该时间是从1970年1月1日的UTC时间从0时0分0秒算起到现在所经过的秒数
#include <stdio.h>
#include <time.h>
int main()
{
time_t timep;
long seconds = time(&timep);
printf("time out = %ld\r\n", seconds);
printf("time out = %ld\r\n", timep);
return 0;
}
ctime使用
定义:char *ctime(const time_t *timep);
说明:将参数所指的time_t结构中的信息转换成真实世界的时间日期表示方法,然后将结果以字符串形式返回。
注意这个是本地时间。
#include <stdio.h>
#include <time.h>
int main(void)
{
time_t timep;
time(&timep);
printf("ctime out=%s\r\n", ctime(&timep));
return 0;
}
asctime使用
定义:
char *asctime(const struct tm *timeptr);
说明:
将参数timeptr所指的struct tm结构中的信息转换成真实时间所使用的时间日期表示方法,结果以字符串形态返回。与ctime()函数不同之处在于传入的参数是不同的结构。
返回的也是UTC时间。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
time_t timep;
time(&timep);
printf("asctime = %s\r\n", asctime(gmtime(&timep)));
return 0;
}
gmtime使用
定义:struct tm *gmtime(const time_t *timep);
说明:将参数timep所指的time_t结构中的信息转换成真实世界所使用的时间日期表示方法,然后将结果由结构tm返回。此函数返回的时间日期未经时区转换,而是UTC时间。
#include <stdio.h>
#include <time.h>
int main(void)
{
char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
time_t timep;
struct tm *p;
time(&timep);
p = gmtime(&timep);
printf("year=%d,mon=%d,day=%d\r\n", (1900 + p->tm_year), (1 + p->tm_mon), p->tm_mday);
printf("wday=%s time=[%d:%d:%d]\r\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
return 0;
}
localtime使用
与gmtime类似,但返回的是本地时间非utc时间
#include <stdio.h>
#include <time.h>
int main(void)
{
char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
time_t timep;
struct tm *p;
time(&timep);
p = localtime(&timep);
printf("year=%d,mon=%d,day=%d\r\n", (1900 + p->tm_year), (1 + p->tm_mon), p->tm_mday);
printf("wday=%s time=[%d:%d:%d]\r\n", wday[p->tm_wday], p->tm_hour, p->tm_min, p->tm_sec);
return 0;
}
mktime使用
定义:time_t mktime(struct tm *timeptr);
说明:
用来将参数timeptr所指的tm结构数据转换成从1970年1月1日的UTC时间从0时0分0妙算起到现在所经过的秒数。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
time_t timep;
struct tm *p;
time(&timep);
printf("time():%ld\r\n", timep);
p = localtime(&timep);
timep = mktime(p);
printf("mktime():%ld\r\n", timep);
return 0;
}
strftime函数
#include <time.h>
定义:
size_t strftime(char *s, size_t max, const char *format,const struct tm *tm);
说明:
类似于snprintf函数,我们可以根据format指向的格式字符串,将struct tm结构体中信息输出到s指针指向的字符串中,最多为max个字节。当然s指针指向的地址需提前分配空间,比如字符数组或者malloc开辟的堆空间。
其中,格式化字符串各种日期和时间的详细的确切表示方法有如下多种,我们可以根据需要来格式化各种各样的含时间字符串。
%a 星期几的简写
%A 星期几的全称
%b 月分的简写
%B 月份的全称
%c 标准的日期的时间串
%C 年份的前两位数字
%d 十进制表示的每月的第几天
%D 月/天/年
返回值:
成功的话返回格式化之后s字符串的字节数,不包括null终止字符,但是返回的字符串包括null字节终止字符。否则返回0,s字符串的内容是未定义的。
#include <stdio.h>
#include <time.h>
#define BUFLEN 255
int main(int argc, char **argv)
{
time_t t = time(NULL);
char tmpBuf[BUFLEN];
//格式化时间显示
strftime(tmpBuf, BUFLEN, "%Y-%m-%d %H:%M:%S", localtime(&t));
printf("strftime out=%s\n", tmpBuf);
return 0;
}
strptime使用
Strftime的反向转换,格式化的字符串转成结构体的tm时间
#include <stdio.h>
#include <time.h>
int main(int argc, char **argv)
{
char *fmt = "%Y-%m-%d-%H:%M:%S";
char *buf = "2000-01-01-00:00:00";
struct tm tb;
if (strptime(buf, fmt, &tb) != NULL)
{
printf("operate success\r\n");
printf("asctime = %s\r\n", asctime(&tb));
}
return 0;
}
重要结构体说明
struct tm{
int tm_sec;/*秒数*/
int tm_min; /*分钟*/
int tm_hour;/*小时*/
int tm_mday;/*日期*/
int tm_mon; /*月份*/
int tm_year; /*从1990年算起至今的年数*/
int tm_wday; /*星期*/
int tm_yday; /*从每年的1月1日开始的天数*/
int tm_isdst; /*是否是夏令时*/
};
公众号链接:
扫一扫关注见更多内容