Преобразование long int в const time t


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

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*)' Мой вопрос заключается в том, как преобразовать long в time_t без потери какой-либо информации о времени или как изменить этот код, если мне нравится видеть дату. Я работаю над этим ответом , но я получил ошибку.

2   3   2016-04-12 17:28:36

2 ответа:

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

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

std::time_t temp = tmit;

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

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

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

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

Нельзя просто "преобразовать" один тип указателя в указатель на несовместимый тип объекта.

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

std::time_t t = tmit;
ctime(&t);