получить текущее время в секундах - PullRequest
10 голосов
/ 11 февраля 2010

Мне интересно, есть ли какая-нибудь функция, которая возвращает текущее время в секундах, всего 2 цифры в секундах?Я использую gcc 4.4.2.

Ответы [ 4 ]

16 голосов
/ 11 февраля 2010

Следующая полная программа показывает, как получить доступ к значению секунд:

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

int main (int argc, char *argv[]) {
    time_t now;
    struct tm *tm;

    now = time(0);
    if ((tm = localtime (&now)) == NULL) {
        printf ("Error extracting time stuff\n");
        return 1;
    }

    printf ("%04d-%02d-%02d %02d:%02d:%02d\n",
        tm->tm_year+1900, tm->tm_mon+1, tm->tm_mday,
        tm->tm_hour, tm->tm_min, tm->tm_sec);

    return 0;
}

Это выводит:

2010-02-11 15:58:29

Как это работает следующим образом.

  • он вызывает time(), чтобы получить наилучшее приближение к текущему времени (обычно количество секунд с начала эпохи, но на самом деле это не предусмотрено стандартом).
  • Затем он вызывает localtime(), чтобы преобразовать это в структуру, которая, среди прочего, содержит отдельные поля даты и времени.
  • В этот момент вы можете просто отменить ссылку на структуру, чтобы получить интересующие вас поля (tm_sec в вашем случае, но я показал несколько из них).

Имейте в виду, что вы также можете использовать gmtime() вместо localtime(), если вы хотите время по Гринвичу или UTC для тех, кто слишком молод, чтобы помнить: -).

2 голосов
/ 11 февраля 2010

Текущее время можно получить с помощью gettimeofday (C11), time (Linux) или localtime_r (POSIX); в зависимости от того, какой календарь и эпоху вы заинтересованы. Вы можете преобразовать его в секунды, прошедшие после календарной эпохи, или секунды текущей минуты, в зависимости от того, что вы хотите:

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

int main() {
    time_t current_secs = time(NULL);
    localtime_r(&current_secs, &current_time);

    char secstr[128] = {};
    struct tm current_time;
    strftime(secstr, sizeof secstr, "%S", &current_time);

    fprintf(stdout, "The second: %s\n", secstr);
    return 0;
}
2 голосов
/ 11 февраля 2010

Более переносимый способ сделать это - получить текущее время в виде time_t struct:

time_t mytime = time((time_t*)0);

Получить struct tm для этого time_t:

struct tm *mytm = localtime(&mytime);

Проверьте tm_sec член mytm. В зависимости от вашей библиотеки C нет гарантии, что возвращаемое значение time() основано на количестве секунд с начала минуты.

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

Вы хотите использовать gettimeofday:

man 2 gettimeofday

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

int main (int argc, char **argv)
{
  int iRet;
  struct timeval tv;

  iRet = gettimeofday (&tv, NULL); // timezone structure is obsolete
  if (iRet == 0)
  {
    printf ("Seconds/USeconds since epoch: %d/%d\n",
            (int)tv.tv_sec, (int)tv.tv_usec);
    return 0;
  }
  else
  {
    perror ("gettimeofday");
  }

  return iRet;
}

Это лучше использовать, чем time (0), потому что вы получаете также и аргументы использования атомарно, что является более распространенным вариантом использования.

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