首页 > 其他分享 >【Qt 专栏】DateTime日期时间组件

【Qt 专栏】DateTime日期时间组件

时间:2024-04-26 22:15:07浏览次数:16  
标签:返回 const Qt int DateTime QDate 日期 组件 QDateTime

本文转载自:https://cloud.tencent.com.cn/developer/article/2371799

本章将重点介绍QDateTime日期与时间组件的常用方法及灵活运用。

 

在Qt中,日期和时间的处理通常使用 QDateTime 类。QDateTime 是一个用于表示日期和时间的类,而与之相关的组件还包括 QDateQTime以及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 进行构造、获取、比较、格式化和运算等操作的灵活性。你可以根据应用的需求使用这些方法,方便地处理日期和时间相关的操作。

首先我们来绘制一个简单的日期时间页面,这里需要注意页面中的日期组件DateEditTimeEdit其长得很像之前文章中所提到的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;
}

 

 

标签:返回,const,Qt,int,DateTime,QDate,日期,组件,QDateTime
From: https://www.cnblogs.com/FBsharl/p/18160953

相关文章

  • qt 使用hid开源库 ,搜索所有的hid设备
    效果:  cmakeLists.txt:cmake_minimum_required(VERSION3.5)project(TF_Hid_UseANDTestVERSION0.1LANGUAGESCXX)set(CMAKE_AUTOUICON)set(CMAKE_AUTOMOCON)set(CMAKE_AUTORCCON)set(CMAKE_CXX_STANDARD17)set(CMAKE_CXX_STANDARD_REQUIREDON)file(G......
  • 【网络通信】一文读懂网络应用层常见协议的区别(HTTP 、HTTPS、MQTT、FTP、RTSP、RTMP)
        应用层协议是计算机网络中至关重要的组成部分,它们定义了应用程序如何与网络进行交互,实现数据的传输、接收和处理。本文将重点介绍几种常见的应用层协议:HTTP、HTTPS、MQTT、FTP、RTSP和RTMP,分析它们的特点、区别、工作原理以及应用场景。一、HTTP协议      ......
  • React 《组件间通信》
    React组件通信概念:组件通信就是组件之间的数据传递,根据组件嵌套关系的不同,有不同的通信手段和方法A-B父子通信B-C兄弟通信A-E跨层通信父子通信-父传子基础实现实现步骤父组件传递数据-在子组件标签上绑定属性子组件接收数据-子组件通过props参数接收数据......
  • 基于Vue 2的前端如何引入评论区组件Artalk
    1.Artalk介绍Artalk是一个可以集成的评论区组件,可以直接添加到前端页面,而不用自己开发评论区来保存评论,支持点赞/踩,还支持评论区之间的相互回复,以及一些表情包的使用,同时也有丰富的后台管理页面【如以下展示】[========]2.Artalk服务器部署2.1环境条件Vue2Artalk2.8......
  • Qt 中 qint64 转 汉字写法
    如9223372036854775807转为九百二十二兆三千三百七十二亿零三百六十八万五千四百七十七万五千八百零七注意:此过程并未检查qint64类型的的上限!!使用的是中国传统的乘方数位,即“一百个一百为一万,一万个一万是一亿,一亿个一亿是一兆”,即可有如下数位:个,十,百,千,万,十万,百万,千万,亿,十......
  • 【Qt 专栏】文件对话框 文件的弹窗选择-QFileDialog
    前言:通过按钮实现文件弹窗选择以及关联的操作效果图就和平时用电脑弹出的选文件对话框一样原型图技能:头文件:#include<QFileDialog>//头文件QStringfilename=QFileDialog::getOpenFileName(this,"弹窗标题","E://","Images(*.png*.jpg)");弹出对话框选择文件 实......
  • 【Qt专栏】C++删除空指针
    简短不看版:最佳实践if(pMyClass) //这里,pMyClass是指向某个类的指针..{deletepMyClass;pMyClass=NULL; //这句不能少}  完全可以....可能有不少人对Delete删除空指针的用法不屑一顾,但在实际运用当中, 却有不少人会犯类似的错误,最典......
  • 封装两个简单的Jquery组件
    Jquery给我们提供了很大的方便,我们把他看成是一个公共库,以致在这个公共库上延伸出了很多Jquery插件;在项目过程中,有些插件总是不那么令人满意;主要说两个项目用途:1、 遮罩层,跟一般的遮罩层不一样,我需要实现的是对某一个元素进行局部遮罩;2、 冒泡提示,网上有很多,我需要的只是一......
  • 【Qt 专栏】QString::arg()函数
    原文链接:https://blog.csdn.net/Gnar_w/article/details/134966919作者:Gnar_w  (CSDN) 一、说明在QT的QString中,arg方法类似于C中的printf中使用的格式输出符(仅有些许类似)。二、使用有以下方式:使用arg(str1,str2,str3)这种方法进行替换。使用arg(str1).arg(str2).arg(......
  • qt封装dll并静态调用其它接口
    开发套件为QT5.9+MinGW编译器首先创建dll,第一步创建一个打开pro文件,因为我们创建的是app,需要的是dll,修改app->lib,注意不是dll其次,静态调用自己的底层库在工程中加入头文件,在pro添加dll的路径(注意这里静态调用没有用到lib文件)添加示例接口将编译的dll放入测试环境......