std :: localtime возвращает ноль - PullRequest
0 голосов
/ 17 октября 2019

У меня есть количество секунд с 1 января 2000 года. Я пытаюсь создать из него структуру std :: tm. Для этого я пытаюсь:

//seconds from 1970 to 2000.
unsigned long long secstoposix = 946684800; 
//secsfromdate is the amount of secs since 2000...
unsigned long long l=secstoposix + secsfromdate;

this->time=l; //(posix+amount)
tm=*std::localtime(&time);  // <-- std::localtime returns null. 

localtime возвращает ноль, а errno устанавливается в 0, поэтому я не получаю то, что здесь не работает.

1 Ответ

1 голос
/ 17 октября 2019

Значение 18446744073709551615 равно 2^64 - 1, которое не является числом секунд с 1970 по 2000 год.

std::time_t определяется реализацией, на моей машине это 64-разрядное целое число со знаком. Таким образом, std::time_t time = l; может переполниться, что может быть причиной для std::localtime возврата nullptr.

...