如何从QDateTime生成HTTP-Header If-Modified-Since的时间戳?

时间:2011-06-07 12:07:00

标签: c++ qt http-headers timezone

我想在请求上设置If-Modified-Since-header并从文件的时间戳中获取时间。所以我将时间戳提取到QDateTime中。我可以生成类似于HTTP使用的日期格式的东西,但我的服务器和我的客户端使用不同的时区。有没有办法从Qt或其他方式获取timezone-string以生成标头的字符串。到目前为止我的代码在这里:

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

我必须设置语言环境,因为系统区域设置不同,服务器不理解以这种方式生成的格式。如果我可以从Qt获得时区,那么我可以将它添加到String而不是常量'GMT'。但我没有找到一种方法来获得Qt正在使用的时区。

2 个答案:

答案 0 :(得分:2)

我认为这样做:

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

答案 1 :(得分:0)

这是一个稍微优雅的解决方案,Qt在内部使用:

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