Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt 在使用mingw-w64编译的windows exe中的qml中未应用夏令时_Qt_Qml_Mingw_Cross Compiling - Fatal编程技术网

Qt 在使用mingw-w64编译的windows exe中的qml中未应用夏令时

Qt 在使用mingw-w64编译的windows exe中的qml中未应用夏令时,qt,qml,mingw,cross-compiling,Qt,Qml,Mingw,Cross Compiling,好的,这可能是一个非常具体的问题,但我在几个星期断断续续地试图解决这个问题的过程中没有找到任何解决方案 我有一个gitlab CI,它用这个docker映像编译windows可执行文件:(带qt5的Arch linux mingw-w64) 在我的qml文件中,有以下代码: var testTime = new Date console.info("normal Date: " + testTime.toString()) console.info("Date.getHours: " + tes

好的,这可能是一个非常具体的问题,但我在几个星期断断续续地试图解决这个问题的过程中没有找到任何解决方案

我有一个gitlab CI,它用这个docker映像编译windows可执行文件:(带qt5的Arch linux mingw-w64)

在我的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();

qInfo()在运行exe之前设置TZ环境变量

export TZ=CET-1CEST

./yourExecutable.exe

万一以后有人发现了这个问题,这个问题现在作为一个问题被跟踪


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

也许你需要一个特殊的文件来为你的mingw docker映像告诉它你的时区是什么…@mike510a docker映像不需要知道我的时区是什么,因为可执行文件应该在所有时区都能工作。时区定义和数据应该在c库中,不是吗?不一定。在Linux上,时区是通过使用环境变量
TZ='America/New_York'定义的;导出TZ
,这样您所要做的就是以这种方式定义时区,或者修改docker映像的
/etc/
文件夹中的文件(如果有)one@mike510a不幸的是,这似乎没有帮助。我在docker映像中创建了指向我的时区的符号链接/etc/localtime并重新生成。错误仍然存在。是否尝试设置TZ=''环境变量?不幸的是,仍然没有成功。我使用了
set TZ=CET-1test\MyExe.exe
在我的windows上运行,但它仍然提供与以前相同的行为。不过,关键是要在windows上有一个可运行的可执行文件。我看不出这对我有什么帮助。在构建之前在docker中这样定义TZ似乎也没有帮助。