Как изменить метку времени time_t в C? - PullRequest
5 голосов
/ 06 ноября 2010

Таким образом мы можем сохранить текущее время и распечатать его, используя time.h:

$ cat addt.c
#include<stdio.h>
#include<time.h>

void print_time(time_t tt) {
    char buf[80];
    struct tm* st = localtime(&tt);
    strftime(buf, 80, "%c", st);
    printf("%s\n", buf);
}

int main() {
    time_t t = time(NULL);
    print_time(t);
    return 0;
}
$ gcc addt.c -o addt
$ ./addt
Sat Nov  6 15:55:58 2010
$

Как добавить, например, 5 минут 35 секунд к time_t t и сохранить его обратно в t

1 Ответ

5 голосов
/ 06 ноября 2010

time_t - это обычно целочисленный тип, указывающий секунды с начала эпохи, поэтому вы сможете добавить 335 (пять минут и 35 секунд).

Имейте в виду, что стандарт ISO C99 гласит:

Диапазон и точность времен, представляемых в clock_t и time_t, определяются реализацией.

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

См. Следующую модификацию вашей программы, которая добавляет пять минут (300 секунд):

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

void print_time(time_t tt) {
    char buf[80];
    struct tm* st = localtime(&tt);
    strftime(buf, 80, "%c", st);
    printf("%s\n", buf);
}

int main() {
    time_t t = time(NULL);
    print_time(t);
    t += 300;
    print_time(t);
    return 0;
}

Вывод:

Sat Nov  6 10:10:34 2010
Sat Nov  6 10:15:34 2010
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...