我使用stat.st_mtime
获取目录的最后修改时间,然后将其存储到file.txt
中(存储的字符串类似于:1467035651
)
稍后,当我从file.txt
检索数据时,我尝试将我的 file.txt 中的字符串转换为int
类型,因为字符串只包含几秒钟,但我不知道#39;不知道这样做是否是个好主意。
有没有办法直接转换为time_t
?
答案 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 - "字符串"的失败安全方法。到signed
或unsigned
的整数,以及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