finding difference between two datetime values in C

Posted on 2010-11-22
Last Modified: 2012-05-10

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

Expert Comment

ID: 34189245
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 :

Author Comment

ID: 34190010
I will have a look at this and respond again.

Author Comment

ID: 34190364
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.
DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.


Expert Comment

ID: 34190489
You are missing %s in sscanf
LVL 53

Accepted Solution

Infinity08 earned 500 total points
ID: 34190557
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


Author Comment

ID: 34190690
Thanks Infinity08.

Featured Post

Netscaler Common Configuration How To guides

If you use NetScaler you will want to see these guides. The NetScaler How To Guides show administrators how to get NetScaler up and configured by providing instructions for common scenarios and some not so common ones.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Problem with MFCApp 78 382
Socket Programming (Unix) 8 127
Global Keyboard Hooks Blocked 4 76
NEED HELP WITH VISUAL STUDIO 2017 (beginner) 6 38
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…
Summary: This tutorial covers some basics of pointer, pointer arithmetic and function pointer. What is a pointer: A pointer is a variable which holds an address. This address might be address of another variable/address of devices/address of fu…
The goal of this video is to provide viewers with basic examples to understand recursion in the C programming language.
The goal of this video is to provide viewers with basic examples to understand and use switch statements in the C programming language.

776 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question