#c #tm #time.h
#c #tm #time.h
Вопрос:
Я учусь c
в университете, и есть фрагмент кода, в котором я кое-чего не понимаю. Я использую, 1900
но мой профессор использует -1900
в строке комментария.
Fechaamp; 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(amp;f);
day_ = f.tm_mday;
mon_ = f.tm_mon 1;
year_ = f.tm_year 1900;
return *this;
}
Комментарии:
1. Два кода имеют разный порядок операндов
Ответ №1:
В struct tm
, tm_year
— это год с 1900 года. Итак, чтобы преобразовать григорианский год в правильное tm_year
значение, вычитается 1900. Чтобы преобразовать из tm_year
в григорианский год, вы добавляете 1900.
Две операции должны быть противоположны друг другу — одно сложение и одно вычитание, — поскольку в противном случае, если вы будете преобразовывать туда и обратно несколько раз, вы в конечном итоге будете изменять значение все больше и больше.
Комментарии:
1. большое вам спасибо, извините, если мой английский не самый лучший или сообщение плохо структурировано, я впервые на этом сайте.
Ответ №2:
Вы не показываете полный код, поэтому я предполагаю, что year_
это член вашего класса.
В этом случае вам нужно обратиться к диапазону этого значения. struct tm
ожидает, что год будет равен количеству лет, прошедших с 1900 года. Если в вашем классе хранится количество лет с момента рождения Иисуса Христа, то вам придется удалить 1900, чтобы перейти от ожидания вашего участника к ожиданию tm
.
Например, вы будете хранить 2019
в своем year_
члене, но tm.tm_year
потребности 119
(таким 2019 - 1900
образом).
Поступая наоборот, вам придется отменить операцию, то есть добавить 1900.