我想把time_t转换成字符串,然后再转换回来。
我想使用ctime()将时间转换为字符串。
我似乎找不到任何在谷歌或time.h头文件,任何想法?
基本上,我尝试做的是将日期存储在文件中,然后将其读回,以便我可以再次将其用作time_t。
此外,没有std、mfc以外的库引用。
还有一点要注意,这将必须在Windows xp及以上版本上运行,仅此而已。
编辑
我所要做的就是将time_t转换为字符串(我不在乎它是否是人类可读的),然后将其转换回time_t。我基本上只是试图将time_t存储到一个文件中并再次读取它(但我不需要任何代码,因为除了time_t之外,文件中还有更多信息)。
5条答案
按热度按时间flvlnr441#
你必须自己写一个函数来实现这一点。这些函数将任何原始类型(或重载operator<<和/或operator>>的任何类型)转换为字符串,反之亦然:
jm81lzqq2#
time_t Wikipedia article文章对此进行了一些阐述。底线是
time_t
的类型在C规范中没有保证。下面是一个你可以尝试的例子:试试
stringstream
上述技术的一个很好的 Package 器是Boost的lexical_cast:
时间t上的维基百科:
time_t
数据类型是ISO C库中为存储系统时间值而定义的数据类型。这些值是从标准time()
库函数返回的。此类型是标准头中定义的typedef。ISO C将time_t定义为算术类型,但未指定任何特定类型、范围、分辨率或编码。同样未指定的是应用于时间值的算术运算的含义。Unix和POSIX兼容系统将
time_t
类型实现为signed integer
(通常为32或64位宽),表示自Unix纪元开始以来的秒数:UTC 1970年1月1日午夜(不包括闰秒)。有些系统可以正确处理负时间值,而有些则不能。使用32位time_t
类型的系统易受Year 2038 problem影响。j1dl9f463#
ctime()
返回指向使用特定格式的字符缓冲区的指针。您可以使用sprintf()
将这样的字符串解析为各个部分,将它们存储在struct tm
中,然后使用mktime()
将其转换为time_t
。mftmpeh84#
使用gmtime()将time_t转换为struct tm,然后使用strftime()将struct tm转换为纯文本(首选ISO 8601格式)。结果将是可移植的、人类可读的和机器可读的。
要回到time_t,只需将字符串解析回struct tm并使用mktime()。
62lalag45#
另一个带有
stringstream
的答案会给予你一个不可读的整数(如问题中所要求的)。如果你喜欢一个可读的答案,这里是: