diff --git a/src/network/access/qhttpheaders.cpp b/src/network/access/qhttpheaders.cpp index 3786a17ae23..8f662c59a68 100644 --- a/src/network/access/qhttpheaders.cpp +++ b/src/network/access/qhttpheaders.cpp @@ -1545,6 +1545,34 @@ std::optional QHttpHeaders::dateTimeValue(WellKnownHeader name) const return dateTimeValue(wellKnownHeaderName(name)); } +/*! + \since 6.10 + + Sets the value of the header name \a name to \a dateTime, + following the + \l {https://datatracker.ietf.org/doc/html/rfc9110#name-date-time-formats}{standard HTTP IMF-fixdate format}. + If the header does not exist, adds a new one. + + \sa dateTimeValue(QAnyStringView name), dateTimeValueAt(qsizetype i) + */ +void QHttpHeaders::setDateTimeValue(QAnyStringView name, const QDateTime &dateTime) +{ + if (!dateTime.isValid()) { + qWarning("QHttpHeaders::setDateTimeValue: invalid QDateTime value received"); + return; + } + replaceOrAppend(name, QNetworkHeadersPrivate::toHttpDate(dateTime)); +} + +/*! + \since 6.10 + \overload setDateTimeValue(QAnyStringView) +*/ +void QHttpHeaders::setDateTimeValue(WellKnownHeader name, const QDateTime &dateTime) +{ + setDateTimeValue(wellKnownHeaderName(name), dateTime); +} + /*! \since 6.10 diff --git a/src/network/access/qhttpheaders.h b/src/network/access/qhttpheaders.h index c9087724a64..23de782662d 100644 --- a/src/network/access/qhttpheaders.h +++ b/src/network/access/qhttpheaders.h @@ -262,6 +262,9 @@ public: Q_NETWORK_EXPORT std::optional dateTimeValueAt(qsizetype i) const; + Q_NETWORK_EXPORT void setDateTimeValue(QAnyStringView name, const QDateTime &dateTime); + Q_NETWORK_EXPORT void setDateTimeValue(WellKnownHeader name, const QDateTime &dateTime); + Q_NETWORK_EXPORT qsizetype size() const noexcept; Q_NETWORK_EXPORT void reserve(qsizetype size); bool isEmpty() const noexcept { return size() == 0; } diff --git a/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp b/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp index dc21bf2dab3..e0b76308dfa 100644 --- a/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp +++ b/tests/auto/network/access/qhttpheaders/tst_qhttpheaders.cpp @@ -623,6 +623,14 @@ void tst_QHttpHeaders::dateTimeValues() QCOMPARE(dateTimeValueAtIndex->date(), QDate(2025, 2, 24)); QCOMPARE(dateTimeValueAtIndex->time(), QTime(11, 11, 11, 0)); + QDateTime dateTimeValue3{QDate{2049, 4, 3}, QTime{12, 30, 00, 0}}; + dateTimeValue3.setTimeZone(QTimeZone::UTC); + h1.setDateTimeValue("date", dateTimeValue3); + std::optional setDateTimeValue = h1.dateTimeValue("date"); + QVERIFY(setDateTimeValue); + QCOMPARE(setDateTimeValue->date(), QDate(2049, 4, 3)); + QCOMPARE(setDateTimeValue->time(), QTime(12, 30, 00, 0)); + h1.clear(); h1.append("Date", "InvalidDateFormat"); h1.append("Date", "");