首页 > 系统 > Linux > 正文

Linux下用C获取当前时间

2019-11-02 16:59:16
字体:
来源:转载
供稿:网友

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; }

最后出来的结果是:

21:18:39

21:18:39

和最初想法不一致。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表