Linux下用C获取当前时间

2019-10-12 16:35:54丽君

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: %sn", 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:%02dn", 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; 
}