如果添加 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 函数在一个月的最后一天返回错误值的主要内容,如果未能解决你的问题,请参考以下文章

将秒转换为天、小时、分钟、秒格式 (C++)

如果您输入了日期和一些要添加的 x 秒,如何找出闰年的数量

有没有办法在 UIDatePicker 中删除小时并添加秒?

UVA 10339

如何给cookie设置有效时间为12小时

模块小记