C编程中系统时间与用户输入时间之间的时差

时间:2018-07-30 01:47:58

标签: c time

我正在尝试制作一个程序,该程序计算系统本地时间和用户输入时间之间的时差。

我对此有所了解,但是现在我陷于困境,不确定现在该怎么办。

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

typedef struct TIME{
    int hour, minute, second;
}TIME;

int main(){
    TIME t1, t3;
    int seconds1, seconds2, totalSeconds;

    time_t current_time;
    char* c_time_string;

    current_time = time(NULL);
    c_time_string = ctime(&current_time);

    printf("Current time is %s", c_time_string);

    printf("Input desired time in HH:MM:SS (input as '12:12:12'): ");
    scanf("%d:%d:%d",&t1.hour, &t1.minute, &t1.second);

    seconds1 = t1.hour*60*60 + t1.minute*60 + t1.second;
    seconds2 = current_time.hour*60*60 + current_time.minute*60 + current_time.second;
    totalSeconds = seconds1-seconds2;

    t3.minute = totalSeconds/60;
    t3.hour = t3.minute/60;
    t3.minute = t3.minute%60;
    t3.second = totalSeconds%60;

    printf("Time difference is: %02d:%02d:%02d\n", t3.hour, t3.minute, t3.second);      
    return 0;
}

问题是我不确定如何计算当前时间与t1(用户输入时间)之间的时差,因为我收到错误消息,指出它们没有相同的结构或联合。

如果你们中的任何一个可以帮助我,那将是很好!谢谢。

2 个答案:

答案 0 :(得分:1)

current_time的类型为time_t,基本上是整数,没有像struct s这样的成员变量。

所以你不能喜欢current_time.hour

time_t存储距离UNIX epoch的秒数。

程序中给定时间的用户不包括年份,月份等详细信息,而仅包含小时,分钟和秒信息。通过time_t获得的time()具有总数从UNIX时代开始的秒数。

因此,您可能只想使用时,分,秒等信息

time_t t=time(NULL);
struct tm *c=localtime(&t);
int seconds2 = c->tm_hour*60*60 + c->tm_min*60 + c->tm_sec;

struct tm是用于存储日历时间的组成部分的结构,而localtime() localtime将日历时间转换为本地时间并返回指向struct tm的指针。

tm_hourtm_mintm_secstruct tm的成员,分别表示小时,分钟和秒。

请注意,tm_hour中的小时为24小时格式。如果要使用12小时版本,请使用tm_hour%12

答案 1 :(得分:1)

current_time的类型为time_t,它是一个整数,用于保存自UNIX时代(1970年1月1日00:00:00 UTC)以来的秒数。它不是在.hour.minute.second之类的成员中保留时间的结构。

要获取一天中的时间,您必须将current_time分解为所选时区的struct tm

/* 
  break down current_time into calendar time representation using
  local timezone
 */
struct tm *lt = localtime(&current_time);

/* Calculate seconds since last midnight */
seconds2 = lt->tm_hour*60*60 + lt->tm_min*60 + lt->tm_sec;