将 long int 转换为 const time_t

Convert long int to 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 而不会丢失任何有关时间的信息或如何更改此代码。我正在处理此 answer,但出现错误。

您不能简单地"convert"一种指向不兼容对象类型的指针。

你想做的是创建另一个类型的对象,然后使用对象类型之间的隐式转换对其进行初始化,最后将指针传递给新创建的对象:

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

一般来说,您不能这样做,因为 std::time_tlong.

这样的整数之间不需要任何合理的联系

在您的特定系统上,std::time_tlong long,因此您可以直接执行

std::time_t temp = tmit;

然后使用temp的地址。请注意,这不需要跨编译器或编译器版本可移植(尽管我不希望后者中断)。

值得检查 tmit 中保存的内容是否被 ctime 等函数以合理的方式解释,因为您没有告诉我们它来自哪里。

根据这个 tmit 的产生方式,从一开始就使用 std::time_t tmit 而不是 long tmit 可能也是一个好主意,从而完全消除这个转换问题.

如果您不必使用旧的 C-style 时间工具,请查看 C++11 <chrono> header.