首页 > 解决方案 > Qt 到 QML 的转换:QDateTime -> 日期

问题描述

所以我向 QML 发送一个 QDateTime 以显示它并进行一些检查(理想情况下,我希望能够使用所有 javascript 日期函数,如 getTime()、getMonth()...),我意识到如果我发送:

QDateTime(2019-10-30 11:15:00.000 CET Qt::TimeZone Europe/Amsterdam )

然后我阅读了 QML 上的日期,我得到了当地时区的时间,而不是 QDateTime 上的时间......

2019 年 10 月 30 日星期三 06:15:00 GMT-0400(纽约时区)

有什么办法可以将时区保留在 QML 端?谢谢!!

标签: qttimezoneqmlqdatetime

解决方案


按照@Pedro的建议(我不知道如何正确标记您...),我使用了 moment.jsmoment-timezone.js,因此我可以将任何日期引用到我想要的时区。对于任何有兴趣的人,我就是这样做的:

import QtQuick 2.9
import "./moment.js" as Moment
import "./moment-timezone-with-data.js" as MomentTimezone

Item {
    anchors.fill: parent
    property date customDate: new Date(); // local timezone is "America/New_York"

    function getDateWithTimeZone(date, timeZone) {
        var momentDate = moment(new Date(date));
        var momentDateTz = momentDate.tz(timeZone);
        return momentDateTz;
    }

    Text {
        anchors.centerIn: parent
        text: customDate.toLocaleString() + "\n"
              + getDateWithTimeZone(customDate, "Europe/Paris").toString()
    }
}

给出以下输出:

在此处输入图像描述


推荐阅读