日期 QML 类型
提供日期函数。更多...
导入语句 | import QtQml |
方法
- string fromLocaleDateString(locale, dateString, format)
- string fromLocaleString(locale, dateTimeString, format)
- string fromLocaleTimeString(locale, timeString, format)
- string timeZoneUpdated()
- string toLocaleDateString(locale, format)
- string toLocaleString(locale, format)
- string toLocaleTimeString(locale, format)
详细描述
QML 日期对象扩展了 JS 日期对象,增加了对本地化的函数。
接受 format
参数的函数可以接受 Locale.LongFormat, Locale.ShortFormat, Locale.NarrowFormat 枚举值,或一个指定格式的字符串。
支持的格式字符串的形式如 QDate::toString()、QTime::toString() 和 QDateTime::toString () 文档中所述。
如果日期无效,将返回一个空字符串。
格式枚举值
当您想要匹配本地偏好设置的格式时使用枚举值。
Locale.LongFormat | 较长格式 |
Locale.ShortFormat | 较短格式 |
Locale.NarrowFormat | 在此上下文中与 Locale.ShortFormat 相同 |
枚举表示的格式将取决于您的区域设置,并且还取决于枚举所用的方法。
例如,对于 en_US
区域设置,这些格式字符串被使用
函数 | Locale 枚举 | 格式字符串 |
---|---|---|
fromLocaleDateString, toLocaleDateString | Locale.LongFormat | dddd, MMMM d, yyyy |
fromLocaleDateString, toLocaleDateString | Locale.ShortFormat | M/d/yy |
fromLocaleTimeString, toLocaleTimeString | Locale.LongFormat | h:mm:ss AP t |
fromLocaleTimeString, toLocaleTimeString | Locale.ShortFormat | h:mm AP |
fromLocaleString, toLocaleString | Locale.LongFormat | dddd, MMMM d, yyyy h:mm:ss AP t |
fromLocaleString, toLocaleString | Locale.ShortFormat | M/d/yy h:mm AP |
进一步说明
使用区域感知函数执行日期或时间格式化可能会导致时间格式不正确,这是由于 Qt 和 JS 之间的规范不一致所致。ECMA-262 规定,历史上应将当前夏令时的规则扩展到过去的年份来解释日期,而 Qt 则使用历史数据(如果可用)来确定某个日期是否实行夏令时。因此,如果在夏令时期间,使用 JS 构造一个 Date 值并使用区域感知函数转换为字符串,与世界时指定的不同,或者相反,则可能得到错误的时间值。
存在不同的日期格式,对负年份有不同的理解。常见的人类语言没有年份 0。公元前 1 年之后是公元 1 年。这种理解体现在使用 ECMAScript 未标准化的某种格式打印或解析日期时。也就是说:toString(),toLocaleString(),toUTCString() 和类似方法。ECMAScript 标准化的一种格式是 ISO 8601。当你调用 toISOString() 时,你得到的就是这个格式。该格式包括年份 0,在其它格式中它是公元前 1 年。因此,使用 toISOString() 和 toString() 打印负日期时,你会得到不同的年份。
当使用 Date 构造函数或 set(UTC)FullYear() 设置年份时,使用的是 ISO 8601 规定的约定,0 是一个有效的年份。这意味着使用构造函数或 set(UTC)FullYear() 设置的负年份是以零为基础的,因此比 toString() 和其他类似方法打印出的年数少一年。解析任何一个 to*String() 方法输出的结果将与从它打印出的相同日期值。Date.parse() 将识别不同的格式及其对年份 0 的存在或不存在的规定。
请注意,这与其他 JavaScript 实现得到的结果不同,通常在其他所有字符串表示中都会将年份 0 视为有效。由于 ECMAScript 标准中将日期格式视为“实现相关”,这仍然是有效的。
另请参阅 Locale。
方法文档
string fromLocaleDateString(locale, dateString, format) |
使用 locale 和 format 将日期字符串 dateString 转换为日期对象。
如果没有指定 format,则使用 Locale.LongFormat。
如果没有指定 locale,则使用默认的区域设置。
以下示例显示了当前日期首先使用默认的区域设置和格式格式化为日期字符串,然后以相同的格式解析回。
string fromLocaleString(locale, dateTimeString, format) |
使用 locale 和 format 将日期时间字符串 dateTimeString 转换为日期对象。
如果没有指定 format,则使用 Locale.LongFormat。
如果没有指定 locale,则使用默认的区域设置。
以下示例显示了使用默认区域设置从一个日期时间字符串以某种格式解析日期时间。
string fromLocaleTimeString(locale, timeString, format) |
使用 locale 和 format 将时间字符串 timeString 转换为日期对象。
如果没有指定 format,则使用 Locale.LongFormat。
如果没有指定 locale,则使用默认的区域设置。
以下示例显示了首先使用默认区域设置和简短格式将当前时间格式化为时间字符串,然后以相同的方式解析回。
import QtQml 2.2 QtObject { property var locale: Qt.locale() property date currentTime: new Date() property string timeString Component.onCompleted: { timeString = currentTime.toLocaleTimeString(locale, Locale.ShortFormat); print(Date.fromLocaleTimeString(locale, timeString, Locale.ShortFormat)); } }
string timeZoneUpdated() |
通知 JS 引擎已更改系统时区,这对于正确操作日期时间数据是必要的。
JavaScript 以 UTC 时间存储 Date 对象;所有在本地时间和 Date 组件之间的访问都需要应用当前与 UTC 的偏差。如果由于时区更新而导致当前偏差发生变化,JS 引擎需要被告知以便重新计算偏差。
应在系统的时区更新后调用该函数。
例如,更改时区的应用程序在设置新的时区后调用 timeZoneUpdated()。
property string selectedTimeZone onSelectedTimeZoneChanged: { MyFunctions.setSystemTimeZone(selectedTimeZone) Date.timeZoneUpdated() }
字符串 toLocaleDateString(locale, format) |
将 Date 转换为适用于指定 locale 和 format 的日期字符串。
如果没有指定 format,则使用 Locale.LongFormat。
如果没有指定 locale,则使用默认的区域设置。
以下示例显示了为德语区域格式化的当前日期
import QtQuick 2.0 Text { text: "The date is: " + new Date().toLocaleDateString(Qt.locale("de_DE")) }
字符串 toLocaleString(locale, format) |
将 Date 转换为包含适用于指定 locale 和 format 的日期和时间的字符串。
如果没有指定 format,则使用 Locale.LongFormat。
如果没有指定 locale,则使用默认的区域设置。
以下示例显示了为德语区域格式化的当前日期和时间
import QtQuick 2.0 Text { text: "The date is: " + new Date().toLocaleString(Qt.locale("de_DE")) }
字符串 toLocaleTimeString(locale, format) |
将 Date 转换为适用于指定 locale 和 format 的时间的字符串。
如果没有指定 format,则使用 Locale.LongFormat。
如果没有指定 locale,则使用默认的区域设置。
以下示例显示了为德语区域格式化的当前时间
import QtQuick 2.0 Text { text: "The date is: " + new Date().toLocaleTimeString(Qt.locale("de_DE")) }
© 2024 Qt 公司有限公司。此处包含的文档贡献是为其各自的拥有者拥有的版权。提供的文档许可在自由软件基金会出版的 GNU 自由文档许可证版本 1.3 的条款下。Qt 及其相关标志是芬兰和/或在全世界其他国家的 Qt 公司的 商标。所有其他商标均为其各自拥有者的财产。