Я делаю программа, которой нужна продолжительность (в time_t
) года.
Другими словами, time_t
ДД/ММ/ГГГГ + продолжительность = time_t
ДД/ММ/ГГГГ+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 секунд
Этот алгоритм, кажется, работает. Но мне было интересно, есть ли другой способ сделать это без всех этих условий и только с двумя возможными возвращаемыми значениями, или просто какой-то «трюк» для оптимизации.
Я попытался увеличить tm_year
из структуры 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.