• C

finding difference between two datetime values in C


I have the following problem. I have to find the elapsed time in seconds between two given dates in the following format.

yyyyMMddhhmmss example: 20101118190541

Now i have two of these as a char [14] array and i need to find the difference in seconds between them.

Is there any C library which is portable or some algorithm i can use to calculate it ?
Who is Participating?

Improve company productivity with a Business Account.Sign Up

Infinity08Connect With a Mentor Commented:
The idea is good, but there are a few problems with that statement :

1) a 14 character string is a char[15] array, because you need an extra character for the terminating '\0'.

2) when parsing a string, you use sscanf, not scanf.

3) the struct tm holds ints, so you need to use %d, not %s when parsing.

4) %.4d is not supported for sscanf. You need to use %4d.

5) you need to pass the addressed of the ints as additional parameters of sscanf.

6) tm_sec indicates the seconds, not tm_wday.

7) you need to adjust tm_year and tm_mon after parsing.

Here's some sample code :
#include <stdio.h>
#include <time.h>

int main(void) {
    char fromDate[15] = "20101118190541";
    struct tm tt;

    sscanf(fromDate, "%4d%2d%2d%2d%2d%2d", &(tt.tm_year), &(tt.tm_mon), &(tt.tm_mday), &(tt.tm_hour), &(tt.tm_min), &(tt.tm_sec));
    tt.tm_year -= 1900;
    tt.tm_mon -= 1;

    time_t tim = mktime(&tt);
    printf("%s\n", ctime(&tim));

    return 0;

Open in new window

You can easily calculate the difference between two timestamps in time_t format using difftime :


It's just a matter of getting the corresponding time_t for your timestamp. And that can be done by parsing the timestamp, filling a struct tm, and then calling mktime :

MarioC82Author Commented:
I will have a look at this and respond again.
Managing Security & Risk at the Speed of Business

Gartner Research VP, Neil McDonald & AlgoSec CTO, Prof. Avishai Wool, discuss the business-driven approach to automated security policy management, its benefits and how to align security policy management with business processes to address today's security challenges.

MarioC82Author Commented:
Hi i have a quick question, with the above date format would something like this work to populate the tm struct.

fromDate is a char[14] array containing the date.

scanf(fromDate, "%.4s%.2s%.2s%.2s%.2%.2", t->tm_year, t->tm_mon, t->tm_mday, t->tm_hour, t->tm_min, t->tm_wday);

However i dont seem to get the values to pass i only get current date still.
You are missing %s in sscanf
MarioC82Author Commented:
Thanks Infinity08.
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.