Как распечатать время в формате: 2009-08-10 18: 17: 54.811

Какой лучший способ распечатать время на C в формате 2009‐08‐10 18:17:54.811 ?

Используйте strftime () .

 #include  #include  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; } 

Для миллисекундной части взгляните на этот вопрос. Как измерить время в миллисекундах с использованием ANSI C?

Вышеупомянутые ответы не полностью отвечают на вопрос (в частности, часть миллисекунда). Моим решением для этого является использование gettimeofday до strftime. Обратите внимание на осторожность, чтобы избежать округления миллисекукса до «1000». Это основано на ответе Хамида Назари.

 #include  #include  #include  #include  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  #include  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 

Если вы действительно ограничены спецификациями и не хотите пространства между днем ​​и часом, просто удалите его из строки формата.

После печати кода с точностью до микросекунды. Все, что нам нужно сделать, это использовать gettimeofday и strftime на tv_sec и добавить tv_usec в построенную строку.

 #include  #include  #include  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; } 

Вы можете использовать strftime , но struct tm не имеет разрешения в течение нескольких секунд. Я не уверен, что это абсолютно необходимо для ваших целей.

 struct tm tm; /* Set tm to the correct time */ char s[20]; /* strlen("2009-08-10 18:17:54") + 1 */ strftime(s, 20, "%F %H:%M:%S", &tm); 
  • Конвертировать время в 12 часов в 24 часа
  • Python time.clock () vs. time.time () точность?
  • xcode swift am / pm время до 24-часового формата
  • Получить временную метку в C в микросекундах?
  • Изменение системной даты программно
  • Как рассчитать «время назад» в Java?
  • Должен ли я использовать classы даты и времени Java или использовать стороннюю библиотеку, такую ​​как Joda Time?
  • Как преобразовать currentTimeMillis в формат чтения?
  • Почему System.nanoTime () медленнее (по производительности), чем System.currentTimeMillis ()?
  • Преобразование эпохи UNIX в объект Date
  • Как у вас пародия на пару секунд в андроиде?
  • Давайте будем гением компьютера.