不明白tm_struct (C++) 计算 - 是否存在某种偏移量?
Don't understand tm_struct (C++) calculations - is there an offset of some kind?
我不明白为什么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;
相关文章:
- 这个极客对极客的trie实现是否存在内存泄漏问题
- 有了gcc,是否可以链接库,但前提是它存在
- gcc和clang在表达式是否为常量求值的问题上存在分歧
- 如何检查QList中是否存在值
- 根据某个函数是否存在启用模板
- 地图计数确实很重要,或者只是检查是否存在
- C++中是否存在 std::conditional 的懒惰等价物?
- 无论如何,我可以确定构造函数是否存在吗?
- COM :是否可以查看是否存在对我的某个 COM 对象的进程外引用?我可以释放它吗?
- 堆分配的对象是否存在永不为空的唯一所有者?
- 扩展类中的可选 vir 函数,测试它在运行时是否存在
- 模板化检查是否存在带有参数列表的类成员函数?
- 是否存在包含负号的isdigit函数(过载)
- 如何巧妙地编写两个函数——一个用于检查是否存在解决方案,另一个用于获取所有解决方案
- 检查编译时是否存在静态函数
- 向量是否存在行主要形式?
- 检查 TinyXML 中的元素是否存在
- 检测是否存在具有 C++17 的类成员
- 虚拟继承中是否存在多重继承?
- 我遇到了这个代码片段,不明白. 它递归检查 C++ 字符串中是否存在大写字符