C++ Qt开发:DateTime日期时间组件
Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍QDateTime日期与时间组件的常用方法及灵活运用。
在Qt中,日期和时间的处理通常使用 QDateTime 类。QDateTime 是一个用于表示日期和时间的类,而与之相关的组件还包括 QDate 、 QTime以及QDateTime,以下是对这些组件的详细概述。
QDate
QDate 类用于表示日期,包括年、月和日。
主要特点如下:
- 构造函数:
QDate(int year, int month, int day),用于创建一个QDate对象。 - 获取日期信息: 提供了获取年、月、日等日期信息的方法,例如
year()、month()、day()。 - 比较日期: 可以进行日期的比较,判断日期的先后顺序。
- 日期格式: 可以以不同的格式输出日期的字符串表示。
以下是 QDate 类的一些常用方法的说明和概述,以表格形式列出:
| 方法 | 描述 |
|---|---|
QDate() |
默认构造函数,创建一个表示当前日期的 QDate 对象。 |
QDate(int year, int month, int day) |
构造函数,创建一个指定年、月、日的 QDate 对象。 |
isValid() |
检查日期是否有效。 |
year() const |
返回年份。 |
month() const |
返回月份。 |
day() const |
返回日期。 |
toString(const QString &format) const |
返回日期的字符串表示,可以通过指定格式进行格式化。 |
currentDate() |
静态函数,返回当前系统日期的 QDate 对象。 |
daysInMonth() |
返回当前月份的天数。 |
daysInYear() |
返回当前年份的天数。 |
addDays(int days) |
返回增加指定天数后的 QDate 对象。 |
addMonths(int months) |
返回增加指定月数后的 QDate 对象。 |
addYears(int years) |
返回增加指定年数后的 QDate 对象。 |
operator+(int days) |
重载加法运算符,返回增加指定天数后的 QDate 对象。 |
operator-(int days) |
重载减法运算符,返回减去指定天数后的 QDate 对象。 |
daysTo(const QDate &date) const |
返回到指定日期的天数差。 |
monthsTo(const QDate &date) const |
返回到指定日期的月数差。 |
yearsTo(const QDate &date) const |
返回到指定日期的年数差。 |
isValid() |
检查日期是否有效。 |
这些方法提供了对 QDate 进行构造、获取、比较、格式化和运算等操作的灵活性。你可以根据应用的需求使用这些方法,方便地处理日期相关的操作。
QTime
QTime 类用于表示时间,包括小时、分钟、秒和毫秒。
主要特点如下:
- 构造函数:
QTime(int h, int m, int s, int ms = 0),用于创建一个QTime对象。 - 获取时间信息: 提供了获取小时、分钟、秒、毫秒等时间信息的方法,例如
hour()、minute()、second()。 - 比较时间: 可以进行时间的比较,判断时间的先后顺序。
- 时间格式: 可以以不同的格式输出时间的字符串表示。
以下是 QTime 类的一些常用方法的说明和概述,以表格形式列出:
| 方法 | 描述 |
|---|---|
QTime() |
默认构造函数,创建一个表示当前时间的 QTime 对象。 |
QTime(int h, int m, int s, int ms = 0) |
构造函数,创建一个指定小时、分钟、秒和毫秒的 QTime 对象。 |
isValid() |
检查时间是否有效。 |
hour() const |
返回小时部分。 |
minute() const |
返回分钟部分。 |
second() const |
返回秒部分。 |
msec() const |
返回毫秒部分。 |
toString(const QString &format) const |
返回时间的字符串表示,可以通过指定格式进行格式化。 |
currentTime() |
静态函数,返回当前系统时间的 QTime 对象。 |
addSecs(int secs) |
返回增加指定秒数后的 QTime 对象。 |
addMSecs(int msecs) |
返回增加指定毫秒数后的 QTime 对象。 |
operator+(int secs) |
重载加法运算符,返回增加指定秒数后的 QTime 对象。 |
operator-(int secs) |
重载减法运算符,返回减去指定秒数后的 QTime 对象。 |
secsTo(const QTime &t) const |
返回到指定时间的秒数差。 |
msecsTo(const QTime &t) const |
返回到指定时间的毫秒数差。 |
isValid() |
检查时间是否有效。 |
这些方法提供了对 QTime 进行构造、获取、比较、格式化和运算等操作的灵活性。你可以根据应用的需求使用这些方法,方便地处理时间相关的操作。
QDateTime
QDateTime 类结合了日期和时间,用于表示日期和时间的组合。
主要特点如下:
- 构造函数:
QDateTime(QDate date, QTime time),用于创建一个QDateTime对象。 - 获取日期和时间信息: 提供了获取年、月、日、小时、分钟、秒等信息的方法。
- 比较日期和时间: 可以进行
QDateTime对象的比较,判断日期和时间的先后顺序。 - 日期时间格式: 可以以不同的格式输出日期和时间的字符串表示。
- 时区支持:
QDateTime提供了对时区的支持,可以进行时区的设置和获取。
以下是 QDateTime 类的一些常用方法的说明和概述,以表格形式列出:
| 方法 | 描述 |
|---|---|
QDateTime() |
默认构造函数,创建一个表示当前日期和时间的 QDateTime 对象。 |
QDateTime(const QDate &date, const QTime &time) |
构造函数,创建一个由指定日期和时间组成的 QDateTime 对象。 |
isValid() |
检查日期和时间是否有效。 |
date() const |
返回日期部分。 |
time() const |
返回时间部分。 |
toString(const QString &format) const |
返回日期和时间的字符串表示,可以通过指定格式进行格式化。 |
currentDateTime() |
静态函数,返回当前系统日期和时间的 QDateTime 对象。 |
addDays(int days) |
返回增加指定天数后的 QDateTime 对象。 |
addMonths(int months) |
返回增加指定月数后的 QDateTime 对象。 |
addYears(int years) |
返回增加指定年数后的 QDateTime 对象。 |
addSecs(int secs) |
返回增加指定秒数后的 QDateTime 对象。 |
addMSecs(qint64 msecs) |
返回增加指定毫秒数后的 QDateTime 对象。 |
operator+(int secs) |
重载加法运算符,返回增加指定秒数后的 QDateTime 对象。 |
operator-(int secs) |
重载减法运算符,返回减去指定秒数后的 QDateTime 对象。 |
operator-(const QDateTime &dateTime) |
重载减法运算符,返回两个日期时间对象之间的时间差。 |
secsTo(const QDateTime &dateTime) const |
返回到指定日期时间的秒数差。 |
msecsTo(const QDateTime &dateTime) const |
返回到指定日期时间的毫秒数差。 |
daysTo(const QDateTime &dateTime) const |
返回到指定日期时间的天数差。 |
monthsTo(const QDateTime &dateTime) const |
返回到指定日期时间的月数差。 |
yearsTo(const QDateTime &dateTime) const |
返回到指定日期时间的年数差。 |
toTime_t() |
将日期时间对象转换为自 1970-01-01 00:00:00 UTC 以来的秒数。 |
fromTime_t(uint seconds) |
从自 1970-01-01 00:00:00 UTC 以来的秒数创建日期时间对象。 |
这些方法提供了对 QDateTime 进行构造、获取、比较、格式化和运算等操作的灵活性。你可以根据应用的需求使用这些方法,方便地处理日期和时间相关的操作。
首先我们来绘制一个简单的日期时间页面,这里需要注意页面中的日期组件DateEdit和TimeEdit其长得很像之前文章中所提到的SpinBox但其两者是不同的,读者应注意区分两者的不同指出,如下图所示;

首先如何获取日期时间,点击获取日期按钮时我们可以直接通过调用QDate::currentDate()则可获取到当前日期,同理点击获取时间按钮则直接调用QTime::currentTime()实现,左侧三个按钮的功能实现如下所示;
#include <QDate>
#include <QTime>
#include <QDateTime>
#include <iostream>
// 设置日期组件
void MainWindow::on_pushButton_getdate_clicked()
{
QDate curDate = QDate::currentDate();
int year = curDate.year();
int month = curDate.month();
int day = curDate.day();
ui->dateEdit->setDate(curDate);
std::cout << year << "/" << month << "/" << day << std::endl;
}
// 设置时间组件
void MainWindow::on_pushButton_gettime_clicked()
{
QTime curTime = QTime::currentTime();
int hour = curTime.hour();
int minute = curTime.minute();
int second = curTime.second();
ui->timeEdit->setTime(curTime);
std::cout << hour << "/" << minute << "/" << second << std::endl;
}
// 设置日期时间
void MainWindow::on_pushButton_getdatetime_clicked()
{
QDateTime curDateTime = QDateTime::currentDateTime();
int yearDT = curDateTime.date().year();
int monthDT = curDateTime.date().month();
int dayDT = curDateTime.date().day();
int hourDT = curDateTime.time().hour();
int minuteDT = curDateTime.time().minute();
int secondDT = curDateTime.time().second();
ui->dateTimeEdit->setDateTime(curDateTime);
std::cout << yearDT << "/" << monthDT << "/" << dayDT << std::endl;
std::cout << hourDT << "/" << minuteDT << "/" << secondDT << std::endl;
}
接着我们来实现时间日期组件与字符串之间的转换,当我们需要将字符串转换为日期时可以通过QDateTime::fromString并根据字符串规律对其进行格式化,同理通过使用curDateTime.toString即可实现日期时间转换为字符串。
// 将字符串转为日期
void MainWindow::on_pushButton_stod_clicked()
{
// 获取字符串
QString datestr = ui->lineEdit->text();
datestr = datestr.trimmed();
// 是否为空
if(!datestr.isEmpty())
{
// 格式化
QDateTime datetime = QDateTime::fromString(datestr,"yyyy-MM-dd hh:mm:ss");
// 设置到日期组件上
ui->dateTimeEdit_convert->setDateTime(datetime);
}
}
// 将日期转换为字符串
void MainWindow::on_pushButton_dtos_clicked()
{
QDateTime curDateTime = QDateTime::currentDateTime();
ui->dateTimeEdit_convert->setDateTime(curDateTime);
ui->lineEdit->setText(curDateTime.toString("yyyy-MM-dd hh:mm:ss"));
}
程序运行效果如下图所示,读者可通过点击不同的按钮来实现不同的功能;

为了能更加充分的认识时间日期组件,此处我们将通过LCD Number组件实现一个简单的钟表,QLCDNumber 是 Qt 中用于显示数字的小部件,通常用于显示整数或浮点数值。它提供了一个类似于数字显示器或仪表板的外观,可以用于显示各种数值信息。
显示器的使用非常容易,只需要setDigitCount()设置显示长度,并通过setDecMode()设置为十进制输出模式,最后调用display()就可以将一个整数刷新到屏幕上,完整代码如下所示;
#include <QTime>
#include <QTimer>
// 全局定时器变量指针
QTimer *my_timer;
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
// 声明定时器
my_timer = new QTimer(this);
// 绑定一个匿名函数
connect(my_timer,&QTimer::timeout,[=]{
// 获取时间
QTime curTime = QTime::currentTime();
int hour = curTime.hour();
int minute = curTime.minute();
int second = curTime.second();
// 设置LCD屏幕2位显示
ui->lcdNumber_hour->setDigitCount(2);
ui->lcdNumber_minute->setDigitCount(2);
ui->lcdNumber_hour->setDigitCount(2);
// 使用十进制
ui->lcdNumber_hour->setDecMode();
ui->lcdNumber_minute->setDecMode();
ui->lcdNumber_second->setDecMode();
// 刷新参数
ui->lcdNumber_hour->display(hour);
ui->lcdNumber_minute->display(minute);
ui->lcdNumber_second->display(second);
});
// 启动定时器1000毫秒执行依次
my_timer->start(1000);
}
MainWindow::~MainWindow()
{
delete ui;
}
读者可自行编译运行这段程序,则会看到每隔一秒计时器都会向前递增以为,如下图所示;

