Ham*_*ari 98
使用strftime().
#include <stdio.h>
#include <time.h>
int main()
{
time_t timer;
char buffer[26];
struct tm* tm_info;
time(&timer);
tm_info = localtime(&timer);
strftime(buffer, 26, "%Y-%m-%d %H:%M:%S", tm_info);
puts(buffer);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
对于毫秒部分,请看一下这个问题.如何使用ANSI C测量时间(以毫秒为单位)?
Chr*_*ris 27
上述答案并未完全回答这个问题(特别是毫秒级部分).我的解决方案是在strftime之前使用gettimeofday.请注意避免将millisec舍入为"1000".这是基于Hamid Nazari的回答.
#include <stdio.h>
#include <sys/time.h>
#include <time.h>
#include <math.h>
int main() {
char buffer[26];
int millisec;
struct tm* tm_info;
struct timeval tv;
gettimeofday(&tv, NULL);
millisec = lrint(tv.tv_usec/1000.0); // Round to nearest millisec
if (millisec>=1000) { // Allow for rounding up to nearest second
millisec -=1000;
tv.tv_sec++;
}
tm_info = localtime(&tv.tv_sec);
strftime(buffer, 26, "%Y:%m:%d %H:%M:%S", tm_info);
printf("%s.%03d\n", buffer, millisec);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
pax*_*blo 10
time.h
定义一个strftime
函数,它可以为您提供以下内容的文本表示time_t
:
#include <stdio.h>
#include <time.h>
int main (void) {
char buff[100];
time_t now = time (0);
strftime (buff, 100, "%Y-%m-%d %H:%M:%S.000", localtime (&now));
printf ("%s\n", buff);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但这不会给你亚秒级的分辨率,因为那是不可用的time_t
.它输出:
2010-09-09 10:08:34.000
Run Code Online (Sandbox Code Playgroud)
如果你真的受到规范的限制,并且不想要白天和小时之间的空间,只需将其从格式字符串中删除即可.
以下代码以微秒精度打印。我们所要做的就是使用gettimeofday
and strftime
ontv_sec
并附tv_usec
加到构造的字符串。
#include <stdio.h>
#include <time.h>
#include <sys/time.h>
int main(void) {
struct timeval tmnow;
struct tm *tm;
char buf[30], usec_buf[6];
gettimeofday(&tmnow, NULL);
tm = localtime(&tmnow.tv_sec);
strftime(buf,30,"%Y:%m:%dT%H:%M:%S", tm);
strcat(buf,".");
sprintf(usec_buf,"%dZ",(int)tmnow.tv_usec);
strcat(buf,usec_buf);
printf("%s",buf);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
181569 次 |
最近记录: |