Мой вопрос касается использования -1900 в tm_year

#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.