Преобразование Qt в QML: QDateTime -> date - PullRequest
2 голосов
/ 21 октября 2019

Итак, я отправляю QDateTime в QML, чтобы отобразить его и выполнить некоторые проверки (в идеале я хотел бы иметь возможность использовать все функции дат JavaScript, такие как getTime (), getMonth () ...) и японял, если я отправлю:

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

И тогда я читаю датув QML я получаю время в местном часовом поясе, а не в QDateTime ...

Ср 30 октября 06:15:00 2019 GMT-0400 (часовой пояс Нью-Йорка)

Есть ли способ сохранить часовой пояс в QML? Спасибо !!

Ответы [ 2 ]

0 голосов
/ 22 октября 2019

Следуя совету @ Pedro (я не знаю, как правильно вас пометить ...), я использовал moment.js , а также moment-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()
    }
}

, который дает следующий вывод:

enter image description here

0 голосов
/ 22 октября 2019

Класс javascript Date довольно ограничен. Он содержит внутреннее время / дату UTC и не позволяет изменять часовой пояс. Он также отображает по умолчанию преобразование в местный часовой пояс, что вы и наблюдали.

Существует javascript Библиотека моментов с поддержкой часовых поясов, чтобы устранить некоторые недостатки Date, но этоне полностью совместим с QML, IIRC.

В любом случае, лучший путь, по-видимому, - избегать объектов Date в QML, насколько это возможно, и использовать вместо этого что-то еще. Или альтернатива javascript, или, что еще лучше, ваш собственный класс C ++, инкапсулирующий QDateTime, предоставляемый как свойство контекста для QML, с любыми методами, которые вам нужны на стороне QML. Примерно так: пример ApplicationData из официальной документации Qt.

...