关于QDateTime的addMSecs的参数范围问题

怀疑QDateTime.addMSecs添加的qint64数字不能过大。

现在我们假设时间从1/1/0001的00:00:00开始,加上一个毫秒数,然后计算加完之后的时间,s打印出时间。

这个毫秒数设为整2025年。

代码如下:

按照逻辑思维,应该打印时间的是

转换后的日期时间为 2025-01-01 00:00::00.000

但是,实际为

当我们把毫秒数减小点,减为31536000000(一年的时间)

这时候打印

这就是对的。

经过多次试验,毫秒数在1年之内都正常。

//流道加热 for (const auto& var : m_deviceWatchTemperatures) { auto watchName = var.first; qDebug() << "updateTempWatchCustomPlot watchName:" << watchName; if (m_deviceWatchTemperatures.find(watchName) == m_deviceWatchTemperatures.end()) { continue; } auto plotName = watchName; if (Configure::getInstance()->isWafer()) { if (plotName == qApp->translate("MH_Heat", MH_Heat::s_glueBucket.toStdString().c_str())) { plotName = qApp->translate("MH_Heat", MH_Heat::s_workArea.toStdString().c_str()); } if (plotName == qApp->translate("MH_Heat", MH_Heat::s_loadingWaitArea.toStdString().c_str())) { plotName = qApp->translate("MH_Heat", MH_Heat::s_keepWarm.toStdString().c_str()); } } auto plotInfo = getPlotInfo(plotName); auto curve = plotInfo.m_curve; if (!curve) { continue; } std::vector<int> dataSizes; QDateTime firstDateTime; for (const auto& var : m_deviceWatchTemperatures) { dataSizes.emplace_back(static_cast<int>(var.second.size())); if (var.second.empty()) { continue; } const auto& dataFirstDateTime = var.second.front().m_curTemperatureUpdateDateTime; if (!firstDateTime.isValid()) { firstDateTime = dataFirstDateTime; continue; } if (dataFirstDateTime < firstDateTime) { firstDateTime = dataFirstDateTime; } } if (!firstDateTime.isValid()) { return; } double timeToAdd{}; //更新图右侧范围 auto getScaleVal = []() { if (Configure::getInstance()->isWafer()) { return 1.3; } else if (Configure::getInstance()->isUnderfill()) { return 1.6; } return 1.5; }; timeToAdd = (getScaleVal() - 1.) * m_pollingTemeratureDataInterval * s_maxTemperatureDataShowCount; if (timeToAdd < 0.) { timeToAdd = 0.; } auto iterMaxElement = std::max_element(dataSizes.begin(), dataSizes.end()); int maxX{}; if (iterMaxElement != dataSizes.end()) { maxX = *iterMaxElement; } auto runnerHeatData = m_deviceWatchTemperatures[watchName]; Auxiliary::executeInThread(m_processPlotThread.get(), [=] { QVector<QPointF> points; points.reserve(static_cast<int>(runnerHeatData.size())); for (const auto& oneData : runnerHeatData) { points.append({ static_cast<qreal>(firstDateTime.msecsTo(oneData.m_curTemperatureUpdateDateTime)), oneData.m_curTemperature }); } auto rightDateTime = firstDateTime.addMSecs(s_maxTemperatureDataShowCount * m_pollingTemeratureDataInterval); auto rightVal = firstDateTime.msecsTo(rightDateTime.addMSecs(timeToAdd)); QTimer::singleShot(20, this, [=] { m_plot->setAxisScaleRange(Axis::xBottom, 0, rightVal, 10000); curve->setPoints(points); m_plot->replot(); }); }); } }
最新发布
04-03
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值