Solved

# finding difference between two datetime values in C

Posted on 2010-11-22
443 Views
Hi,

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 ?
0
Question by:MarioC82
• 3
• 2

LVL 53

Expert Comment

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

http://www.cplusplus.com/reference/clibrary/ctime/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 :

http://www.cplusplus.com/reference/clibrary/ctime/mktime/
0

Author Comment

I will have a look at this and respond again.
0

Author Comment

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

LVL 9

Expert Comment

You are missing %s in sscanf
0

LVL 53

Accepted Solution

Infinity08 earned 500 total points
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;

}
``````
0

Author Comment

Thanks Infinity08.
0

## Featured Post

An Outlet in Cocoa is a persistent reference to a GUI control; it connects a property (a variable) to a control.  For example, it is common to create an Outlet for the text field GUI control and change the text that appears in this field via that Ouâ€¦
Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were smallâ€¦
The goal of this video is to provide viewers with basic examples to understand and use pointers in the C programming language.
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.