我想将time_t转换为字符串然后再转回。
我想使用ctime()将时间转换为字符串。
我似乎无法在google或time.h头文件中找到任何内容,任何想法?
基本上我要做的是在文件中存储一个日期,然后再读回来,这样我就可以再次使用它作为time_t。
此外,std,mfc。之外没有库引用
还有一点需要注意,这必须在Windows xp及更高版本上运行,就是这样。
我想要做的就是将time_t转换为字符串(我不在乎它是否是人类可读的),然后将其转换回time_t。我基本上只是试图将time_t存储到一个文件中并再次读取它(但我不想要任何代码,因为除了time_t之外,文件中还会有更多信息。)
答案 0 :(得分:13)
你必须编写自己的功能才能做到这一点。这些函数将任何基本类型(或任何重载运算符<<和/或运算符>>)的类型转换为字符串,反之亦然:
template<typename T>
std::string StringUtils::toString(const T &t) {
std::ostringstream oss;
oss << t;
return oss.str();
}
template<typename T>
T StringUtils::fromString( const std::string& s ) {
std::istringstream stream( s );
T t;
stream >> t;
return t;
}
答案 1 :(得分:2)
time_t Wikipedia article文章对此有所了解。底线是C规范中不保证time_t
的类型。以下是您可以尝试的示例:
尝试stringstream
。
#include <string>
#include <sstream>
time_t seconds;
time(&seconds);
std::stringstream ss;
ss << seconds;
std::string ts = ss.str();
围绕上述技术的一个很好的包装是Boost的lexical_cast:
#include <boost/lexical_cast.hpp>
#include <string>
time_t t;
time(&t);
std::string ts = boost::lexical_cast<std::string>(seconds);
Wikipedia on time_t:
time_t
数据类型是一种数据类型 定义用于存储的ISO C库 系统时间值。这样的价值观是 从标准time()
返回 库函数。这种类型是 typedef在标准中定义 头。 ISO C定义 time_t作为算术类型,但确实如此 不指定任何特定类型, 范围,分辨率或编码。 也没有具体说明的含义 适用于时间的算术运算 值。符合Unix和POSIX标准的系统将
time_t
类型实现为signed integer
(通常为32或64位宽) 表示秒数 自Unix纪元开始以来: 1970年1月1日午夜UTC(不是 计算闰秒)。一些系统 正确处理负时间值, 而其他人则没有。系统使用 32位time_t
类型容易受到影响 Year 2038 problem。
答案 2 :(得分:2)
ctime()
返回指向使用特定格式的字符缓冲区的指针。您可以使用sprintf()
将此类字符串解析为各个部分,将其存储在struct tm
中,然后使用mktime()
将其转换为time_t
。
答案 3 :(得分:1)
使用gmtime()将time_t转换为struct tm,然后使用strftime()将struct tm转换为纯文本(最好是ISO 8601格式)。结果将是可移植的,人类可读的和机器可读的。
要返回time_t,只需将字符串解析回struct tm并使用mktime()。