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

Cod*_*ice 2 c++ datetime date

我无法理解为什么tmC++中的结构以这种方式运行.让我更具体一点 - 如果我要获得当前时间,我可能会做这样的事情

time_t now = time(0);
tm *nowTm = gmtime(&now);
Run Code Online (Sandbox Code Playgroud)

在打印出日期后,我期待类似的事情2015/06/13(截至本文的当前日期)

cout << nowTm->tm_year << "/" << nowTm->tm_mon << "/" << nowTm->tm_mday;
Run Code Online (Sandbox Code Playgroud)

但相反,我发现它打印出来了1150/5/13.对于月份值,我只需添加1即可将其设置为正确的月份,但玩弄这一年证明很麻烦.

我遇到过这个SO帖子:从日期中添加或减去天数的算法?据说从年份中减去1900以获得正确的年份.我试过没有用.

然后我尝试添加当前年份和1150之间的差异,2015 - 1150 = 865以获得正确的一年,但它给了我9800而不是2015.

然后,我尝试添加一年,并发现

  1. 如果我今年+1,它会以10年为增量上升.
  2. 如果I +0.1到年份,则将日期除以零并将其加0.1(例如1150 + 1 = 115.01).

我很困惑 - 为什么会发生这种情况,如何在我的tm结构中获得正确的年份?

eml*_*lai 6

文档中tm我们可以看到:

  • tm_year 是自1900年以来的年份,而不是当年的数字,即今年应该是115年.
  • tm_mon 是1月以来的几个月(范围0-11),而不是月份的数量.

所以你需要的是:

std::cout << 1900 + nowTm->tm_year
   << "/" << 1 + nowTm->tm_mon
   << "/" << nowTm->tm_mday;
Run Code Online (Sandbox Code Playgroud)