Solved

finding difference between two datetime values in C

Posted on 2010-11-22
6
444 Views
Last Modified: 2012-05-10
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
Comment
Question by:MarioC82
  • 3
  • 2
6 Comments
 
LVL 53

Expert Comment

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

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

Author Comment

by:MarioC82
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.
0
Control application downtime with dependency maps

Visualize the interdependencies between application components better with Applications Manager's automated application discovery and dependency mapping feature. Resolve performance issues faster by quickly isolating problematic components.

 
LVL 9

Expert Comment

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

Accepted Solution

by:
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

0
 

Author Comment

by:MarioC82
ID: 34190690
Thanks Infinity08.
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
C: GetDiskFreeSpaceEx() for default drive 14 104
How to get time_t value that is a week old 6 163
How to build c program using make in mingw environment? 9 54
What is sub-make ? 2 39
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…
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 opening and writing to files in the C programming language.
The goal of this video is to provide viewers with basic examples to understand how to use strings and some functions related to them in the C programming language.

920 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now