Алгоритм длительности года в С++

Я делаю программа, которой нужна продолжительность (в 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.

5
задан perelo 4 June 2012 в 08:00
поделиться