如何修改C中的time_t时间戳?

Laz*_*zer 5 c time datetime

这是我们如何存储当前时间并使用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
$
Run Code Online (Sandbox Code Playgroud)

如何添加,例如5分35秒time_t t并将其存回t

pax*_*blo 5

time_t通常的整体类型表示从epoch秒,所以应该能够添加335(5分钟和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;
}
Run Code Online (Sandbox Code Playgroud)

输出是:

Sat Nov  6 10:10:34 2010
Sat Nov  6 10:15:34 2010
Run Code Online (Sandbox Code Playgroud)