2016-04-12 2 views
2

У меня есть переменная tmit: long tmit;. Я получил ошибку в этом коде:Преобразование long int в const time_t

printf("Time: %s",ctime(&tmit)); 

И ошибка сказать: Cannot convert 'long int*' to 'const time_t* {aka const long long int*}' for argument '1' to 'char* ctime(const time_t*)' Мой вопрос, как конвертировать долго time_t без Lossing какую-либо информацию о времени или как изменить этот код, если я хотел бы видеть дату. Я работаю над этим answer, но у меня возникла ошибка.

+0

Обратите внимание, что точный тип 'time_t' и его семантическое значение задается стандартом языка как« реализация определена ». Это может быть «длинные» длинные секунды с 1970-01-01 или двойные секундные секунды с 1900-01-01, или ... вы получаете идею. – DevSolar

ответ

3

В общем, вы не можете, так как не должно быть разумной связи между std::time_t и целым числом, например long.

В вашей конкретной системе, std::time_t является long long, так что вы можете просто сделать

std::time_t temp = tmit; 

, а затем использовать temp «s адрес. Обратите внимание, что это не должно быть переносимым в разных версиях компилятора или компилятора (хотя я не ожидал, что последний сломается).

Стоит ли проверять, что независимо от того, что было сохранено в tmit, интерпретируется такими функциями, как ctime, так как вы не сообщили нам, откуда это взялось.

В зависимости от того, как производится это tmit, также может быть полезно использовать std::time_t tmit вместо long tmit с момента получения и, таким образом, полностью исключить этот вопрос конверсии.

Если вам не нужно использовать старые временные средства C-стиля, ознакомьтесь с заголовком C++ 11 <chrono>.

+0

Слишком легко верить, но эта работа: D –

3

Вы не можете просто «преобразовать» один тип указателя на указатель на несовместимый тип объекта.

То, что вы хотите сделать, это создать объект, который другой тип, а затем инициализировать его с помощью преобразования impicit между типами объектов, и, наконец, передать указатель на вновь созданный объект:

std::time_t t = tmit; 
ctime(&t); 
Смежные вопросы