C ++将字符串转换为time_t

时间:2016-06-27 17:26:27

标签: c++ c time stat

我使用stat.st_mtime获取目录的最后修改时间,然后将其存储到file.txt中(存储的字符串类似于:1467035651

稍后,当我从file.txt检索数据时,我尝试将我的 file.txt 中的字符串转换为int类型,因为字符串只包含几秒钟,但我不知道#39;不知道这样做是否是个好主意。

有没有办法直接转换为time_t

4 个答案:

答案 0 :(得分:7)

根据reference documentation time_t,这只是一种未指定的数字格式。

只需直接读回文件中的数值,就不需要进行特殊转换:

time_t t;
std::ifstream input("File.txt");
// ...
input >> t;

答案 1 :(得分:4)

atoll中的函数stdlib.h应该有效。例如:

time_t t;
char *time_string = //...

t = (time_t) atoll(time_string);

答案 2 :(得分:2)

[假设C]

strto*()系列函数提供了转换C - "字符串"的失败安全方法。到signedunsigned的整数,以及float and double

答案 3 :(得分:2)

  

有没有办法直接转换为time_t?

其他各种答案都发布了有优势和劣势的直接解决方案。

  

只包含几秒钟,但我不知道这样做是否是一个好主意。

答案取决于目标。 IMO,这是错误的方法

考虑使用ISO 8601标准并将时间戳保存在明确表示时区的文本标准版本中,而不是保存/读取某些编译器相关格式。

作为帖子的示例C代码被标记为C 对于,类似

// Minimum size to store a ISO 8601 date/time stamp
//YYYY-MM-DDThh:mm:ss\0
#define N (4 + 5*3 + 1 + 1)

time_t x;
struct tm *tm = gmtime(&x);
if (tm == NULL) {
  return failure;
}

char dest[N + 1];
int cnt = snprintf(dest, sizeof(dest), "%04d-%02d-%02dT%02d:%02d:%02dZ", 
    tm.tm_year + 1900, tm.tm_mon+1, tm.tm_mday,
    tm.tm_hour, tm.tm_min, tm.tm_sec);
if (cnt < 0 || cnt >= sizeof(dest)) {
  return failure;
}

小数秒的附加代码需要 另请参阅ftime( , , "%FT%T %z", )

您希望在file.txt中阅读什么?

1467035651 

2016-06-27T13:54:11Z