1

I want to calculate the difference in seconds between two dates but the result is 0.

Here is the code:

time_t=time(NULL);
struct tm * timeNow=localtime();
time_t start=mktime(&*timeNow);
time_t end=mktime(&*recordFind->timeInserted);

double seconds=difftime(start,end);

recordFind->timeInserted is ok because I printed his members and were ok, but when I print seconds is 0.000000 ;

David Ranieri
  • 39,972
  • 7
  • 52
  • 94
joesid
  • 671
  • 1
  • 10
  • 21

2 Answers2

5

You want

double seconds = difftime(end, start);

instead of

double seconds = difftime(start, end);

and you forget to name the variable time_t=time(NULL);, change to something like:

time_t now;
double seconds;

time(&now);
seconds = difftime(now, mktime(&recordFind->timeInserted));
David Ranieri
  • 39,972
  • 7
  • 52
  • 94
1

Please see below

#include <stdio.h>

struct TIME
{
    int seconds;
    int minutes;
    int hours;
};

void differenceBetweenTimePeriod(struct TIME t1, struct TIME t2, struct TIME *diff);

int main()
{    
    struct TIME startTime, stopTime, diff;
    printf("Enter start time: \n");
    printf("Enter hours, minutes and seconds respectively: ");
    scanf("%d %d %d", &startTime.hours, &startTime.minutes, &startTime.seconds);

    printf("Enter stop time: \n");
    printf("Enter hours, minutes and seconds respectively: ");
    scanf("%d %d %d", &stopTime.hours, &stopTime.minutes, &stopTime.seconds);

    // Calculate the difference between the start and stop time period.
    differenceBetweenTimePeriod(startTime, stopTime, &diff);

    printf("\nTIME DIFFERENCE: %d:%d:%d - ", startTime.hours, startTime.minutes, startTime.seconds);
    printf("%d:%d:%d ", stopTime.hours, stopTime.minutes, stopTime.seconds);
    printf("= %d:%d:%d\n", diff.hours, diff.minutes, diff.seconds);

    return 0;
}

void differenceBetweenTimePeriod(struct TIME start, struct TIME stop, struct TIME *diff)
{
    if(stop.seconds > start.seconds){
        --start.minutes;
        start.seconds += 60;
    }

    diff->seconds = start.seconds - stop.seconds;
    if(stop.minutes > start.minutes){
        --start.hours;
        start.minutes += 60;
    }

    diff->minutes = start.minutes - stop.minutes;
    diff->hours = start.hours - stop.hours;
}

OUTPUT

Enter start time:
Enter hours, minutes and seconds respectively:
12
34
55
Enter stop time:
Enter hours, minutes and seconds respectively:
8
12
15

TIME DIFFERENCE: 12:34:55 - 8:12:15 = 4:22:40
David Ranieri
  • 39,972
  • 7
  • 52
  • 94
Amit Kumar Verma
  • 357
  • 1
  • 3
  • 15