Qt to QML conversion: QDateTime -> date
所以我要向QML发送一个QDateTime以便显示它并进行一些检查(理想情况下,我希望能够使用所有的JavaScript日期函数,如getTime(),getMonth()...),我意识到如果我 发送:
QDateTime(2019-10-30 11:15:00.000 CET Qt::TimeZone Europe/Amsterdam )
然后我在QML上读取日期,我得到的时间是本地时区,而不是QDateTime上的时间。
Wed Oct 30 06:15:00 2019 GMT-0400 (NY timezone)
有什么办法可以将时区保留在QML一侧?
谢谢!!
遵循@Pedro的建议(我不知道如何正确标记您的身份...),我使用了moment.js以及moment-timezone.js,因此可以将任何日期引用到所需的时区。对于任何有兴趣的人,这就是我的做法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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() +"\ " + getDateWithTimeZone(customDate,"Europe/Paris").toString() } } |
提供以下输出:
javascript Date类非常有限。它具有内部UTC时间/日期,并且不允许更改时区。默认情况下,它还会显示转换为您所观察到的本地时区。
有一个具有时区支持的javascript Moment库,可以缓解一些Date缺点,但它与QML,IIRC并不完全兼容。
无论如何,最好的方法似乎是尽可能避免QML中的Date对象,而改用其他方法。 javascript的替代方案,或者甚至更好的方法是,您自己的封装QDateTime的C ++类作为QML的上下文属性公开,并提供您在QML方面需要的任何方法。像这样的示例Qt官方文档中的ApplicationData。