我不明白为什么C++中的tm
结构会这样。让我更具体一点 - 如果我要得到当前时间,我可能会做这样的事情
time_t now = time(0);
tm *nowTm = gmtime(&now);
打印出日期后,我希望类似2015/06/13
(截至本文的当前日期)
cout << nowTm->tm_year << "/" << nowTm->tm_mon << "/" << nowTm->tm_mday;
但相反,我发现它打印出1150/5/13
。对于月份值,我只是简单地添加 1 以将其设置为正确的月份,但事实证明,使用年份很麻烦。
我遇到了这个SO帖子:从日期中添加或减去天数的算法?,它说从年份中减去1900以获得正确的年份。我试过无济于事。
然后我尝试添加当前年份和 1150 年之间的差异,2015 - 1150 = 865
得到正确的年份,但它给了我9800
而不是2015
。
然后我尝试了这一年的添加,发现
- 如果我+1到一年,它以10年的增量上升。
- 如果我对年份 +0.1,它将日期除以零并加 0.1(例如 1150 + 1 = 115.01)。
我很困惑 - 为什么会发生这种情况,我如何在我的tm
结构中获得正确的年份?
从tm
的文档中我们可以看到:
-
tm_year
是自1900年以来的年份,而不是当前的年份,即今年应该是115。 -
tm_mon
是自 1 月以来的月份(范围 0-11),而不是月份的数字。
所以你需要的是:
std::cout << 1900 + nowTm->tm_year
<< "/" << 1 + nowTm->tm_mon
<< "/" << nowTm->tm_mday;