学习啦 > 学习电脑 > 操作系统 > Linux教程 >

Linux下用C获取当前时间命令是什么

时间: 加城1195 分享

  Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。本篇文章主要介绍了Linux获取当前时间的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

  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

  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

  #include

  #include

  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

  #include

  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

  #include

  #include

  #include

  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

  和最初想法不一致。

  查阅localtime的文档,发现这段话:

  This structure is statically allocated and shared by the functions gmtime and localtime. Each time either one of these functions is called the content of this structure is overwritten.

  也就是说每次只能同时使用localtime()函数一次,要不就会被重写!

  The localtime() function need not be reentrant. A function that is not required to be reentrant is not required to be thread-safe.

  因此localtime()不是可重入的。同时libc里提供了一个可重入版的函数localtime_r();

  Unlike localtime(), the reentrant version is not required to set tzname。

  修改程序:(localtime_r())

  #include

  #include

  #include

  #include

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

  struct tm ptm = { 0 };

  struct tm ptmEnd = { 0 };

  localtime_r(&tNow, &ptm);

  localtime_r(&tEnd, &ptmEnd);

  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;

  }

  最后出来的结果是:

  10:29:06

  10:59:06

  tm

  struct tm {

  int tm_sec; /* 秒 – 取值区间为[0,59] */

  int tm_min; /* 分 - 取值区间为[0,59] */

  int tm_hour; /* 时 - 取值区间为[0,23] */

  int tm_mday; /* 一个月中的日期 - 取值区间为[1,31] */

  int tm_mon; /* 月份(从一月开始,0代表一月) - 取值区间为[0,11] */

  int tm_year; /* 年份,其值等于实际年份减去1900 */

  int tm_wday; /* 星期 – 取值区间为[0,6],其中0代表星期天,1代表星期一 */

  int tm_yday; /* 从每年1月1日开始的天数– 取值区间[0,365],其中0代表1月1日 */

  int tm_isdst; /* 夏令时标识符,夏令时tm_isdst为正;不实行夏令时tm_isdst为0 */

  };

  time 函数

  返回:1970-1-1, 00:00:00以来经过的秒数

  原型: time_t time(time_t *calptr)

  结果可以通过返回值,也可以通过参数得到,见实例

  头文件

  返回值:

  成功:秒数,从1970-1-1,00:00:00 可以当成整型输出或用于其它函数

  失败:-1

  time_t now;

  time(&now);// 等同于now = time(NULL)

  printf("now time is %d\n", now);

  补充:Linux基本命令

  1.ls命令:

  格式::ls [选项] [目录或文件]

  功能:对于目录,列出该目录下的所有子目录与文件;对于文件,列出文件名以及其他信息。

  常用选项:

  -a :列出目录下的所有文件,包括以 . 开头的隐含文件。

  -d :将目录像文件一样显示,而不是显示其他文件。

  -i :输出文件的i节点的索引信息。

  -k :以k字节的形式表示文件的大小。

  -l :列出文件的详细信息。

  -n :用数字的UID,GID代替名称。

  -F : 在每个文件名后面附上一个字符以说明该文件的类型,“*”表示可执行的普通文 件;“/”表示目录;“@”表示符号链接;“l”表示FIFOS;“=”表示套接字。

  2.cd命令

  格式:cd [目录名称]

  常用选项:

  cd .. 返回上一级目录。

  cd ../.. 将当前目录向上移动两级。

  cd - 返回最近访问目录。

  3.pwd命令

  格式: pwd

  功能:显示出当前工作目录的绝对路径。

  相关阅读:Linux主要特性

  完全兼容POSIX1.0标准

  这使得可以在Linux下通过相应的模拟器运行常见的DOS、Windows的程序。这为用户从Windows转到Linux奠定了基础。许多用户在考虑使用Linux时,就想到以前在Windows下常见的程序是否能正常运行,这一点就消除了他们的疑虑。

  多用户、多任务

  Linux支持多用户,各个用户对于自己的文件设备有自己特殊的权利,保证了各用户之间互不影响。多任务则是现在电脑最主要的一个特点,Linux可以使多个程序同时并独立地运行。

  良好的界面

  Linux同时具有字符界面和图形界面。在字符界面用户可以通过键盘输入相应的指令来进行操作。它同时也提供了类似Windows图形界面的X-Window系统,用户可以使用鼠标对其进行操作。在X-Window环境中就和在Windows中相似,可以说是一个Linux版的Windows。

  支持多种平台

  Linux可以运行在多种硬件平台上,如具有x86、680x0、SPARC、Alpha等处理器的平台。此外Linux还是一种嵌入式操作系统,可以运行在掌上电脑、机顶盒或游戏机上。2001年1月份发布的Linux 2.4版内核已经能够完全支持Intel 64位芯片架构。同时Linux也支持多处理器技术。多个处理器同时工作,使系统性能大大提高。


Linux下用C获取当前时间相关文章:

1.linux shell获取当前时间命令

2.Linux C语言时间函数

3.linux查看java进程命令

4.Linux下如何编写第一个C语言hello world程序

5.Linux C语言怎样使用文本编辑器

4018918