- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在 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对于 QDateTime::fromMSecsSinceEpoch(qint64 msecs)
明确指出:
There are possible values for msecs that lie outside the valid range of QDateTime, both negative and positive. The behavior of this function is undefined for those values.
但是,没有任何关于有效范围的明确声明。
我找到了这个 Qt bug report关于 Qt 5.5.1、5.6.0 和 5.7.0 Beta 中的时区问题。我不确定这是否是一个类似的错误,或者我提供给 QDateTime::fromMSecsSinceEpoch(qint64 msecs)
的值是否完全无效。
可以传递给此函数并产生正确行为的最大值是什么(或者应该是)?
最佳答案
std::numeric_limits<qint64>::max() ms
产量 9 223 372 036 854 775 807 ms
, 或 9 223 372 036 854 775 s
, 或 2 562 047 788 015 hours
, 或 106 751 991 167 days
, 或 292 471 208 years
: 这远远超出了 QDateTime
有效范围内的 1100 万年.
来自 the doc ,有效日期从公元前 4713 年 1 月 2 日开始,一直持续到 QDate::toJulianDay()
溢出:2^31 days
(有符号整数的最大值)产量接近 5 000 000 years
.那是 185 542 587 187 200 000 ms
(从公元前 4713 年 1 月 2 日开始,不是来自大纪元),“小”多于 2^57
.
编辑:
在评论中讨论后,您检查了 Qt4.8 源并发现 fromMSecsSinceEpoch()
使用 QDate(1970, 1, 1).addDays(ddays)
在内部,天数是直接从 msecs
计算的参数。
自 ddays
类型为 int
在这里,对于大于 2^31
的值,这会溢出.
关于c++ - QDateTime::fromMSecsSinceEpoch 的有效范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40736763/
我最近写了一个秒表,注意到 QDateTime::secsTo 有一些奇怪的行为。我不确定这是错误还是功能(或者也许我只是做了一个蹩脚的实现;-)。 我的秒表代码可以简化为这个最小的示例以产生有问题的
如何为测试目的创建固定时间? 我在想: static QDateTime startTime = "2001-02-03 14:55:02" 正确的语法是什么? 最佳答案 来自 Qt 文档:http:
我需要我的 Qt 应用程序同时在所有国际计算机上运行一个任务,而不考虑时区。该应用程序以 UTC 格式从 Web 下载所需的日期和时间。我必须用哪个时区初始化 QDateTime?世界标准时间?还是取
我现在,这个问题听起来很愚蠢,但我无法让它发挥作用。最坏的例子: QString time_format = "yyyy-MM-dd HH:mm:ss"; QDateTime a = QDateTi
我希望 QDateTime 覆盖 - 运算符并返回一个 QTimeSpan 表示两个 QDateTimes 之间的差异(就像 .NET 的 TimeSpan)。由于这在 Qt 中不存在,我决定实现它。
我正在尝试使用 QDateTime 获取时区日期,我期望的是 2018-03-19T00:00:00-02:00 但我得到的是 2019-10 -27T19:56:09-2147483648 QDat
我正在从字符串中插入时间 QDateTime time =QDateTime::fromString("Wed Mar 26 22:37:40 2019 GMT-08"); qDebug()<
我将 Sqlite3 与 Qt 一起使用,无论如何要将 DateTime 表单保存在我使用文本类型的数据库中,请从我的数据库中查看: data 所以 INSERT 和 SELECT 非常有效,但我如何
我需要将 QDateTime 传递给接受 FILETIME 的 Win32 函数. 这是 MSDN 对 FILETIME 的定义: Contains a 64-bit value representi
QDateTime date = QDateTime::currentDateTime(); QString week = QDate::shortDayName(date.date().dayOfW
我尝试将 1970 年之后的秒数读入 QDateTime。即:startT = 1.390309552938E9 因此我使用: QDateTime time = QDateTime::fromMSec
我正在尝试将日期字符串转换为以下格式: Thu Sep 18 02:03:02 +0000 2008 到 QDateTime,使用 QDateTime::FromString() 如果我删除 +000
According to the documentation隐式共享主要是为了提高性能(避免复制和自动更改时复制)。 为什么它是为类 QDateTime 实现的,显然应该只是少量字节?我想说的是,用于
我正在寻找来自 qt 的日期时间,以将字符串作为 isodate 但带有时区返回给我。我有时会在网上查看我的问题,但没有找到解决方案 我刚刚得到这个: this->ui.dateEnd->dateTi
我在 Qt 4.8 的 QDateTime 中发现了一个关于 fromMSecsSinceEpoch 的奇怪行为。以下代码不会产生我期望的结果: assert( QDateTime::from
如何转换 QDateTime进入 QJSValue ?反向转换很容易:有 QJSValue::isDate 和 QJSValue::toDateTime。 最佳答案 根据Qt的帮助,QJSEngine
我在比较 qt qdatetime 时遇到了麻烦 if(now.secsTo(nearest)>0) 总是显示相同的数字。 QDateTime now = QDateTime::currentDate
我必须通过 QDateTime::fromString 方法将 QString 转换为 QDateTime。我有 QString 对象,其中包含“Wed, 13 Jun 2018 12:52”。但是当
我有一个 .txt 文件,其中包含如下所示的行: 2011-03-03 03.33.13.222 4 2000 信息业务......等 blabla 2011-03-03 03.33.13.333 4
我的 mysql 表中有时间戳列。我想读取日期值并将其写入 QJsonObject。 jsonObject["date"] = query.value(6).toDateTime().toString
我是一名优秀的程序员,十分优秀!