2015-06-19 53 views
0

我需要字符串變量轉換爲QDateTime格式QDateTime轉換

我的代碼看起來

QString date ="Thu Jun 18 2015"; 
QDateTime tmp = QDateTime::fromString(date,"ddd MMM dd yyyy HH:mm:ss"); 

但結果是Thu Jan 1 00:00:00 1970

後來我有此日期轉換爲foramt yyyy-MM-dd HH:mm:ss,所以作爲第一步,我必須轉換字符串中QDateTime然後我不得不轉換爲最終的格式,有沒有與上面的代碼錯誤的東西?

任何幫助將不勝感激。

感謝 哈里斯

+2

日期名稱根據系統的默認語言環境設置進行本地化,您是否檢查過? – Ediac

+0

我沒有明白你的意思嗎? – Haris

+1

除了語言環境設置,'date'字符串不包含時間,當您提到您需要某個時間時,至少在Qt 5.4中會失敗。我仍然想知道爲什麼打印這個時代。也許這取決於你使用的qt版本。 – mfuchs

回答

3

date字符串不包括時間,而你提到你想要一個,這將失敗,至少在Qt的5.4。 我不知道你爲什麼得到epoche輸出,也許這是依賴於你的Qt版本。

您的日期格式也是區域依賴。 參見例如用於"ddd"的doucmentation在QDateTime::fromString

縮寫本地化日名稱(例如,「星期一」到「太陽」)。使用QDate :: shortDayName()。

不幸的是不是清楚,雖然這是QDateTime::toString更加清晰:

縮寫本地化的日期名(例如,「星期一」到「太陽」)。使用系統區域設置來定位名稱,即QLocale :: system()。

例如,在我的區域(德國,奧地利)「DDD」週四的結果"Do."這是不同於"Thu"並使其無法解析英語縮略語與語言環境。

爲確保在讀取或寫入區域設置相關輸出時使用正確的語言環境,請使用QLocale。 在你的情況,這將是QLocale::toDateTime

QLocale locale(QLocale::English, QLocale::UnitedStates); 
QDateTime dt = locale.toDateTime("Jun 18 2015", "MMM dd yyyy"); 

如果您還需要依賴於語言環境的輸出使用QLocale::toString