2017-02-16 17 views
0

Я хочу, чтобы вычислить разницу в секундах между двумя датами, но результат 0.разница в секундах между двумя датами в C

Вот код:

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 нормально, потому что я напечатал его члены и были в порядке, , но когда я печатаю секунды - 0.000000;

+3

'time_t = время (NULL);' - что-то не хватает? Также: '& *' бессмысленно. –

+1

Пожалуйста, посмотрите пример здесь: http://www.cplusplus.com/reference/ctime/difftime/ –

ответ

1

Пожалуйста, смотрите ниже

#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; 
} 

ВЫВОД

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 
+1

Это не работает с двумя датами, сделанными в разные дни :( –

5

Вы хотите

double seconds = difftime(end, start); 

вместо

double seconds = difftime(start, end); 

и вы забыли имя переменной time_t=time(NULL);, изменения к чему-то вроде:

time_t now; 
double seconds; 

time(&now); 
seconds = difftime(now, mktime(&recordFind->timeInserted)); 
Смежные вопросы