在 QML 中处理日期和时间主要使用 JavaScript 的 Date 对象以及 Qt 提供的一些相关功能。以下是常用的日期处理方式:
1. JavaScript Date 对象
QML 可以直接使用 JavaScript 的 Date 对象:
qml
// 创建当前日期时间
var currentDate = new Date()
// 创建特定日期时间
var specificDate = new Date(2023, 11, 31) // 注意月份是0-11(11表示12月)
常用方法:
qml
// 获取日期各部分
var year = currentDate.getFullYear()
var month = currentDate.getMonth() + 1 // 需要+1因为月份从0开始
var day = currentDate.getDate()
var hours = currentDate.getHours()
var minutes = currentDate.getMinutes()
var seconds = currentDate.getSeconds()
var dayOfWeek = currentDate.getDay() // 0(周日)到6(周六)
// 设置日期各部分
currentDate.setFullYear(2024)
currentDate.setMonth(5) // 6月
currentDate.setDate(15)
// 格式化输出
var dateString = currentDate.toLocaleDateString()
var timeString = currentDate.toLocaleTimeString()
var dateTimeString = currentDate.toLocaleString()
toLocaleDateString()
功能:返回一个表示日期部分的字符串,使用操作系统的本地化约定。
语法:
javascript
dateObj.toLocaleDateString([locales[, options]])
示例:
qml
var date = new Date();
console.log(date.toLocaleDateString());
// 输出取决于系统区域设置,如中文环境可能输出 "2023/12/31" 或 "2023年12月31日"
参数:
locales (可选):指定语言代码的字符串或数组,如 "zh-CN", "en-US"
options (可选):配置对象,可设置日期显示格式
常用 options:
javascript
var options = {
weekday: 'long', // "short", "narrow"
year: 'numeric', // "2-digit"
month: 'long', // "short", "narrow", "numeric", "2-digit"
day: 'numeric' // "2-digit"
};
date.toLocaleDateString('zh-CN', options);
// 输出示例:"2023年12月31日星期日"
toLocaleString()
功能:返回一个表示完整日期和时间的字符串,使用操作系统的本地化约定。
语法:
javascript
dateObj.toLocaleString([locales[, options]])
示例:
qml
var date = new Date();
console.log(date.toLocaleString());
// 中文环境可能输出 "2023/12/31 下午3:45:30" 或 "2023年12月31日 15:45:30"
参数:同 toLocaleDateString(),但可以额外配置时间显示选项
常用 options:
javascript
var options = {
year: 'numeric',
month: 'numeric',
day: 'numeric',
hour: 'numeric',
minute: 'numeric',
second: 'numeric',
hour12: false // 使用24小时制
};
date.toLocaleString('zh-CN', options);
// 输出示例:"2023/12/31 15:45:30"
区别对比
方法 | 输出内容 | 典型输出示例 |
---|---|---|
toLocaleDateString() |
仅日期部分 | "2023/12/31" |
toLocaleString() |
日期和时间 | "2023/12/31 15:45:30" |
toLocaleTimeString() |
仅时间部分 | "15:45:30" |
2. Qt 提供的 QML 日期功能
Qt.formatDateTime()
qml
import QtQml 2.2
// 格式化日期时间
Text {
text: Qt.formatDateTime(new Date(), "yyyy-MM-dd hh:mm:ss")
}
Qt 提供了多种预定义格式:
-
Qt.DefaultLocaleShortDate
-
Qt.DefaultLocaleLongDate
-
Qt.ISODate 比如:yyyy-MM-dd hh:mm:ss
-
Qt.SystemLocaleShortDate
-
Qt.SystemLocaleLongDate
格式化选项:
-
"yyyy" - 4位数年份
-
"MM" - 2位数月份
-
"dd" - 2位数日期
-
"hh" - 2位数小时(12小时制)
-
"HH" - 2位数小时(24小时制)
-
"mm" - 2位数分钟
-
"ss" - 2位数秒数
-
"zzz" - 毫秒
-
"AP" - AM/PM指示器
import QtQuick 2.15
import QtQml 2.15Item {
Component.onCompleted: {
var now = new Date()console.log("Short date:", Qt.formatDateTime(now, Qt.DefaultLocaleShortDate)) console.log("Long date:", Qt.formatDateTime(now, Qt.DefaultLocaleLongDate)) console.log("ISO format:", Qt.formatDateTime(now, Qt.ISODate)) console.log("Date only:", Qt.formatDate(now, Qt.DefaultLocaleLongDate)) console.log("Time only:", Qt.formatTime(now, Qt.DefaultLocaleLongDate)) }
}
3. 日期计算
qml
// 增加天数
var tomorrow = new Date()
tomorrow.setDate(tomorrow.getDate() + 1)
// 计算日期差(毫秒数)
var date1 = new Date(2023, 0, 1)
var date2 = new Date(2023, 11, 31)
var diffMs = date2 - date1
var diffDays = diffMs / (1000 * 60 * 60 * 24)
4. 使用 Qt.locale() 本地化
qml
import QtQuick 2.0
Text {
text: Qt.locale().toString(new Date(), "yyyy年MM月dd日 ddd")
}
5. 时间戳处理
qml
// 获取当前时间戳(毫秒)
var timestamp = new Date().getTime()
// 时间戳转日期
var dateFromTimestamp = new Date(timestamp)
6. 将 Date 对象格式化为本地化的日期字符串(不包含时间部分)
string Qt.formatDate(date, format)
参数
-
date
:要格式化的 Date 对象 -
format
:格式化选项,可以是:-
Qt.DefaultLocaleShortDate
- 短格式(如 "2023/12/31") -
Qt.DefaultLocaleLongDate
- 长格式(如 "2023年12月31日") -
Qt.ISODate
- ISO 格式(如 "2023-12-31") -
自定义格式字符串
-
使用示例
qml
import QtQuick 2.15
import QtQml 2.15
Text {
text: "今天是: " + Qt.formatDate(new Date(), Qt.DefaultLocaleLongDate)
Component.onCompleted: {
console.log("短格式日期:", Qt.formatDate(new Date(), Qt.DefaultLocaleShortDate))
console.log("ISO格式日期:", Qt.formatDate(new Date(), Qt.ISODate))
}
}
7. 将 Date 对象格式化为本地化的时间字符串(不包含日期部分)
string Qt.formatTime(date, format)
参数
-
date
:要格式化的 Date 对象 -
format
:格式化选项,可以是:-
Qt.DefaultLocaleShortDate
- 短格式(如 "15:45") -
Qt.DefaultLocaleLongDate
- 长格式(如 "下午3:45:30") -
自定义格式字符串
-
使用示例
qml
import QtQuick 2.15
import QtQml 2.15
Text {
text: "当前时间: " + Qt.formatTime(new Date(), Qt.DefaultLocaleLongDate)
Component.onCompleted: {
console.log("短格式时间:", Qt.formatTime(new Date(), Qt.DefaultLocaleShortDate))
}
}
这些是 QML 中处理日期和时间最常用的方法和类。根据具体需求,你可以选择最适合的方式来处理日期和时间数据。