这是我之后的格式化时间:
2009-10-08 04:31:33.918700000 -0500
Run Code Online (Sandbox Code Playgroud)
我目前正在使用这个:
strftime(buf, sizeof(buf), "%Y-%m-%d %H:%M:%S %Z", ts);
Run Code Online (Sandbox Code Playgroud)
这使:
2009-10-11 13:42:57 CDT
Run Code Online (Sandbox Code Playgroud)
哪个很接近,但不准确.我似乎无法-0500在最后显示任何内容.另外我把秒作为int.
我该如何解决这两个问题?
unw*_*ind 24
我想出了这个:
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);
}
Run Code Online (Sandbox Code Playgroud)
修复您遇到的问题:
gettimeofday(),和struct timeval,具有微秒成员以获得更高的精度.我尝试通过第二个struct timezone *参数手动重新创建时区偏移量gettimeofday(),但在我的机器上它返回的偏移量为0,这是不正确的.该手册为gettimefday()有相当大谈时区的Linux下的处理(这是我测试过的OS).