【问题标题】:Daylight savings not applied in qml in windows exe compiled with mingw-w64使用 mingw-w64 编译的 windows exe 中的 qml 中未应用夏令时
【发布时间】:2018-04-20 13:06:40
【问题描述】:

好的,这可能是一个非常具体的问题,但我在断断续续地尝试解决这个问题的几个星期里都找不到任何解决方案。

我有一个 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包,仍然是同样的问题。有谁知道这里发生了什么以及我该如何解决?

【问题讨论】:

  • 也许你需要一个特殊的文件来保存你的 mingw docker 镜像来告诉它你的时区是什么......
  • @mike510a docker 镜像不需要知道我的时区是什么,因为可执行文件应该在所有时区工作。而且时区定义和数据应该在 c 库中,不是吗?
  • 不一定。在 Linux 上,时区是通过使用环境变量 TZ='America/New_York'; export TZ 定义的,因此您很可能只需以这种方式定义时区,或者通过修改 docker 映像的 /etc/ 文件夹中的文件(如果有)一个
  • @mike510a 不幸的是,这似乎没有帮助。我在 docker 映像中创建了指向我的时区的符号链接 /etc/localtime 并重建。错误仍然存​​在。
  • 您是否尝试设置 TZ='' 环境变量?

标签: qt qml mingw cross-compiling


【解决方案1】:

以防有人稍后发现 - 现在将问题跟踪为 issue on my PKGBUILDs repository

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

【讨论】:

    【解决方案2】:

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

    export TZ=CET-1CEST
    
    ./yourExecutable.exe
    

    【讨论】:

    • 不幸的是仍然没有运气。我在 Windows 上使用了set TZ=CET-1CEST; .\MyExe.exe,但它仍然给我和以前一样的行为。
    • 好吧,关键是要有一个可以在 Windows 上运行的可执行文件。我看不出这对我有什么帮助。在构建之前在 docker 中定义这样的 TZ 似乎也没有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 1970-01-01
    • 2018-01-03
    • 2015-04-25
    • 1970-01-01
    • 2013-10-03
    • 1970-01-01
    相关资源
    最近更新 更多