gettimeofday时间

gettimeofday: 挂钟时间

gettimeofday 系统调用可以获取系统当前挂钟时间(Wall-Clock Time)。它的第一个参数是一个指向 struct timeval 类型空间的指针。这个结构可以表示一个以秒为单位的时间。这个值被分为两个域,tv_sec 表示整秒数,而 tv_usec 表示剩余的微秒部分。整个 struct timeval 值表示的是从 Unix ''epoch''(UTC 时间 1970 年 1 月 1 日)开始到当前流逝的时间。gettimeofday 的第二个参数应该为 NULL。如需调用,请包含 <sys/time.h>。

以 Unix epoch 计算的秒数并不是一种非常便捷的计算时间的方式。库函数 localtime 和 strftime 被提供以帮助解析 gettimeofday 函数的返回值。localtime 函数的参数是一个指向秒数(struct timeval 中的 tv_sec 域)的指针,返回值是指向一个 struct tm 类型空间的指针。这个结构中包含的信息更有意义,它们是根据当前时区设置而被填入的时间域:

tm_hour、tm_min、tm_sec
当天的时间,分别对应时、分、秒
tm_year、tm_mon、tm_day
年、月、日
tm_wday
星期几。0 代表星期天。
tm_yday
一年中的第几天。
tm_isdst
代表启用夏令时的标志位。

而 strftime 可以从这个 struct tm 指针进一步生成自定义格式化的表示时间的字符串。格式与 printf 的指定方式类似,通过内嵌特定的代码指示输出特定的时间域。如下列字符串

%Y-%m-%d %H:%M:%S

将以如下格式输出时间:

2001-01-14 13:09:42

strftime 接受的参数依次包括一个指向字符缓冲的指针、缓冲的长度、格式化字符串和一个指向 struct tm 对象的指针。参考man 3 strftime获取完整的格式化代码列表。注意 localtime 和 strftime 都只处理到秒级别精度(即 struct timeval 的 tv_usec 部分是不处理的)。如果你希望这部分也被包含在你输出的字符串中,你需要手工进行处理。

要使用 strftime 或 localtime 请包含 <time.h>。

代码 8.6 所示的程序打印出了当前日期和时间,精确度到毫秒。

代码 8.6 (print-time.c) 打印日期和时间

#include <stdio.h>
#include <sys/time.h>
#include <time.h>
#include <unistd.h>

void print_time ()
{
  struct timeval tv;
  struct tm* ptm;
  char time_string[40];
  long milliseconds;

  /* 获得日期时间,并转化为 struct tm。 */
  gettimeofday (&tv, NULL);
  ptm = localtime (&tv.tv_sec);
  /* 格式化日期和时间,精确到秒为单位。*/
  strftime (time_string, sizeof (time_string), “%Y-%m-%d %H:%M:%S”, ptm);
  /* 从微秒计算毫秒。*/
  milliseconds = tv.tv_usec / 1000;
  /* 以秒为单位打印格式化后的时间日期,小数点后为毫秒。*/
  printf (“%s.%03ld\n”, time_string, milliseconds);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值