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

问题描述 投票:0回答:2

我正在大学学习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; 
}
c++ tm time.h
2个回答
2
投票

struct tmtm_year是自1900年以来的一年。因此,从格里高利年转换为正确的tm_year值,你减去1900.要从tm_year转换为格里高利年,你增加1900。

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


1
投票

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

在这种情况下,您必须引用此值的范围。 struct tm预计一年是自1900年以来的年数。如果你的班级存储自耶稣基督诞生以来的年数,那么你将不得不删除1900,从你的成员期望到tm的期望。

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

相反,你必须反转操作,即添加1900。

© www.soinside.com 2019 - 2024. All rights reserved.