如果添加 12 小时(43200 秒),Qt 5.5 QDateTime::addSec 函数在一个月的最后一天返回错误值
Posted
技术标签:
【中文标题】如果添加 12 小时(43200 秒),Qt 5.5 QDateTime::addSec 函数在一个月的最后一天返回错误值【英文标题】:Qt 5.5 QDateTime::addSec function has returned a wrong value in a last day of a month if add 12 hours (43200 secs) 【发布时间】:2015-11-30 10:48:23 【问题描述】:如果添加 12 小时(43200 秒),Qt 5.5 QDateTime::addSec 函数在一个月的最后一天返回错误的值。
我在 2015 年 11 月 30 日今天得到以下结果:
1.
QDateTime::currentDateTimeUtc().addSecs(43200);
输出(运行时间 - 2015-11-30T10:05:50):
date - Mon Nov 30 10:05:50 2015 GMT
2.
QDateTime::currentDateTimeUtc().addSecs(21600);
输出(运行时间 - 2015-11-30T10:08:12):
date - Mon Nov 30 16:08:12 2015 GMT
3.
QDateTime::currentDateTimeUtc().addDays(1).addSecs(-43200);
输出(运行时间 - 2015-11-30T10:11:08):
date - Tue Dec 1 10:11:08 2015 GMT
我想增加 12 小时并得到 2015-11-30T22:11:08 如何避免这种情况?是 Qt 中的错误还是我做错了什么?
【问题讨论】:
我在 Ubuntu 14.04 上使用 Qt 5.5.1,对我来说它工作正常。 它基于 Qt5.5.0,基于 windows。 您能否将您的示例转换为使用 QDateTime(2015, 11, 30, ...) 而不是 currentDateTime(),以便明天仍然可以复制它? 我写了一个小例子。一切都按预期工作。我认为是环境问题。谢谢! 【参考方案1】:注意QDateTime QDateTime::addSecs(int s) const
是一个常量函数,也就是说,它不会改变this
对象。您需要评估返回的对象:
QDateTime dt = QDateTime::currentDateTimeUtc().addSecs(43200);
... output dt ...
也来自最新的文档(4.8 版的 Qt 文档没有这个):
请注意,如果过了午夜,时间将会结束。
不管这意味着什么……
【讨论】:
我也这么认为,但我认为 OP 正在直接打印输出,因为案例 3 确实给出了正确的输出。【参考方案2】:我写了一个小例子。一切都按预期工作。我认为是环境问题。谢谢大家!
【讨论】:
以上是关于如果添加 12 小时(43200 秒),Qt 5.5 QDateTime::addSec 函数在一个月的最后一天返回错误值的主要内容,如果未能解决你的问题,请参考以下文章