我正在制作一个需要time_t
一年持续时间(in )的程序。
在其他方面,time_t
DD/MM/YYYY + 持续时间 = time_t
DD/MM/YYYY+1
所以它可能并不总是 365 天(29/02/2012 将变为 28/02/2013)
这是我带来的算法:
if YEAR is leap than
if we are before the 29th feb' than return 365+1 days
else if we are the 29th feb' than return 365-1 days
else return 365 days
else if YEAR+1 is leap than
if we are before or the 28th feb' than return 365 days
else return 365+1 days
else return 365 days
在这里,一天是 60 * 60 * 24 秒
这个算法似乎有效。但我想知道是否有另一种方法可以在没有所有这些条件且只有 2 个可能的返回值的情况下执行此操作,或者只是一些“技巧”来优化事情。
我试图tm_year
从struct tm
这样的增加:
// t is the input time_t
struct tm Tm (*localtime(&t));
if (Tm.tm_mon == 2 && Tm.tm_mday == 29) --Tm.tm_mday;
++Tm.tm_year;
return mktime(&Tm) - t;
但结果不是我想要的,我得到了 -1 小时,或者 -25 ......
我想这是因为一年不完全是 365 * 24 * 60 * 60。