C 将延迟添加到时间格式结构“中”;tm";

C 将延迟添加到时间格式结构“中”;tm";,c,time,strftime,C,Time,Strftime,我想在struct“tm”格式中添加秒到时间的延迟,因此我运行以下代码: #include<stdio.h> #include<stdlib.h> #include<time.h> #include<limits.h> #define SEC_PER_DAY 86400 #define SEC_PER_HR 3600 #define SEC_PER_MIN 60 int main(void) { time_t now;

我想在struct“tm”格式中添加秒到时间的延迟,因此我运行以下代码:

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

#define SEC_PER_DAY 86400

#define SEC_PER_HR 3600

#define SEC_PER_MIN 60

int main(void) {
    time_t     now;
    time_t     time_delay;
    struct tm *ts;
    struct tm *ts_delay;
    char       buf[140];
    char       buf_delay[140];
    now = time(NULL);
    int delay =100;

    ts_delay = localtime(&now);

    printf("day = %d \n",ts_delay->tm_mday);
    ts_delay->tm_mday += delay /SEC_PER_DAY;
    printf("day = %d \n",ts_delay->tm_mday);
    printf("hour = %d \n",ts_delay->tm_hour);
    ts_delay->tm_hour += (delay%SEC_PER_DAY)/SEC_PER_HR;
    printf("hour = %d \n",ts_delay->tm_hour);
    printf("min = %d \n",ts_delay->tm_min);
    ts_delay->tm_min += ((delay%SEC_PER_DAY)%SEC_PER_HR)/SEC_PER_MIN;
    printf("min = %d \n",ts_delay->tm_min);
    printf("sec = %d \n",ts_delay->tm_sec);
    ts_delay->tm_sec += ((delay%SEC_PER_DAY)%SEC_PER_HR)%SEC_PER_MIN;
    printf("sec = %d \n",ts_delay->tm_sec);

    /* Format and print the time, "ddd yyyy-mm-dd hh:mm:ss zzz" */
    ts = localtime(&now);


    strftime(buf, sizeof(buf), "%FT%T%z", ts);
    strftime(buf_delay, sizeof(buf_delay), "%FT%T%z", ts_delay);
    puts(buf);
    puts(buf_delay);
    return 0; 
}
似乎延迟并没有添加到ts_延迟中


任何向正确方向的推动都会非常有帮助。thx会覆盖您的
struct tm*ts_delay
。调用
localtime()
您有以下代码:

ts_delay = localtime(&now);
... change ts_delay;
ts = localtime(&now);
现在,
localtime()
返回一个指针。因此,必须分配一些存储,以便localtime的返回值可以指向有效的位置。 运行时将在单个静态缓冲区(可能是每个线程)中为结果分配该存储 localtime()的。因此,2。调用localtime()将覆盖
ts\u delay
指向的相同缓冲区

而是将localtime()的结果复制到您自己管理的存储器中,而不是将
struct tm
指针复制到单个可用缓冲区中

struct tm ts;      //not a pointer anymore
struct tm ts_delay;

ts_delay = *localtime(&now); //copy the returned struct
... change ts_delay;
ts = *localtime(&now);
或者使用
getlocaltime\r
,如果您的平台提供了它,例如

localtime_r(&now, &ts);

它觉得直接将
延迟
添加到
现在
会更直接,但要摆弄秒/天等等。
localtime_r(&now, &ts);