我无法理解为什么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帖子:Algorithm to add or subtract days from a date?,据说从一年中减去1900以获得正确的年份。我试过没有用。
然后我尝试添加当前年份和1150之间的差异,2015 - 1150 = 865
以获得正确的年份,但它给了我9800
而不是2015
。
然后我尝试添加一年,并发现
我很困惑 - 为什么会发生这种情况?如何在我的tm
结构中获得正确的年份?
答案 0 :(得分:6)
从documentation on tm
我们可以看到:
tm_year
是自1900年以来的年份,而不是当年的年数,即今年应为115岁。tm_mon
是自1月以来的月份(范围0-11),而不是月份的数量。所以你需要的是:
std::cout << 1900 + nowTm->tm_year
<< "/" << 1 + nowTm->tm_mon
<< "/" << nowTm->tm_mday;