将 long int 转换为 const time_t

Posted

技术标签:

【中文标题】将 long int 转换为 const time_t【英文标题】:Convert long int to const time_t 【发布时间】:2016-08-03 05:51:01 【问题描述】:

我有变量 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,但我遇到了错误。

【问题讨论】:

请注意,time_t 的确切类型及其语义由语言标准指定为“实现定义”。它可能是自 1970 年 1 月 1 日以来的 long long 持有秒数,或者自 1900 年 1 月 1 日以来的双倍持有秒数,或者......你明白了。 【参考方案1】:

一般来说,你不能因为std::time_t 和像long 这样的整数之间没有任何合理的联系。

在您的特定系统上,std::time_tlong long,所以您可以这样做

std::time_t temp = tmit;

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

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

根据生成此tmit 的方式,最好从一开始就使用std::time_t tmit 而不是long tmit,从而完全消除此转换问题。

如果您不必使用旧的 C 样式时间工具,请查看 C++11 <chrono> 标头。

【讨论】:

【参考方案2】:

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

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

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

【讨论】:

以上是关于将 long int 转换为 const time_t的主要内容,如果未能解决你的问题,请参考以下文章

30分求:long值转换为时间类型

如何将Long值转换为日期时间并将当前时间转换为Long kotlin?

将 const void* 转换为 const int*

如何将有符号的long型转换成无符号的long型

如何将 unsigned long long int 转换为 unsigned char*?

将 int 转换为 unsigned long long