我试图将构建日期和时间添加到我的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返回并清空字符串。
答案 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)。