使用当前时间获取时差

时间:2015-12-24 15:25:42

标签: c

我为我的孩子(8岁)制作了一个数学游戏,在某些时候我决定告诉他需要多长时间来回答这个问题,所以我决定在这里使用函数时间。

我写了以下程序:

#include <time.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>

struct setClock{
    int hour;
    int minutes;
    int seconds;
};

struct setClock currTime(void);
void timeCheck(struct setClock myClock[2]);

int main(void){
    struct setClock myClock[2];

    myClock[0] = currTime();
    printf("Start Time: %d:%d:%d\n\n", myClock[0].hour, myClock[0].minutes, myClock[0].seconds );

    sleep(5);

    myClock[1] = currTime();
    printf("End Time:   %d:%d:%d\n", myClock[1].hour, myClock[1].minutes, myClock[1].seconds );

    timeCheck(myClock);

    return 0;

}

struct setClock currTime(void){
    struct setClock ret;
    struct tm *tm;
    time_t myTime;

    myTime=time(NULL);
    tm=localtime(&myTime);

    ret.hour = tm->tm_hour;
    ret.minutes = tm->tm_min;
    ret.seconds = tm->tm_sec;

    return ret;
}

void timeCheck(struct setClock myClock[2]){
    int hour;
    int minute;

    time_t end, start;
    double diff;

    start = (time_t)((myClock[0].hour * 60 + myClock[1].hour) * 60) ;
    end   = (time_t)((myClock[0].minutes * 60 + myClock[1].minutes) * 60) ;

    if( end < start ){
        end += 24 * 60 * 60 ;
    }

    diff = difftime(end, start);

    hour = (int) diff / 3600;
    minute = (int) diff % 3600 / 60;
    printf("\n\n");
    printf("The elapsed time is  %d Hours - %d Minutes\n", hour, minute);
}

当我运行它时,我得到不同的输出,如:

Start Time: 16:19:2

End Time:   16:19:7


The elapsed time is  3 Hours - 3 Minutes

或者:

Start Time: 16:19:14

End Time:   16:19:19


The elapsed time is  1 Hours - 1 Minutes

但输出应该是:

The elapsed time is  0 Hours - 0 Minutes

我真的不知道我的timeCheck功能有什么问题。 无论如何,如果我修复它,我需要将其展开以进行打印:

The elapsed time is  0 Hours - 0 Minutes - 5 Seconds.

1 个答案:

答案 0 :(得分:2)

start = (time_t)((myClock[0].hour * 60 + myClock[1].hour) * 60) ;
end   = (time_t)((myClock[0].minutes * 60 + myClock[1].minutes) * 60) ;

这段代码似乎是无稽之谈。我认为这应该是

start = (time_t)((myClock[0].hour * 60 + myClock[0].minutes) * 60 + myClock[0].seconds) ;
end   = (time_t)((myClock[1].hour * 60 + myClock[1].minutes) * 60 + myClock[1].seconds) ;

然后,让功能打印出你想要的东西。

  1. int second;
  2. 之后添加变量int minute;
  3. second = (int) diff % 60;
  4. 之后添加计算minute = (int) diff % 3600 / 60;
  5. 打印结果
    printf("The elapsed time is %d Hours - %d Minutes - %d Seconds.\n", hour, minute, second);