当前位置 主页 > 服务器问题 > Linux/apache问题 >
Linux下用C获取当前时间,具体如下:
代码(可以把clock_gettime换成time(NULL))
void getNowTime() { timespec time; clock_gettime(CLOCK_REALTIME, &time); //获取相对于1970到现在的秒数 tm nowTime; localtime_r(&time.tv_sec, &nowtime); char current[1024]; sprintf(current, "%04d%02d%02d%02d:%02d:%02d", nowTime.tm_year + 1900, nowTime.tm_mon, nowTime.tm_mday, nowTime.tm_hour, nowTime.tm_min, nowTime.tm_sec); }
分析:
clock_gettime()
函数"clock_gettime"是基于Linux C语言的时间函数,他可以用于计算精度和纳秒。
语法:
#include<time.h> int clock_gettime(clockid_t clk_id,struct timespec *tp);
参数:
clk_id : 检索和设置的clk_id指定的时钟时间。
CLOCK_REALTIME:系统实时时间,随系统实时时间改变而改变,即从UTC1970-1-1 0:0:0开始计时,中间时刻如果系统时间被用户改成其他,则对应的时间相应改变
CLOCK_MONOTONIC:从系统启动这一刻起开始计时,不受系统时间被用户改变的影响 CLOCK_PROCESS_CPUTIME_ID:本进程到当前代码系统CPU花费的时间 CLOCK_THREAD_CPUTIME_ID:本线程到当前代码系统CPU花费的时间struct timespec { time_t tv_sec; /* 秒*/ long tv_nsec; /* 纳秒*/ };
localtime()
localtime是 把从1970-1-1零点零分到当前时间系统所偏移的秒数时间转换为本地时间.
语法
说明:此函数获得的tm结构体的时间是日历时间。
用 法: struct tm *localtime(const time_t *clock);
返回值:返回指向tm 结构体的指针.tm结构体是time.h中定义的用于分别存储时间的各个量(年月日等)的结构体.
例1:
#include <stdio.h> #include <stddef.h> #include <time.h> int main(void) { time_t timer;//time_t就是long int 类型 struct tm *tblock; timer = time(NULL); tblock = localtime(&timer); printf("Local time is: %s\n", asctime(tblock)); return 0; }
执行结果:
Local time is: Mon Feb 16 11:29:26 2009
例2:
上面的例子用了asctime函数,下面这个例子不使用这个函数一样能获取系统当前时间。需要注意的是年份加上1900,月份加上1。
#include<time.h> #include<stdio.h> int main() { struct tm *t; time_t tt; time(&tt); t = localtime(&tt); printf("%4d年%02d月%02d日 %02d:%02d:%02d\n", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec); return 0; }
localtime()与localtime_r()的区别
localtime():
#include <cstdlib> #include <iostream> #include <time.h> #include <stdio.h> using namespace std; int main(int argc, char *argv[]) { time_t tNow =time(NULL); time_t tEnd = tNow + 1800; //注意下面两行的区别 struct tm* ptm = localtime(&tNow); struct tm* ptmEnd = localtime(&tEnd); char szTmp[50] = {0}; strftime(szTmp,50,"%H:%M:%S",ptm); char szEnd[50] = {0}; strftime(szEnd,50,"%H:%M:%S",ptmEnd); printf("%s /n",szTmp); printf("%s /n",szEnd); system("PAUSE"); return EXIT_SUCCESS; }