diff options
author | Ximin Luo <infinity0@pwned.gg> | 2016-05-09 21:14:16 (GMT) |
---|---|---|
committer | Ximin Luo <infinity0@pwned.gg> | 2016-05-09 21:14:16 (GMT) |
commit | 5801460b3141871222569fb99e7964e9a2925d71 (patch) | |
tree | 91632ac3f08ce5200b0f23ba0d45199bcfaf68bd /qtools/qdatetime.cpp | |
parent | 8480d35beef57ed08139b58972bfb83a3b37422c (diff) | |
download | Doxygen-5801460b3141871222569fb99e7964e9a2925d71.zip Doxygen-5801460b3141871222569fb99e7964e9a2925d71.tar.gz Doxygen-5801460b3141871222569fb99e7964e9a2925d71.tar.bz2 |
Bug 751984 - Use UTC timezone when displaying QDateTimes parsed from SOURCE_DATE_EPOCH
According to the SOURCE_DATE_EPOCH spec [1], "Formatting MUST be deferred until runtime if an end user should observe the value in their own locale or timezone."
However setTime_t uses localtime, so the output is in the timezone of the build machine running doxygen, and not the timezone of the reader consuming the final output.
To adhere to the spec, the easiest option is to add a setTimeUtc_t function that is the same as setTime_t, but only uses gmtime instead of first trying localtime.
[1] https://reproducible-builds.org/specs/source-date-epoch/
Diffstat (limited to 'qtools/qdatetime.cpp')
-rw-r--r-- | qtools/qdatetime.cpp | 23 |
1 files changed, 23 insertions, 0 deletions
diff --git a/qtools/qdatetime.cpp b/qtools/qdatetime.cpp index d0cc36e..88569f8 100644 --- a/qtools/qdatetime.cpp +++ b/qtools/qdatetime.cpp @@ -1158,6 +1158,29 @@ void QDateTime::setTime_t( uint secsSince1Jan1970UTC ) /*! + Sets the UTC date and time given the number of seconds that have passed + since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC). + + Note that Microsoft Windows supports only a limited range of values for + \a secsSince1Jan1970UTC. +*/ + +void QDateTime::setTimeUtc_t( uint secsSince1Jan1970UTC ) +{ + time_t tmp = (time_t) secsSince1Jan1970UTC; + tm *tM = gmtime( &tmp ); + if ( !tM ) { + d.jd = QDate::greg2jul( 1970, 1, 1 ); + t.ds = 0; + return; + } + d.jd = QDate::greg2jul( tM->tm_year + 1900, tM->tm_mon + 1, tM->tm_mday ); + t.ds = MSECS_PER_HOUR*tM->tm_hour + MSECS_PER_MIN*tM->tm_min + + 1000*tM->tm_sec; +} + + +/*! Returns the datetime as a string. The string format is "Sat May 20 03:40:13 1998". |