2011-11-22 275 views
2

我有這樣的SQL查詢:如何在Qt C++中使用QSqlQuery在QDateTime中獲得毫秒數?

SELECT LOG_TIME FROM PCY_LOG_EVENTS; 

這種格式爲 「DD-MMM-YY HH.MM.SS.MS」 這樣的返回數據:

30-OCT-11 09.00.57.638000000 AM 

在我的Qt代碼,我有這個:

QSqlQuery query("SELECT LOG_TIME from PCY_LOG_EVENTS", db); 

while(query.next()) { 
    //Displays a QMessageBox with the millisecond part of the QDateTime 
    this->messageBox(QString::number(query.value(0).toDateTime().time().msec())); 
} 

我得到0的所有毫秒值。毫秒值沒有被存儲的原因是什麼?我將如何獲得毫秒值?

+0

你試過獲取值與QString('值(0)的ToString() ')?那是什麼回報? – Mat

+0

它返回如下所示:「2011-11-21T12:25:56」 –

+0

我擔心你必須實現一個解決方法然後(在查詢中轉換爲字符串格式,在Qt中執行手動QString - > QDateTime轉換用自定義格式),但我不知道肯定... – Mat

回答

2

得到查詢值作爲QString

QString dateTimeString = query.value(0).toString(); 

然後使用QDateTime的靜態fromString功能。你必須指定你的字符串的格式。我想這個月的天有一個前導零

QDateTime dateTime = QDateTime::fromString(dateTimeString, "dd-MMM-yy hh.mm.ss.zzz000000 A") 

通知毫秒部分:zzz000000。由於最大值可以是999,所以你的例子的尾部零是沒有意義的。所以通過使用zzz後跟零,你可以得到存儲在你的字符串中的毫秒數。唯一可能的問題是您的月份部分使用大寫字母,而MMM僅返回大寫字母縮寫的第一個字母。我希望這不會有問題。

一旦你做轉換就可以輕鬆搞定的毫秒:

int ms = dateTime.time().msec(); 

更多格式選項here

+0

我只是試過這個,這沒有奏效。正如我上面所說,query.value(0).toString()給你這樣的事情:「2011-11-21T12:25:56」 –

+0

嘗試將您的查詢更改爲:「SELECT CONVERT(LOG_TIME,CHAR(31) )從PCY_LOG_EVENTS」 – pnezis

+0

我得到這個錯誤,當我嘗試:ORA-00936:缺少表達 00936. 00000 - 「失蹤表達」 *原因: *動作: 行錯誤:1列:25 –