Получить текущую дату и время в секундах - PullRequest
4 голосов
/ 22 января 2010
    time_t rawtime;
struct tm *mytm;
time_t result;

time(&rawtime);

mytm=localtime(&rawtime);
mytm->tm_mon=month-1;
mytm->tm_mday=day;
mytm->tm_year=year-1900;

mytm->tm_sec=0;
mytm->tm_min=0;
mytm->tm_hour=0;

result = mktime(mytm);

Над фрагментом кода я ожидаю, что в результате отобразится число секунд, истекшее с 1970 года, 1 января для данной даты. ДД / ММ / ГГГГ хранится в день, месяц, год Но я получаю ошибку компиляции

error: dereferencing pointer to incomplete type

Ответы [ 3 ]

3 голосов
/ 22 января 2010

Вам нужно

#include <time.h>

в вашем файле, чтобы исправить ошибку о неполном типе.

Редактировать : укажите день, месяц, год, чтобы найти время в секундах с 1 января 1970 года до полуночи в этот день:

struct tm mytm = { 0 };
time_t result;
mytm.tm_year = year - 1900;
mytm.tm_mon = month - 1;
mytm.tm_mday = day;
result = mktime(&mytm);
if (result == (time_t) -1) {
    /* handle error */
} else {
    printf("%lld\n", (long long) result);
}

Обратите внимание, что в ISO C mktime() возвращает целое значение типа time_t, которое представляет время в аргументе struct tm *, но значение такого интегрального значения не обязательно "секунды с 1 января 1970 г. ». Это не должно быть в секундах вообще. POSIX требует, чтобы time(), mktime() и т. Д. Возвращали секунды с 1 января 1970 г., поэтому с вами все должно быть в порядке. Я упоминаю выше для полноты.

2 голосов
/ 22 января 2010

Функция «время» возвращает количество секунд с 1 января 1970 года по Гринвичу. Вам не нужно вызывать какие-либо другие функции. Тип time_t - это просто целочисленный тип, он, вероятно, эквивалентен типу int.

1 голос
/ 22 января 2010

Дитрих верен, однако, если вы хотите добавить количество секунд с начала эпохи в форматированную строку с другой информацией о дате, вам следует рассмотреть возможность использования strftime().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...