diff --git a/src/corelib/time/qdatetime.cpp b/src/corelib/time/qdatetime.cpp index 235222043dc..a5f8f01f74e 100644 --- a/src/corelib/time/qdatetime.cpp +++ b/src/corelib/time/qdatetime.cpp @@ -5350,7 +5350,7 @@ QDateTime QDateTime::currentDateTimeUtc() \since 6.4 Constructs a datetime representing the same point in time as \a time, - using Qt::UTC as its specification. + using Qt::UTC as its time representation. The clock of \a time must be compatible with \c{std::chrono::system_clock}; in particular, a conversion @@ -5369,6 +5369,22 @@ QDateTime QDateTime::currentDateTimeUtc() \sa toStdSysMilliseconds(), fromMSecsSinceEpoch() */ +/*! + \since 6.4 + \overload + + Constructs a datetime representing the same point in time as \a time, + using Qt::UTC as its time representation. +*/ +QDateTime QDateTime::fromStdTimePoint( + std::chrono::time_point< + std::chrono::system_clock, + std::chrono::milliseconds + > time) +{ + return fromMSecsSinceEpoch(time.time_since_epoch().count(), QTimeZone::UTC); +} + /*! \fn QDateTime QDateTime::fromStdTimePoint(const std::chrono::local_time &time) \since 6.4 diff --git a/src/corelib/time/qdatetime.h b/src/corelib/time/qdatetime.h index 29da29a5d0e..16c4a683d1d 100644 --- a/src/corelib/time/qdatetime.h +++ b/src/corelib/time/qdatetime.h @@ -508,6 +508,13 @@ public: NSDate *toNSDate() const Q_DECL_NS_RETURNS_AUTORELEASED; #endif + static QDateTime fromStdTimePoint( + std::chrono::time_point< + std::chrono::system_clock, + std::chrono::milliseconds + > time + ); + #if __cpp_lib_chrono >= 201907L || defined(Q_QDOC) #if __cpp_concepts >= 201907L || defined(Q_QDOC) private: @@ -539,7 +546,7 @@ public: const auto sysTime = std::chrono::clock_cast(time); // clock_cast can change the duration, so convert it again to milliseconds const auto timeInMSec = std::chrono::time_point_cast(sysTime); - return fromMSecsSinceEpoch(timeInMSec.time_since_epoch().count(), Qt::UTC); + return fromStdTimePoint(timeInMSec); } #endif // __cpp_concepts