在RedHat 7.2中获取构建日期和时间

时间:2016-10-12 16:44:01

标签: c++ qt redhat

我试图将构建日期和时间添加到我的Qt 5.6项目文件中,到目前为止我添加了:

    win32 {
    DEFINES += BUILDTIME=\\\"$$system('echo %time%')\\\"
    DEFINES += BUILDDATE=\\\"$$system('echo %date%')\\\"
    } else {
    DEFINES += BUILDTIME=\\\"$$system(date '+%H:%M')\\\"
    DEFINES += BUILDDATE=\\\"$$system(date '+%d/%m/%y')\\\"
    }

在源代码中:

    QString strBuildDT = QString::fromLocal8Bit(BUILDDATE)
                + ", " + QString::fromLocal8Bit(BUILDTIME);

以此为例,我会得到:

    12/10/16, 17:39

我想重新格式化要显示的日期:

    12 October 2016, 17:39

从研究中看,正确使用的日期格式如下:

    DEFINES += BUILDDATE=\\\"$$system(date '+%d %B %Y')\\\"

但是这不起作用,并且为BUILDDATE返回并清空字符串。

2 个答案:

答案 0 :(得分:1)

RedHat解决方案:

DEFINES += BUILDDATE=\\\"$$system(date '+%s')\\\"

在代码中:

QString strBuildDT = QString::fromLocal8Bit(BUILDDATE);
QDateTime qDT = QDateTime::fromMSecsSinceEpoch(strBuildDT.toLong() * 1000);
strBuildDT = qDT.toString("dd MMMM yyyy, HH:mm");

这很有效,感谢https://stackoverflow.com/users/616460/jason-c有关尝试+ s

的建议

答案 1 :(得分:1)

我找到了mailing list thread about this。这是有用的($$quote的目的是防止Qt重叠空格,它实际上应该仍然生成一个没有$$quote的非空字符串,真正的键是外\" s < / p>

DEFINES += \"BUILDDATE=\\\"$$quote($$system(date /T))\\\"\"

适用于Windows。我现在无法在Linux上测试,但应该是这样的:

DEFINES += \"BUILDDATE=\\\"$$quote($$system(date '+%d %B %Y'))\\\"\"

这实际上在编译器命令行上引用了整个事物,并允许它在字符串中使用空格。示例(Windows,mingw,Qt 4.8.1):

g++ ... -D"BUILDDATE=\"Wed 10/12/2016\"" ...

那说你仍然可能只想使用date '+%s'来获取纪元时间,然后使用QDateTime进行格式化以使用当前的区域设置和时区。不幸的是,我不知道在Windows上获取纪元时间的命令(粗略研究does not bode well)。