получите текущее время в секундах

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

10
задан unwind 11 February 2010 в 07:53
поделиться

3 ответа

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

#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 для тех, кто слишком молод, чтобы помнить :-).

16
ответ дан 3 December 2019 в 18:33
поделиться
#include <stdio.h>`

int main(int argc, char **argv)
{
FILE *inputFiles[argc - 1];
int i;
for (i = 1; i < argc; i++)
{
    printf("%s\n",argv[i]);
    inputFiles[i] = fopen(argv[i], "r");
    printf("%p\n",inputFiles[i]);
}
  return 0;
}

Он печатает различные указатели для каждого указателя файла вместе с именами. Позволяет ОС правильно закрывать файлы:)

-121--4859528-

В дополнение к ответам, приведенным выше, помните, что структуры C++ поддерживают наследование и поэтому могут содержать указатели на таблицы. Это может иметь большое значение при сериализации и десериализации этих структур между процессами. Шаблоны также поддерживаются.

-121--1158522-

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

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

Получить struct tm для этого времени _ t :

struct tm *mytm = localtime(&mytime);

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

2
ответ дан 3 December 2019 в 18:33
поделиться

Вы можете получить текущее время с помощью 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
ответ дан 3 December 2019 в 18:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: