在Qt中,QDateEdit是用于选择日期的微调框,QTimeEdit是用于选择小时和分钟的微调框
QDateTimeEdit则是基于QDateEdit和QTimeEdit的组合控件,能够同时显示日期和时间,并允许用户以交互方式编辑日期
常用属性
属性 | 说明 |
dateTime | 时间日期的值,形如2000/1/1 0:00 |
date | 单纯日期的值,形如2000/1/1 |
time | 单纯时间的值,形如0:00 |
displayFormat | 时间日期格式,形如yyyy/M/d H:mm 2024/07/31 09:35
|
minimumDateTime | 最小时间日期 |
maximumDateTime | 最大时间日期 |
timeSpec |
|
核心信号
信号 | 说明 |
dateChanged(QDate) | 日期改变时触发 |
timeChanged(QTime) | 时间改变时触发 |
dateTimeChanged(QDateTime) | 时间日期任意一个改变都会触发 |
QDateTime
QDateTime是处理日期和时间的类,提供了丰富的功能和方法来管理和操作日期时间数据,支持高精度和灵活的操作
常用API
- 获取日期/时间
//静态成员函数 static QDateTime currentDateTime();//返回当前本地日期时间 static QDateTime currentDateTimeUTC();//返回当前UTC日期时间 //成员函数 QDate date() const;//返回日期部分 QTime time() const;//返回时间部分
-
设置日期/时间
void setDate(const QDate &date);//设置日期部分 void setTime(const QTime &time);//设置时间部分 void setDateTime(const QDateTime &dateTime);//设置日期和时间
-
格式化和解析
//将日期时间对象格式化为指定格式的字符串 QString toString(Qt::DateFormat format = Qt::TextDate); //将指定格式的日期时间字符串,转化为QDateTime static QDateTime fromString(const QString &string, Qt::DateFormat format = Qt::TextDate);
-
日期/时间运算
QDateTime addDays(qint64 days);//增加指定天数后的日期时间 QDateTime addSecs(qint64 secons);//增加指定秒数后的日期时间 QDateTime addMonths(int months);//增加指定月数后的日期时间 QDateTime addYears(int years);//增加指定年数后的日期时间 //计算两个日期时间之间的差值 qint64 daysTo(const QDateTime &other);//计算相差多少天,计算时只看日期不看时间 qint64 secsTo(const QDateTime &other);//计算相差多少秒
-
时区操作
QDateTime toLocalTime();//将UTC时间转换成本地时间返回 QDateTime toUTC();//将本地时间按UTC时间返回
示例:计算两个日期之间相差的时间
#include "widget.h"
#include "ui_widget.h"
#include <QCalendarWidget>
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
//设置显示格式
ui->dateTimeEdit_past->setDisplayFormat("yyyy-M-d h:mm:ss");
ui->dateTimeEdit_cur->setDisplayFormat("yyyy-M-d h:mm:ss");
}
Widget::~Widget()
{
delete ui;
}
void Widget::on_pushButton_clicked()
{
//获取两个日期时间
QDateTime pastTime = ui->dateTimeEdit_past->dateTime();
QDateTime curTime = ui->dateTimeEdit_cur->dateTime();
int seconds = pastTime.secsTo(curTime);
//计算相差的天数和小时数
int hours = (seconds / 3600) % 24;
int days = (seconds / 3600 / 24);
ui->label->setText(QString("已经爱你") + QString::number(days) + "天零"
+ QString::number(hours) + "小时");
}