strftime () неправильно отображает секунды - PullRequest
0 голосов
/ 26 февраля 2009

Я попытался strftime (), чтобы получить отформатированную метку времени.

char ft[ 256 ];
struct tm *tmp;
strftime( ft, 256, "%D - %T", tmp );

Моя проблема в том, что я получаю "13/02/60 - 03: 07: -17958194" в результате. Есть ли способ правильно отобразить секунды? (Я использую Mac OS X и gcc)

Ответы [ 4 ]

7 голосов
/ 26 февраля 2009

В коде, который вы опубликовали, вы используете неинициализированное значение, которое объясняет, почему у вас возникла эта проблема. Следующий код приводит к тому, что вы ищете:

#include <stdio.h>
#include <time.h>

int
main(int argc, char *argv[]) {
  char ft[256];
  struct tm *tmp;
  time_t curtime;

  time(&curtime);
  tmp = localtime(&curtime);

  strftime(ft, 256, "%D - %T %s", tmp);
  printf("%s\n", ft);

  return(0);
}

Затем скомпилируйте и запустите пример:

cc -o time_ex time_ex.c
./time_ex
02/26/09 - 11:26:34 1235665594

ETA: Удалите% s, если вы хотите, конечно, местное время без UNIX-времени после него.

3 голосов
/ 26 февраля 2009

"% D -% T" должен дать вам надлежащие результаты, при условии, что вы хотите "мм / дд / гг - чч: мм: сс".

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

1 голос
/ 26 февраля 2009

% s и% S - это разные символы форматирования.

  • % s - количество секунд с начала эпохи Unix.
  • % S - значение секунд текущего времени (00-60) с начальным 0 для чисел <10. </li>
0 голосов
/ 26 февраля 2009

Вы не инициализируете struct tm *tmp; чем-либо - не могли бы вы опубликовать полный пример?

...