我正在尝试制作一个程序,该程序计算系统本地时间和用户输入时间之间的时差。
我对此有所了解,但是现在我陷于困境,不确定现在该怎么办。
#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(¤t_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(用户输入时间)之间的时差,因为我收到错误消息,指出它们没有相同的结构或联合。
如果你们中的任何一个可以帮助我,那将是很好!谢谢。
答案 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_hour
,tm_min
和tm_sec
是struct 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(¤t_time);
/* Calculate seconds since last midnight */
seconds2 = lt->tm_hour*60*60 + lt->tm_min*60 + lt->tm_sec;