linux时间函数
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、头文件
#include
二、结构体
a)tm结构体
struct tm {
int tm_sec;//秒
int tm_min;//分
int tm_hour;//小时
int tm_mday;//月的第几天
int tm_mon;//月份
int tm_year;//年
int tm_wday;//0~6,星期
int tm_yday;//
int tm_isdst;//
long int tm_gmtoff;//
const char * tm_zone;//时区字符串
};
b)timeval结构体
struct timeval{
long tv_sec;//秒
long tv_usec;//微秒
}
c)timezone结构体
struct timezonel{
int tz_minuteswest;//和Greenwich时间差了多少分钟
int tz_dsttime;//日光节约的时间状态
}
三、例子
a)time + ctime配合,time返回当前时间的秒数,把时间参数存于time_t tiCurrent中
time_t tiCurrent;
int seconds = time(&tiCurrent);// int seconds = time((time_t *)NULL);
printf("%d\n", seconds);//printf("%d\n", (int)tiCurrent);效果是一样的
char *cTimeNow;
cTimeNow = ctime(&tiCurrent);
printf("%s\n", cTimeNow);
b)gettimeofday,获取时间秒数和微妙数,存于struct timeva结构体中
struct timeval tvTime;
gettimeofday(&tvTime, (struct timezone *)0);
printf("%ld\n", _sec);
printf("%ld\n", _usec);
c)time+localtime(用localtime_r代替),类似于与ctime。Localtime把返回值存于结构
体struct tm中,下面的代码与(a)中的代码获得相同的结果
time_t tiCurrent;
int seconds = time(&tiCurrent);
printf("%d\n", seconds);
struct tm *p;
char *wDay[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
p = localtime(&tiCurrent);
printf("%s %d %d %d:%d:%d %d\n", wDay[p->tm_wday], p->tm_mon, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec, 1900+p->tm_year);
d)mktime+time+localtime,利用time()取得时间(秒数),利用localtime()转换
成struct tm,再利用mktime()将struct转换成原来的秒数
time_t tiCurrent;
int seconds = time(&tiCurrent);
printf("%d\n", (int)tiCurrent);
char *wDay[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
struct tm *p= localtime(&tiCurrent);
printf("%s %d %d %d:%d:%d %d\n", wDay[p->tm_wday], p->tm_mon, p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec, 1900+p->tm_year);
time_t tiCurrent1;
tiCurrent1 = mktime(p);
printf("%d\n", (int)tiCurrent1);
e)gmtime,将time_t结构体中的信息转换成真实世界所使用的时间日期标示方法,
将结果由结构体tm返回(转换成真实世界时间的函数:ctime,localtime(与gmtime
的使用方法相同,gmtime是世界时间,时差8小时),asctime(比localtime省事,把时间结构自动存到字符串中,也有时差)),以下三个printf的打印结果是相同的
struct tm *p;
char *wDay[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"};
p = localtime(&tiCurrent);
printf("localtime:%s %d %d %d:%d:%d %d\n", wDay[p->tm_wday], p->tm_mon,
p->tm_mday, p->tm_hour, p->tm_min, p->tm_sec, 1900+p->tm_year);
struct tm *p1;
p1 = gmtime(&tiCurrent);
printf("gmtime:%s %d %d %d:%d:%d %d\n", wDay[p1->tm_wday], p1->tm_mon,
p1->tm_mday, p1->tm_hour, p1->tm_min, p1->tm_sec, 1900+p1->tm_year);
char *cTimeNow1;
cTimeNow1 = asctime(p);
printf("asctime:%s\n", cTimeNow1);
常用组合:
获取时间:time(秒)+ gmtime(转化成现实世界的时间)+显示
设置时间:已知现实世界的时间+mktime(秒)+通过赋值timeval结构体,调用settimeofday。设置时间通过tm结构体非常方便,但需要注意的是settimeofday()月份的问题,如果要设置1月,那么tm->month = 2;time()和Gettimeofday()得到的时间也是