Мой вопрос об использовании -1900 в tm_year - PullRequest
0 голосов
/ 17 марта 2019

Я изучаю c++ в университете, и есть фрагмент кода, о котором я не понимаю ничего. Я использую +1900, но мой профессор использует -1900 в строке комментария.

Fecha& Fecha::operator +=(int days) {
tm f = {};
f.tm_mday = day_ + days;
f.tm_mon = mon_ - 1;
f.tm_year = year_ - 1900; //there is my dude, why out -1900 and not +1900 
                         //instead like below
mktime(&f);
day_ = f.tm_mday;
mon_ = f.tm_mon + 1;
year_ = f.tm_year + 1900;
return *this; 
}

Ответы [ 2 ]

2 голосов
/ 17 марта 2019

In struct tm, tm_year - это год с 1900 года. Таким образом, чтобы преобразовать григорианский год в правильное значение tm_year, вычтите 1900. Чтобы преобразовать из tm_year вГригорианский год, вы добавляете 1900.

Две операции должны быть противоположны друг другу - одно сложение и одно вычитание - как в противном случае, если вы конвертировали назад и вперед несколько раз, вы в конечном итоге изменили бы значение большеи больше.

1 голос
/ 17 марта 2019

Вы не показываете полный код, поэтому я предполагаю , что year_ является членом вашего класса.

В этом случае вы должны обратиться кДиапазон этого значения.struct tm ожидает, что год будет числом лет с 1900 года. Если ваш класс хранит количество лет с момента рождения Иисуса Христа, то вам придется убрать 1900, чтобы перейти от ожидания вашего участника к ожиданию tm.

Например, вы будете хранить 2019 в вашем year_ члене, но для tm.tm_year требуется 119 (таким образом 2019 - 1900).

Делая обратное, вы 'Придется отменить операцию, то есть добавить 1900.

...