开发者

add seconds to a date

I need to add seconds to a date. For example, if 开发者_如何学GoI have a date such as 2009127000000, I need to add the seconds to this date. Another example, add 50 seconds to 20091231235957.

Is this possible in C?


In POSIX a time_t value is specified to be seconds, however that's not guaranteed by the C standard, so it might not be true on non-POSIX systems. It commonly is (in fact, I'm not sure how often it isn't a value representing seconds).

Here's an example of adding time values that doesn't assume a time_t represents seconds using the standard library facilities, which are really not particularly great for manipulating time:

#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;
}

Parsing your time string into an appropriate struct tm variable is left as an exercise. The strftime() function can be used to format a new one (and the POSIX strptime() function can help with the parsing).


Use types and functions from <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> declares functions that deal with time_t and struct tm types. These functions can do all you want.


The C date/time type time_t is implemented as the number of seconds since a certain date, so to add seconds to it you simply use normal arithmetic. If this is not what you are asking about please make your question clearer.


Try something like this: (Note: no error checking)

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));
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