为日期添加秒数

时间:2009-12-07 10:39:20

标签: c unix datetime

我需要在日期中添加秒数。 例如,如果我有一个日期,例如2009127000000,我需要将秒添加到此日期。 另一个例子,给20091231235957增加50秒。

这可能在C?

4 个答案:

答案 0 :(得分:29)

在POSIX中,time_t值被指定为秒,但是C标准不能保证这一点,因此在非POSIX系统上可能不是这样。它通常是(事实上,我不确定它不是一个代表秒数的值)。

这是一个添加时间值的示例,它不假设time_t表示使用标准库设施的秒数,这对于操作时间来说真的不是特别好:

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

int main()
{
    time_t now = time( NULL);

    struct tm now_tm = *localtime( &now);


    struct tm then_tm = now_tm;
    then_tm.tm_sec += 50;   // add 50 seconds to the time

    mktime( &then_tm);      // normalize it

    printf( "%s\n", asctime( &now_tm));
    printf( "%s\n", asctime( &then_tm));

    return 0;
}

将时间字符串解析为适当的struct tm变量留作练习。 strftime()函数可用于格式化新函数(POSIX strptime()函数可以帮助解析)。

答案 1 :(得分:7)

C日期/时间类型time_t实现为自特定日期以来的秒数,因此要为其添加秒数,只需使用常规算术即可。如果这不是您要求的,请让您的问题更清楚。

答案 2 :(得分:7)

使用<time.h>中的类型和功能。

time_t now = time(0);
time_t now_plus_50_seconds = now + 50;
time_t now_plus_2_hours = now + 7200;

<time.h>声明处理time_tstruct tm类型的函数。这些功能可以做你想做的一切。

答案 3 :(得分:1)

尝试这样的事情:(注意:没有错误检查)

include <time.h>

char* string = ...;
char  buf[80];
struct tm;
strptime(string, "%Y%m...", &tm);
tm->tm_isdst = 0;
strftime(buf, sizeof(buf), "%Y%m...", localtime(mktime(&tm) + 50));