struct my_time {
long long day, hour, minute, second;
void set(long long t) {
if (t>=0) {
day = t/60/60/24;
hour = t/60/60-day*24;
minute = t/60-hour*60-day*24*60;
second = t-minute*60-hour*60*60-day*60*60*24;
} else if (t%86400==0) {
day=t/86400;
hour=0;
minute=0;
second=0;
} else {
day = -1;
day += t/86400;
hour = abs(t/60/60-24*day-1);
minute = abs(t/60-hour*60-24*60*day-1);
second = (abs(t-minute*60-hour*60*60-60*60*24*day-1)+1)%60;
}
}
};
需要写一个时间结构体,set方法接收以秒为单位的秒数作为参数。当我进入方法时出现错误,例如-600。这些字段等于-1 23 49 0,但它们应该是-1 23 50 0。告诉我问题出在哪里。
我想你需要这样的东西:
结论:
我会以答案的形式写,只是因为评论的地方不够多,不好看。我根本没有提出正确的答案)只是一个想法。
同意@wololo 非常奇怪的算术。
但尝试这样做:
如果
t < 0,那么-tt,顺其自然day。day+ 1 并使用 - 符号。t秒数,以day天为单位。1 0 0 0 - t(секунд)。那是 1 天 -t秒。我希望我清楚地解释了这个想法。
现在让我们看一个例子。让
t = -2.t = -t = 2day = 0-(day + 1) = -1- 总天数t - day * 24 * 60 * 60 = t, 因为day = 01 0 0 0 - 0 0 0 2 = 0 23 59 58我们得到答案:-1 23 59 58
再举一个例子。让
t = -179429t = -t = 179429day = t / (24 * 60 * 60) =2`-(day + 1) = -3- 总天数t - day * 24 * 60 * 60 = 66291 0 0 0 - 0 1 50 29 = 0 22 09 31我们得到答案:-3 22 09 31 ???
也就是说,我们
6629在这个时间上加上几秒钟,我们得到-2 0 0 0了,然后会有更多172800的,嗯,我们得到0 0 0 0了,就像这个想法有一个地方一样。ps
1 0 0 0 - t,反而0 23 59 59更简单。你只需要23 - hours, 59 - minutes, 59 - seconds,它就会起作用,因为t < 86400