当前位置: 首页 > news >正文

QML中日期处理类

在 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.0Text {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.15Text {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.15Text {text: "当前时间: " + Qt.formatTime(new Date(), Qt.DefaultLocaleLongDate)Component.onCompleted: {console.log("短格式时间:", Qt.formatTime(new Date(), Qt.DefaultLocaleShortDate))}
}

这些是 QML 中处理日期和时间最常用的方法和类。根据具体需求,你可以选择最适合的方式来处理日期和时间数据。

http://www.xdnf.cn/news/42067.html

相关文章:

  • prim最小生成树+最大生成树【C++】板子题
  • 缓存 --- 缓存击穿, 缓存雪崩, 缓存穿透
  • 【连接池-55】MySQL数据库连接池:原理、实现与最佳实践
  • 缓存 --- Redis的三种高可用模式
  • 14【结构体 Struct】定义、实例化与方法:封装数据与行为
  • css3新特性第三章(文本属性)
  • Linux下加载可执行文件所在目录下的so的方法
  • 实操基于MCP驱动的 Agentic RAG:智能调度向量召回或者网络检索
  • 从零开始详细讲解 Boost.Asio
  • Vue3集成Element Plus完整指南:从安装到主题定制上
  • 【Elasticsearch入门到落地】11、RestClient初始化索引库
  • 深入理解Java包装类:自动装箱拆箱与缓存池机制
  • Ubuntu 22.04 更换 Nvidia 显卡后启动无法进入桌面问题的解决
  • [密码学实战]密码服务平台部署架构详解与学习路线
  • C语言 —— 铭纹织构未诞之镜 - 预处理详解
  • 03【变量观】`let`, `mut` 与 Shadowing:理解 Rust 的变量绑定哲学
  • 人机共跑,马拉松人型机器人同跑
  • [FPGA]设计一个DDS信号发生器
  • 2025第十六届蓝桥杯python B组满分题解(详细)
  • 如何在 Ubuntu 上安装 Apache CouchDB ?
  • 【C++ 程序设计】实战:C++ 实践练习题(31~40)
  • Vue3 + TypeScript,使用祖先传后代模式重构父传子模式
  • Redis日常学习(一)
  • 基于Django的AI客服租车分析系统
  • QT6 源(37):界面组件的总基类 QWidget 的源码阅读(下,c++ 代码部分)
  • TDengine 整体构架
  • AI Agent破局:智能化与生态系统标准化的颠覆性融合!
  • 分布自定义shell脚本(详写)附带全代码
  • BT1120 BT656驱动相关代码示例
  • DNS主从同步