如果添加 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)

Qt 5.5 QDateTime::addSec 如果添加 12 小时(43200 秒),函数在一个月的最后一天返回错误值。

今天 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 的 bug 还是我做错了什么?

注意 QDateTime QDateTime::addSecs(int s) const 是一个常量函数,也就是说,它不会改变 this 对象。您需要评估返回的对象:

QDateTime dt = QDateTime::currentDateTimeUtc().addSecs(43200);
... output dt ...

也来自最新的文档(Qt 4.8 版的文档没有这个):

Note that the time will wrap if it passes midnight.

不管这意味着什么...

我写了一个小例子。一切都按预期进行。我认为这是环境问题。谢谢大家!