2011-06-07 23 views
2

我想在請求上設置If-Modified-Since-header並從文件的時間戳中獲取時間。於是我將時間戳提取到QDateTime中。我可以生成類似於日期格式HTTP使用的東西,但是我的服務器和我的客戶端使用不同的時區。有沒有辦法從Qt獲取時區字符串,或者以其他方式爲標題生成字符串。在這裏我到目前爲止的代碼:如何從QDateTime生成HTTP-Header If-Modified-Since的時間戳?

QLocale locale(QLocale::English, QLocale::UnitedStates); 
QString modificationDate = locale.toString(fileinfo.lastModified(), "ddd, dd MMM yyyy hh:mm:ss 'GMT'"); 

我必須設置的語言環境,因爲系統語言環境是不同的,並且服務器不理解的格式而產生的方式。如果我可以從Qt獲得時區,這將會很有幫助,這樣我可以將其添加到字符串中,而不是常量「GMT」。但我沒有找到一種獲得Qt使用的時區的方法。

回答

2

我認爲這會做:

QString modificationDate = fileinfo.lastModified().toUTC().toString("ddd, dd MMM yyyy hh:mm:ss") + "GMT"; 
+1

我所需要的語言環境的東西,因爲我的德文場所它以'Di'開始而不是'Tue'開始,服務器不理解這一點。但是提示toUTC()會有所幫助,這會糾正時區中的差異。非常感謝你。 – Mnementh 2011-06-07 12:33:01

+0

感謝您指出本週的本地化名稱。不知道QDateTime使用系統區域設置。 – 2011-06-07 13:34:52

+0

GMT之前需要一個空格 – mrg95 2017-06-10 06:29:09

0

下面是一個稍微更優雅的解決方案,它使用Qt的內部:

QByteArray QNetworkHeadersPrivate::toHttpDate(const QDateTime &dt) 
{ 
    return QLocale::c().toString(dt, QLatin1String("ddd, dd MMM yyyy hh:mm:ss 'GMT'")) 
     .toLatin1(); 
}