c ++将time_t转换为string并再次返回

时间:2011-08-18 20:00:32

标签: c++ time

我想将time_t转换为字符串然后再转回。
我想使用ctime()将时间转换为字符串。
我似乎无法在google或time.h头文件中找到任何内容,任何想法?
基本上我要做的是在文件中存储一个日期,然后再读回来,这样我就可以再次使用它作为time_t。
此外,std,mfc。之外没有库引用
还有一点需要注意,这必须在Windows xp及更高版本上运行,就是这样。

修改

我想要做的就是将time_t转换为字符串(我不在乎它是否是人类可读的),然后将其转换回time_t。我基本上只是试图将time_t存储到一个文件中并再次读取它(但我不想要任何代码,因为除了time_t之外,文件中还会有更多信息。)

4 个答案:

答案 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()