不明白tm_struct (C++) 计算 - 是否存在某种偏移量?

Don't understand tm_struct (C++) calculations - is there an offset of some kind?

本文关键字:存在 是否 偏移量 计算 tm 明白 struct C++      更新时间:2023-10-16

我不明白为什么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. 如果我+1到一年,它以10年的增量上升。
  2. 如果我对年份 +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;