提问者:小点点

如何打印时间格式:2009-08-10 18:17:54.811


用C语言打印2009-08-10 18:17:54.811格式的时间的最佳方法是什么?


共3个答案

匿名用户

使用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之间的空格,只需将其从格式字符串中删除。