我在 Windows 上使用 Qt 5.7.1,64 位版本。在我的应用程序中,我管理一些具有不同时区的日期时间。
我最近看到了一些奇怪的行为,这里有一个简单的代码来测试它:
QDateTime ParisDate(QDate(2016, 1, 20), QTime(2, 0, 0), QTimeZone("Europe/Paris"));
QDateTime PerthDate(QDate(2016, 1, 20), QTime(9, 0, 0), QTimeZone("Australia/Perth"));
QDateTime ParisConvertedToPerth = ParisDate.toTimeZone(QTimeZone("Australia/Perth"));
qDebug() << " ParisDate = " << ParisDate;
qDebug() << " PerthDate = " << PerthDate;
qDebug() << " delta Paris => Perth = " << ParisDate.secsTo(PerthDate) / 3600;
qDebug() << " delta ParisConvertedToPerth => Perth = " << ParisConvertedToPerth.secsTo(PerthDate) / 3600;
qDebug() << " ParisDate to UTC = " << ParisDate.toUTC();
qDebug() << " PerthDate to UTC = " << PerthDate.toUTC();
qDebug() << " ParisConvertedToPerth to UTC = " << ParisConvertedToPerth.toUTC();
这会产生以下输出:
ParisDate = QDateTime(2016-01-20 02:00:00.000 Paris, Madrid Qt::TimeSpec(TimeZone) Europe/Paris)
PerthDate = QDateTime(2016-01-20 09:00:00.000 Australie (Ouest) Qt::TimeSpec(TimeZone) Australia/Perth)
delta Paris => Perth = 8
delta ParisConvertedToPerth => Perth = 0
ParisDate to UTC = QDateTime(2016-01-20 01:00:00.000 UTC Qt::TimeSpec(UTC))
PerthDate to UTC = QDateTime(2016-01-20 09:00:00.000 UTC Qt::TimeSpec(UTC))
ParisConvertedToPerth to UTC = QDateTime(2016-01-20 09:00:00.000 UTC Qt::TimeSpec(UTC))
我不明白,因为我认为 2 个变量“ParisDate”和“PerthDate”应该指的是同一个时间点,用不同的时区表示。
所以我相信“delta Paris => Perth”应该是0小时。
我不敢相信 Qt5 代码被破坏了,所以我在这里错过了什么?