- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我不知道哪里出了问题。
QTimeZone zone1(QTimeZone("Europe/Moscow"));
QTimeZone zone2(QTimeZone("Asia/Yekaterinburg"));
QDateTime test = QDateTime(QDate(2016, 11, 11), QTime(15,00), zone1);
qDebug() << test;//QDateTime(2016-11-11 15:00:00.000 MSK Qt::TimeSpec(TimeZone) Europe/Moscow)
test = test.addSecs(5*60);
qDebug() << test;//QDateTime(2016-11-11 15:05:00.000 MSK Qt::TimeSpec(TimeZone) Europe/Moscow)
这在 Europe/Moscow(+3) 上工作正常,但是当我将时区更改为 Asia/Yekaterinburg(+5) 时,它工作起来很奇怪
QTimeZone zone2(QTimeZone("Asia/Yekaterinburg"));
QDateTime test = QDateTime(QDate(2016, 11, 11), QTime(15,00), zone2);
qDebug() << test;//QDateTime(2016-11-11 15:00:00.000 Qt::TimeSpec(TimeZone) Asia/Yekaterinburg)
test = test.addSecs(5*60);
qDebug() << test;//QDateTime(2016-11-11 10:05:00.000 Qt::TimeSpec(TimeZone) Asia/Yekaterinburg)
最佳答案
奇怪的是,我使用 Qt 5.6.0 和这个调整后的示例重现了它。
QDateTime test1 = QDateTime(QDate(2016, 11, 11), QTime(15, 00), QTimeZone("Europe/Moscow"));
QDateTime test2 = QDateTime(QDate(2016, 11, 11), QTime(15, 00), QTimeZone("Asia/Yekaterinburg"));
QDateTime test3 = QDateTime(QDate(2016, 11, 11), QTime(15, 00), QTimeZone("Europe/Berlin"));
qDebug() << test1;
qDebug() << test2;
qDebug() << test3;
qDebug() << test1.addSecs(5*60);
qDebug() << test2.addSecs(5*60);
qDebug() << test3.addSecs(5*60);
输出:
QDateTime(2016-11-11 15:00:00.000 RTZ 2 Qt::TimeSpec(TimeZone) Europe/Moscow)
QDateTime(2016-11-11 15:00:00.000 RTZ 4 Qt::TimeSpec(TimeZone) Asia/Yekaterinburg)
QDateTime(2016-11-11 15:00:00.000 MEZ Qt::TimeSpec(TimeZone) Europe/Berlin)
QDateTime(2016-11-11 18:05:00.000 RTZ 2 Qt::TimeSpec(TimeZone) Europe/Moscow)
QDateTime(2016-11-11 20:05:00.000 RTZ 4 Qt::TimeSpec(TimeZone) Asia/Yekaterinburg)
QDateTime(2016-11-11 15:05:00.000 MEZ Qt::TimeSpec(TimeZone) Europe/Berlin)
QDateTime(2016-11-11 18:05:00.000 RTZ 2 Qt::TimeSpec(TimeZone) Europe/Moscow)
请注意,我添加了另一个时区,这是我的本地时区。您可能注意到这是有效的时区 (Europe/Berlin
)。
接下来要做的是偏移量分析。您会看到以下偏移量:
欧洲/莫斯科
:+3h亚洲/叶卡捷琳堡
:+5h看一些time zone map人们可能会注意到两个区域之间的偏移正好是 2h。那么 +3h 从何而来?
不用说,我又进行了一次测试。
QDateTime dt = QDateTime(QDate(2016, 11, 11), QTime(15, 00), QTimeZone("UTC"));
qDebug() << dt;
qDebug() << dt.addSecs(5*60);
qDebug() << dt.addSecs(5*60).toTimeZone(QTimeZone("Asia/Yekaterinburg"));
输出:
QDateTime(2016-11-11 15:00:00.000 UTC Qt::TimeSpec(TimeZone) UTC)
QDateTime(2016-11-11 15:05:00.000 UTC Qt::TimeSpec(TimeZone) UTC)
QDateTime(2016-11-11 20:05:00.000 RTZ 4 Qt::TimeSpec(TimeZone) Asia/Yekaterinburg)
我们开始吧:Qt 似乎没有在计算之前将时区转换为 UTC,而是将其用作 UTC,这导致具有相应偏移量的后移。
但是等等...
QDateTime dt = QDateTime(QDate(2016, 11, 11), QTime(15, 00), Qt::UTC);
qDebug() << dt.toLocalTime();
qDebug() << dt.toTimeZone(QTimeZone("Asia/Yekaterinburg"));
qDebug() << dt.toUTC();
输出:
QDateTime(2016-11-11 16:00:00.000 MEZ Qt::TimeSpec(LocalTime))
QDateTime(2016-11-11 20:00:00.000 RTZ 4 Qt::TimeSpec(TimeZone) Asia/Yekaterinburg)
QDateTime(2016-11-11 15:00:00.000 UTC Qt::TimeSpec(UTC))
现在看起来,如果构造函数获得一个时区,它会假定它是 UTC,而不是提供的时区。如果将其省略,Qt 会占用本地时间,这是显而易见的。
因为它没有记录在哪里 used至 be这对我来说似乎是一个错误。
长话短说,怎么办?
如果适用,尝试提供本地时间或 UTC 时间,将它们转换为 UTC,用它们计算,然后格式化为所需的输出。
QDateTime dt = QDateTime(QDate(2016, 11, 11), QTime(10, 00), Qt::UTC);
qDebug() << dt.toTimeZone(QTimeZone("Asia/Yekaterinburg"));
qDebug() << dt.addSecs(5*60).toTimeZone(QTimeZone("Asia/Yekaterinburg"));
输出:
QDateTime(2016-11-11 15:00:00.000 RTZ 4 Qt::TimeSpec(TimeZone) Asia/Yekaterinburg)
QDateTime(2016-11-11 15:05:00.000 RTZ 4 Qt::TimeSpec(TimeZone) Asia/Yekaterinburg)
关于c++ - Qt。时区和 addSecs 的 QDateTime 不可预测的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40617470/
我最近写了一个秒表,注意到 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
我是一名优秀的程序员,十分优秀!