使用mingw-w64

时间:2018-04-20 13:06:41

标签: qt qml mingw cross-compiling

好的,这可能是一个非常具体的问题,但是在试图解决这个问题的几周内我都无法找到任何解决方案。

我有一个gitlab CI,用这个docker镜像编译windows可执行文件:https://github.com/mdimura/docker-mingw-qt5(Arch linux mingw-w64 with qt5)

在我的qml文件中有以下代码:

var testTime = new Date
console.info("normal Date: " + testTime.toString())
console.info("Date.getHours: " + testTime.getHours())
console.info("Date.getUTCHours: " + testTime.getUTCHours())
console.info("Date.getTimezoneOffset: " + testTime.getTimezoneOffset())

当我在本地机器上编译并运行它时,我得到了预期的输出,例如:

Info: normal Date: Fr Apr 20 14:55:23 2018 GMT+0200
Info: Date.getHours: 14
Info: Date.getUTCHours: 12
Info: Date.getTimezoneOffset: -120

当我得到mingw编译的可执行文件时,我得到以下输出:

Info: normal Date: Fr Apr 20 14:50:39 2018 GMT+0100
Info: Date.getHours: 13
Info: Date.getUTCHours: 12
Info: Date.getTimezoneOffset: -60

请注意,testTime.toString()给出的时间在两种情况下都是正确的(时区除外),但时区偏移量和testTime.getHours()给出的值减去一小时。

当我在Windows中设置时间设置以不使用夏令时时,两个可执行文件都会返回相同的正确值。

要检查这是否真的是qml或javascript的错误,我还添加了

qInfo() << "Qt time hour: " << QTime::currentTime().hour();

到我的main.cpp。这也会在所有情况下打印正确的时间。

我自己甚至在docker中编译了Qt包,仍然是同样的问题。有没有人知道这里发生了什么以及如何解决它?

2 个答案:

答案 0 :(得分:1)

如果有人稍后发现此问题,现在会将问题跟踪为issue on my PKGBUILDs repository

如果@Jay Tea提供更多信息,让我们看看是否可以找到问题的答案。

答案 1 :(得分:0)

在运行exe

之前设置TZ环境变量
export TZ=CET-1CEST

./yourExecutable.exe