#define _CRT_SECURE_NO_WARNINGS
#include <time.h>
#include<stdio.h>
main(){
char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
time_t timep;
struct tm *p;
//time(&timep);
p = gmtime(&timep);
printf("%d %d %d \n", (1900+p->tm_year), (1+p->tm_mon), p->tm_mday);
printf("%s %d :%d :%d\n", wday[p->tm_wday], 8+p->tm_hour, p->tm_min, p->tm_sec);
UTC时间转换成 北京时间 的话,需要在年数上加1900,月份上加1,小时数加上8
当然同类型的函数还有localtime();得到本地时间,该函数同gm time函数 唯一区别是,在转换小时数不需要加上8了
#include <time.h>
#include<stdio.h>
main(){
char *wday[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
time_t timep;
struct tm *p;
//time(&timep);
p = gmtime(&timep);
printf("%d %d %d \n", (1900+p->tm_year), (1+p->tm_mon), p->tm_mday);
printf("%s %d :%d :%d\n", wday[p->tm_wday], 8+p->tm_hour, p->tm_min, p->tm_sec);
}
time()函数,返回一个从1970年1月1日 00:00:00到现在的秒数
time_t time(time_t * t); 当参数为NULL时直接返回秒数,当然也会将该值写入t指针指向的地址
gmtime();将time函数得到的秒数转换成一个UTC时间的结构体struct tm,
- struct tm{
- int tm_sec;
- int tm_min;
- int tm_hour;
- int tm_mday;
- int tm_mon;
- int tm_year;
- int tm_wday;
- int tm_yday;
- int tm_isdst;
- };
UTC时间转换成 北京时间 的话,需要在年数上加1900,月份上加1,小时数加上8
当然同类型的函数还有localtime();得到本地时间,该函数同gm time函数 唯一区别是,在转换小时数不需要加上8了
关于time_t (转子百度知道):
time_t实际上就是长整型long int; 如假包换!! 他用来保存从1970年1月1日0时0分0秒到现在时刻的秒数! 用time()这个函数获取! 对time_t数据类型的值来说,它所表示的时间不能晚于2038年1月18日19时14分07秒。 Visual C++里有个__time64_t数据类型来保存日历时间,并通过_time64()函数来获得日历时间,这样就可以通过该数据类型保存3001年1月1日0时0分0秒之前的时间。 附: time_t包含在time.h里 #ifndef __TIME_T #define __TIME_T typedef long time_t; /* 时间值time_t 为长整型long int(这里缺省类型就是int哈,可以省略不写)的别名*/ #endif
time_t : 先定义一个time_他的变量,然后把变量的地址传给time_t函数,函数返回距离1970.1.1的秒数,返回的结果存在该变量中。即等价于
time_t a
a=time(&timep);
p = gmtime(&a);