【发布时间】:2015-08-29 03:46:09
【问题描述】:
我不明白为什么 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。
然后我尝试添加这一年,发现
- 如果我对年份 +1,它会以 10 年为增量递增。
- 如果 I +0.1 到年份,它会将日期除以零并加上 0.1(例如 1150 + 1 = 115.01)。
我很困惑 - 为什么会发生这种情况以及如何在我的 tm 结构中获得正确的年份?
【问题讨论】:
-
您可能想在月份使用“tm_mday”,而不是“tm_mon”
-
@TrevorHickey,
tm_mday是一个月中的哪一天。 -
您确定它打印的是
1150而不是115?因为115是我期望的正确值。 -
对我来说没问题。见ideone.com/F01Sb9。
-
@CodeApprentice,请提供一个 MCVE 来输出您声明的内容。