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

发布于 2024-11-14 02:57:03 字数 473 浏览 1 评论 0原文

我想在请求上设置 If-Modified-Since-header 并从文件的时间戳中获取时间。所以我将时间戳提取到 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 正在使用的时区的方法。

I want to set an If-Modified-Since-header on a request and take the time from the timestamp on the file. So I extracted the timestamp into a QDateTime. I could generate something looking similar to the date-format HTTP uses, but my server and my client use different time-zones. Is there a way to get the timezone-string from Qt or another way to generate the string for the header. Here my code so far:

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

I have to set the locale, because the system-locale is different and the server doesn't understand the format generated that way. It would be helpful, if I could get the timezone from Qt, so that I could add that to the String instead of the constant 'GMT'. But I didn't found a way to get the timezone Qt is using.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

温柔戏命师 2024-11-21 02:57:03

我认为这会做:

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

I think this will do:

QString modificationDate = fileinfo.lastModified().toUTC().toString("ddd, dd MMM yyyy hh:mm:ss") + " GMT";
画▽骨i 2024-11-21 02:57:03

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

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

Here is an slightly more elegant solution, which is used by Qt internally:

QByteArray QNetworkHeadersPrivate::toHttpDate(const QDateTime &dt)
{
    return QLocale::c().toString(dt, QLatin1String("ddd, dd MMM yyyy hh:mm:ss 'GMT'"))
        .toLatin1();
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文