add seconds to a date

后端 未结 4 1887
星月不相逢
星月不相逢 2020-12-17 15:03

I need to add seconds to a date. For example, if I have a date such as 2009127000000, I need to add the seconds to this date. Another example, add 50 seconds to 200912312359

相关标签:
4条回答
  • 2020-12-17 15:44

    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.

    0 讨论(0)
  • 2020-12-17 15:44

    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.

    0 讨论(0)
  • 2020-12-17 15:52

    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).

    0 讨论(0)
  • 2020-12-17 15:58

    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 讨论(0)
提交回复
热议问题