2016-10-12 35 views
1

我試圖構建日期和時間添加到我的Qt 5.6的項目文件生成日期和時間,到目前爲止,我還補充說:入門在redhat 7.2

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')\\\" 

但是,這並不工作,回報和創建日期空字符串。

+1

格式字符串*應該是正確的。當你在命令行上運行時,'date'的輸出是什麼?+%d%B%Y''? –

+0

我同意從命令行起作用,但在項目文件中使用時什麼都沒有。 – SPlatten

+0

也只是出於好奇心,它沒有空間工作(我不是在這個時候我可以嘗試它的地方)例如'+%D_%B_%Y'?順便說一句,你也可以考慮'日期+%s',然後在運行時將其格式化爲當前的語言環境和時區。 –

回答

1

我發現了一個mailing list thread about this。這工作(的$$quote的目的是爲了防止從Qt的空間改寫(munging),它實際上還是應該產生一個非空字符串沒有$$quote,真正的關鍵是外\" S)

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)。

1

解決方案紅帽:

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