如何从QDateTime为HTTP Header If Modified Since生成时间戳

How to generate a time-stamp for HTTP-Header If-Modified-Since from QDateTime?

本文关键字:Since Modified 时间戳 If Header QDateTime HTTP      更新时间:2023-10-16

我想在请求上设置一个If Modified Since标头,并从文件上的时间戳中获取时间。因此,我将时间戳提取到QDateTime中。我可以生成与HTTP使用的日期格式类似的内容,但我的服务器和客户端使用不同的时区。有没有一种方法可以从Qt中获取时区字符串,或者用另一种方法为标头生成字符串。到目前为止,我的代码是:

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

我必须设置区域设置,因为系统区域设置不同,服务器不理解以这种方式生成的格式。如果我可以从Qt中获得时区,这样我就可以将其添加到字符串中,而不是常量"GMT",这将非常有用。但我没有找到一种方法来获取Qt正在使用的时区。

我认为这样可以:

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

这里有一个稍微优雅一点的解决方案,Qt内部使用它:

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