使用strftime()。
#include <stdio.h>
#include <time.h>
int main()
{
time_t timer;
char buffer[26];
struct tm* tm_info;
timer = time(NULL);
tm_info = localtime(&timer);
strftime(buffer, 26, "%Y-%m-%d %H:%M:%S", tm_info);
puts(buffer);
return 0;
}
对于毫秒部分,来看看这个问题。 如何使用ANSI C测量时间(以毫秒为单位)?
以上答案并不能完全回答问题(具体来说是毫秒级部分)。 我的解决方案是在strftime之前使用gettimeofday。 请注意避免将millisec四舍五入到“1000”。 这是基于哈米德·纳扎里的回答。
#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;
}
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;
}
但这不会给您提供亚秒分辨率,因为这在time_t
中是不可用的。 它输出:
2010-09-09 10:08:34.000
如果您确实受到规范的约束,并且不想要day和hour之间的空格,只需将其从格式字符串中删除。