将 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_t
是 long 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的主要内容,如果未能解决你的问题,请参考以下文章
如何将Long值转换为日期时间并将当前时间转换为Long kotlin?