C++ Qt开发:DateTime日期时间组件的更多相关文章
- IOS开发—UIDatePicker 日期/时间选取器(滚轮)
UIDatePicker 是一个控制器类,封装了 UIPickerView,但是他是UIControl的子类,专门用于接受日期.时间和持续时长的输入.日期选取器的各列会按照指定的风格进行自动配置,这样 ...
- WP开发笔记——日期时间DateTime.Now函数
//2008年4月24日 System.DateTime.Now.ToString("D"); //2008-4-24 System.DateTime.Now.ToString(& ...
- 日期时间组件 - layui.laydate
全部参数 一.核心方法:laydate(options); options是一个对象,它包含了以下key: '默认值' { elem: '#id', //需显示日期的元素选择器 event: 'cli ...
- 27flutter日期 时间组件flutter_cupertino_date_picker的使用
pubspec.yaml flutter_cupertino_date_picker: ^ DatePicker.dart import 'package:date_format/date_forma ...
- 如何在Rails6内通过Webpacker使用JavaScript; flatpicker日期时间组件选择器
如何在Rails6内通过Webpacker使用JavaScript; Rails6默认不再使用asset pipeline,改用Webpacker. 文件结构变化: 配置文件: webpacker.y ...
- String.Format,DateTime日期时间格式化
DateTime dt = DateTime.Now;//2010年10月4日 17点05分 string str = ""; //st ...
- flutter DateTime日期&时间选择器
import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'dart:async'; class ...
- 【转载】Python日期时间模块datetime详解与Python 日期时间的比较,计算实例代码
本文转载自脚本之家,源网址为:https://www.jb51.net/article/147429.htm 一.Python中日期时间模块datetime介绍 (一).datetime模块中包含如下 ...
- python 日期、时间处理,各种日期时间格式/字符串之间的相互转换究竟是怎样的?
模块函数说明 ''' date 日期对象,常用的属性有year,month,day time 时间对象,常用的属性有hour,minute,second,毫秒 datetime 日期时间对象,常用的属 ...
- SQLite 日期 & 时间
具体看http://www.runoob.com/sqlite/sqlite-date-time.html 不过实例介绍的不够详细,以下详细举例: SQLite包含了如下时间/日期函数:datetim ...
随机推荐
- Midjourney的一些学习心得:如何高效的图生图
注意本文没有什么长篇大论,全部是自己的学习心得. 心得体会:如何图生图 今天在一篇midjourney看到好图应该怎么抄. 相信经常会看到好图也想要的,但是要么抄不出感觉,要么抄过来把水印也抄了,这一 ...
- Codeforces 1462E2 Close Tuples (hard version)
题意 给一个长度为\(n\)的数组,取\(m\)个数字,其中最大值最小值相差不大于\(k\),问这种方式有多少种,答案\(\mod 10^9+7\). 分析 通过简单版本大概了解了这题要枚举最小值来判 ...
- 如何平息WPS for linux启动后,笔记本风扇的怒吼
create:2022-09-06 20:02:45 WPS启动后,点击菜单栏右上角[未同步]按钮,不登录,直接关掉.几秒后,笔记本风扇嗷嗷叫.桌面conky显示wpscloudsvr进程CPU占用8 ...
- SQL Server用户的设置与授权
SQL Server用户的设置与授权 SSMS 登陆方式有两种,一是直接使用Windows身份验证,二是SQL Server身份验证.使用SQL Server用户设置与授权不仅可以将不同的数据库开放给 ...
- 为什么 Python 代码在函数中运行得更快?
哈喽大家好,我是咸鱼 当谈到编程效率和性能优化时,Python 常常被调侃为"慢如蜗牛" 有趣的是,Python 代码在函数中运行往往比在全局范围内运行要快得多 小伙伴们可能会有这 ...
- 深入解析HTTP请求:了解请求特征与报文格式的关键秘密
引言 在上一章节中,我们详细探讨了超文本传输协议(HTTP)的基本概念,并且延伸讨论了HTTP请求响应的基本流程.在这个过程中,浏览器首先通过DNS解析来确定要访问的服务器的IP地址,然后与服务器建立 ...
- Ds100p -「数据结构百题」31~40
31.P2163 [SHOI2007]园丁的烦恼] 很久很久以前,在遥远的大陆上有一个美丽的国家.统治着这个美丽国家的国王是一个园艺爱好者,在他的皇家花园里种植着各种奇花异草. 有一天国王漫步在花园里 ...
- Spring Boot RestController接口如何输出到终端
背景 公司项目的批处理微服务,一般是在晚上固定时段通过定时任务执行,但为了预防执行失败,我们定义了对应的应急接口,必要时可以通过运维在终端中进行curl操作.然而,部分任务耗时较长,curl命令执行后 ...
- golang Context应用举例
Context本质 golang标准库里Context实际上是一个接口(即一种编程规范. 一种约定). type Context interface { Deadline() (deadline ti ...
- pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simpleLooking in indexes: https://pypi.tuna.t ...