【发布时间】:2016-11-22 08:13:18
【问题描述】:
我在 Qt 4.8 的 QDateTime 中发现了一个关于 fromMSecsSinceEpoch 的奇怪行为。以下代码不会产生我期望的结果:
assert(
QDateTime::fromMSecsSinceEpoch(
std::numeric_limits<qint64>::max()
).isValid() == true
);
assert(
QDateTime::fromMSecsSinceEpoch(
std::numeric_limits<qint64>::max()
).toMSecsSinceEpoch() == std::numeric_limits<qint64>::max()
);
虽然第一个断言为真,但第二个断言失败。 Qt 返回的结果是-210866773624193。
doc for QDateTime::fromMSecsSinceEpoch(qint64 msecs) 明确指出:
有可能的毫秒值位于 QDateTime 的有效范围之外,包括负值和正值。对于这些值,此函数的行为是未定义的。
但是,没有任何关于有效范围的明确声明。
我发现这个Qt bug report 是关于 Qt 5.5.1、5.6.0 和 5.7.0 Beta 中的时区问题。
我不确定这是否是一个类似的错误,或者我提供给QDateTime::fromMSecsSinceEpoch(qint64 msecs) 的值是否完全无效。
什么是(或更确切地说应该是)可以传递给此函数并产生正确行为的最大值?
【问题讨论】:
-
有效日期的范围是从公元前 4713 年 1 月 2 日到公元 1100 万年的某个时间
-
我读到了,但它没有给出确切的值
-
文档没有给出确切的值,它在
11'000'000 * 365 * 3600 * 1000附近的某个地方@ -
@Danh 不是
11'000'000 * 365 * 24 * 3600 * 1000? -
@wasthishelpful 是的,忘记了