这是我所追求的时间格式:
2009-10-08 04:31:33.918700000 -0500
我目前正在使用这个:
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", ts);
这使:
2009-10-11 13:42:57 CDT
这很接近,但不准确。我似乎无法-0500
在最后显示任何内容。另外,我将秒数作为整数。
我该如何解决这两个问题?
我想出了这个:
char fmt[64], buf[64];
struct timeval tv;
struct tm *tm;
gettimeofday(&tv, NULL);
if((tm = localtime(&tv.tv_sec)) != NULL)
{
strftime(fmt, sizeof fmt, "%Y-%m-%d %H:%M:%S.%%06u %z", tm);
snprintf(buf, sizeof buf, fmt, tv.tv_usec);
printf("'%s'\n", buf);
}
修复您遇到的问题:
gettimeofday()
, 和struct timeval
, 它有一个 microseconds 成员以获得更高的精度。struct timezone *
我尝试通过 的第二个参数手动重新创建时区偏移量gettimeofday()
,但在我的机器上它返回的偏移量为 0,这是不正确的。手册页有gettimefday()
很多关于在 Linux(这是我测试过的操作系统)下处理时区的内容。
"%Y-%m-%d %T %z"
,但它似乎%z
是一个 GNU 扩展。