我的问题是关于在tm_year中使用-1900

时间:2019-03-17 20:50:24

标签: c++ tm time.h

我正在大学里学习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 个答案:

答案 0 :(得分:2)

struct tm中,package.json是自1900年以来的年份。因此,要从公历年份转换为正确的tm_year值,请减去1900。要从tm_year进行转换到公历年,则增加1900。

这两个操作必须彼此相反-一个加法和一个减法-否则,如果您多次前后转换,最终将导致越来越多地更改该值。

答案 1 :(得分:1)

您没有显示完整的代码,所以我猜测year_是您班上的成员。

在这种情况下,您必须参考此值的范围。 struct tm期望年份是自1900年以来的年数。 如果您的班级存储了耶稣基督出生以来的年数,那么您就必须删除1900,才能从成员的期望中获得tm的期望。

例如,您将2019存储在year_成员中,而tm.tm_year需要119(因此2019 - 1900)。

相反,您必须撤消该操作,即添加1900。