将长整型转换为const time_t。

5
我有一个变量tmit: long tmit;。在这段代码中出现了错误:
printf("Time: %s",ctime(&tmit));

错误提示: 将 'long int*' 转换为 'const time_t* {aka const long long int*}' 时,参数 1 的类型不匹配,函数为 'char* ctime(const time_t*)'。我的问题是,如何将 long 类型转换为 time_t 类型,而不会丢失任何关于时间的信息,或者如何更改这段代码以便查看日期。我正在参考这个答案,但是出现了错误。


请注意,time_t 的确切类型及其语义含义由语言标准指定为“实现定义”。它可以是一个 long long,表示自1970年01月01日以来的秒数,也可以是一个双精度浮点数,表示自1900年01月01日以来的秒数,等等。你明白了吧。 - DevSolar
2个回答

7
通常情况下,你不能这样做,因为std::time_t和像long这样的整数之间可能没有任何合理的连接。

在你的特定系统上,std::time_t是一个long long,所以你可以直接这样做:

std::time_t temp = tmit;

然后使用temp的地址。请注意,这不一定跨编译器或编译器版本可移植(尽管我不希望后者会出现问题)。
值得检查的是,tmit中保存的任何内容是否能被ctime等函数以合理的方式解释,因为您没有告诉我们它来自哪里。
根据产生tmit的方式,使用std::time_t tmit而不是一开始就使用long tmit可能也是个好主意,从而完全消除这个转换问题。
如果您不必使用旧的C风格的时间工具,请查看C++11 <chrono>头文件。

5

你不能简单地将一种类型的指针转换为指向不兼容对象类型的指针。

你需要做的是创建另一种类型的对象,然后使用对象类型之间的隐式转换进行初始化,最后传递指向新创建的对象的指针:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接