[libcxx-dev] Possible bug in std::get_time and std::chrono::system_clock::from_time_t
Hans Wennborg via libcxx-dev
libcxx-dev at lists.llvm.org
Thu Nov 21 06:30:35 PST 2019
I'm not able to reproduce your exact result with different values
printed by the two statements, but I do get different results
depending on whether I build with -O2 or not :-)
I think the problem is hinted at by this note on
https://en.cppreference.com/w/cpp/io/manip/get_time
"Note: tm_isdst is not written to, and needs to be set explicitly for
use with functions such as mktime"
With that fixed, the program seems to work as expected:
#include <chrono>
#include <iomanip>
#include <iostream>
#include <sstream>
auto stringToTime(std::string const & TimeString) {
std::tm t;
std::istringstream InSS(TimeString);
InSS >> std::get_time(&t, "%Y-%m-%d %T");
t.tm_isdst = -1; // <---- Fix here.
auto Temp = std::mktime(&t);
std::cout << "Temp: " << Temp << std::endl;
return std::chrono::system_clock::from_time_t(Temp);
}
int main() {
stringToTime("1996-02-25 12:13:13");
stringToTime("1996-02-25 12:13:13");
return 0;
}
On Thu, Nov 21, 2019 at 2:50 PM Jonas Nilsson via libcxx-dev
<libcxx-dev at lists.llvm.org> wrote:
>
> Hi,
>
> I have a problem that I was unable to find anything on in LLVM Bugzilla. Consider this code:
>
> auto stringToTime(std::string const & TimeString) {
> std::tm t;
> std::istringstream InSS(TimeString);
> InSS >> std::get_time(&t, "%Y-%m-%d %T");
> auto Temp = std::mktime(&t);
> std::cout << "Temp: " << Temp << std::endl;
> return std::chrono::system_clock::from_time_t(Temp);
> }
> int main() {
> stringToTime("1996-02-25 12:13:13");
> stringToTime("1996-02-25 12:13:13”);
> return 0;
> }
>
> It produces the following output:
> Temp: 825243193
> Temp: 825246793
>
> The last timestamp is correct whereas the first timestamp is off by one hour (3600s).
>
> Removing the last line ("return std::chrono::system_clock::from_time_t(Temp);”) makes the two output lines identical (and correct).
>
> I am using MacOSX Mojave 10.14.6 as a development OS. The compiler version string is: "Apple LLVM version 10.0.1 (clang-1001.0.46.4)”. The region (in System preferences) is set to Sweden.
>
> Is this a known issue?
>
> /Jonas
> _______________________________________________
> libcxx-dev mailing list
> libcxx-dev at lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/libcxx-dev
More information about the libcxx-dev
mailing list