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 20091231235957.
Is this possible in C?
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 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));