Qt获取程序编译时间

example1

    QString buildTime = QStringLiteral("%1 %2").arg(__DATE__).arg(__TIME__);
    ui->label->setText(buildTime);

    QDateTime dateTime = QLocale("en_US").toDateTime(buildTime.simplified(), "MMM d yyyy hh:mm:ss");
    ui->label_2->setText(dateTime.toString("yyyy MM dd hh:mm:ss"));

example2

在Qt发布程序时,有时想将版本号信息加上编译时间添加到程序右下角。

  • 利用__DATE__与__TIME__编译宏特性为Qt程序添加编译日期时间。
  • __DATE__和__TIME__是C/C++语言中的预定义宏,它们分别用于获取当前源文件被编译的日期和时间。
  • __DATE__宏返回一个字符串常量,表示当前源文件被编译的日期。日期的格式为 “MMM DD YYYY”,其中MMM表示月份的缩写,DD表示日期,YYYY表示年份的四位数。例如,“Sep 05 2023” 表示2023年9月5日。
  • __TIME__宏返回一个字符串常量,表示当前源文件被编译的时间。时间的格式为 “HH:MM:SS”,其中HH表示小时,MM表示分钟,SS表示秒钟。例如,“01:30:04” 表示01时30分04秒。
    这两个宏在编写代码时可以用于输出编译时的日期和时间信息。通常用于日志记录、版本信息等场景中,有助于追踪代码的更新和维护。注意,它们提供的是编译时的日期和时间,并不是运行时的实际日期和时间。
    注意:***QDateTime::currentDateTime()***是获取当前时间的,不是获取编译时间的。
    以下是具体实现
static const QString buildTime()
{
    QString dateTime;
    dateTime.clear();
    dateTime += __DATE__;
    dateTime += __TIME__;
    //注意" "是两个空格,用于日期为单数时需要转成“空格+0”
    dateTime.replace("  "," 0");

    QDateTime buildDateTime = QLocale(QLocale::English).toDateTime(dateTime,"MMM dd yyyyhh:mm:ss");
    QString strMonth, strDay, strHour;
    int nMonth = buildDateTime.date().month();
    if(nMonth < 10)
    {
        strMonth = QString("0%1").arg(nMonth);
    }else{
        strMonth = QString("%1").arg(nMonth);
    }
    int nDay = buildDateTime.date().day();
    if(nDay < 10)
    {
        strDay = QString("0%1").arg(nDay);
    }else{
        strDay = QString("%1").arg(nDay);
    }
    int nHour = buildDateTime.time().hour();
    if(nHour < 10)
    {
        strHour = QString("0%1").arg(nHour);
    }else{
        strHour = QString("%1").arg(nHour);
    }

    QString strBuildTime;
    strBuildTime = QString("%1-%2-%3 %4:%5:%6").arg(buildDateTime.date().year()).arg(strMonth).arg(strDay).arg(strHour).arg(buildDateTime.time().minute()).arg(buildDateTime.time().second());
    return strBuildTime;
}

example3

文件时间
对应用程序迭代过程中,由于版本管理不规范或迭代过于频繁,经常需要通过查看其修改时间来确认软件版本。可以在程序的版本号中内置软件编译时间,自动地区分软件版本。

软件的编译时间,就是应用程序文件的最后一次修改时间。因此通过获取应用程序文件的最后一次修改时间来获取软件编译时间。

获取文件的最后修改时间可以使用QFileInfo类中的lastModified()函数,示例代码如下:

#include <QCoreApplication>
#include <QFileInfo>
#include <QDebug>
 
int main(int argc, char *argv[])
{
    QCoreApplication app(argc, argv);
 
    QString appPath = QCoreApplication::applicationFilePath();
    QFileInfo fileInfo(appPath);
 
    if (fileInfo.exists()) {
        qDebug() << "Last modified time:" << fileInfo.lastModified().toString();
    } else {
        qDebug() << "Application does not exist!";
    }
 
    return app.exec();
}

自己敲代码如下

MainWindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();
public:
    QString buildTime();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H

MainWindow.cpp

#include "MainWindow.h"
#include "ui_MainWindow.h"

#include <QLocale>
#include <QDebug>
#include <QFileInfo>
#include <QDebug>
#include <QDateTime>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    QString appPath = QCoreApplication::applicationFilePath();
        QFileInfo fileInfo(appPath);

        if (fileInfo.exists()) {
            qDebug() << "Last modified time:" << fileInfo.lastModified().toString();
            QString FileBuildTime = fileInfo.birthTime().toString();
           // ui->label->setText(FileBuildTime);
        } else {
            qDebug() << "Application does not exist!";
        }
    //原文链接:https://blog.youkuaiyun.com/zw_ggr_2017/article/details/130484771

//    QDate date = QLocale::c().toDate(__DATE__, "MMM dd yyyy");
//    QString buildTime = date.toString("yyyy MM dd") +" " + __TIME__;
    //QString buildTime = QStringLiteral("%1 %2").arg(__DATE__).arg(__TIME__);
    //QString buildTime = buildTime();//QStringLiteral("%1").arg(__DATE__);
    //ui->label->setText(buildTime);

    //QDateTime dateTime = QLocale("en_US").toDateTime(buildTime.simplified(), "MMM d yyyy hh:mm:ss");
    //ui->label_2->setText(dateTime.toString("yyyy MM dd hh:mm:ss"));

    QString StbuildTime = buildTime();
    ui->label->setText(StbuildTime);
}

MainWindow::~MainWindow()
{
    delete ui;
}

QString MainWindow::buildTime()
{
    QString dateTime;
    dateTime.clear();
    dateTime += __DATE__;
    dateTime += __TIME__;
    //注意" "是两个空格,用于日期为单数时需要转成“空格+0”
    dateTime.replace("  "," 0");

    QDateTime buildDateTime = QLocale(QLocale::English).toDateTime(dateTime,"MMM dd yyyyhh:mm:ss");
    QString strMonth, strDay, strHour;
    int nMonth = buildDateTime.date().month();
    if(nMonth < 10)
    {
        strMonth = QString("0%1").arg(nMonth);
    }else{
        strMonth = QString("%1").arg(nMonth);
    }
    int nDay = buildDateTime.date().day();
    if(nDay < 10)
    {
        strDay = QString("0%1").arg(nDay);
    }else{
        strDay = QString("%1").arg(nDay);
    }
    int nHour = buildDateTime.time().hour();
    if(nHour < 10)
    {
        strHour = QString("0%1").arg(nHour);
    }else{
        strHour = QString("%1").arg(nHour);
    }

    QString strBuildTime  ;//= QString("%1%2%3").arg(buildDateTime.date().year()).arg(strMonth).arg(strDay).arg(strHour));
    //strBuildTime = QString("%1-%2-%3 %4:%5:%6").arg(buildDateTime.date().year()).arg(strMonth).arg(strDay).arg(strHour).arg(buildDateTime.time().minute()).arg(buildDateTime.time().second());
    strBuildTime = QString("%1%2%3").arg(buildDateTime.date().year()).arg(strMonth).arg(strDay);

    return strBuildTime;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

静思心远

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值