C++ 使用stat API获得错误的文件修改时间
在获取文件的修改时间时,我看到一个奇怪的行为。 我们一直在调用方法来获取项目中的文件修改,如下所示C++ 使用stat API获得错误的文件修改时间,c++,c,windows,winapi,C++,C,Windows,Winapi,在获取文件的修改时间时,我看到一个奇怪的行为。 我们一直在调用方法来获取项目中的文件修改,如下所示 int my_win_stat( const char *path, struct _stati64 *buf) { if(_stati64( path, buf) == 0) { std::cout<<buf->st_mtime << std::endl; //I added to ensure if value is not changing els
int my_win_stat( const char *path, struct _stati64 *buf)
{
if(_stati64( path, buf) == 0)
{
std::cout<<buf->st_mtime << std::endl; //I added to ensure if value is not changing elsewhere in the function.
}
...........
...........
}
int my\u win\u stat(const char*path,struct\u stati64*buf)
{
如果(_stati64(路径,buf)==0)
{
Unix时间非常容易处理。它是自1970年1月1日以来的秒数(即0表示该特定日期)
现在,您要说的是,您正在使用浏览器中的第三方工具测试您的时间(mtime),并希望它能为您提供正确的答案。因此,让我们做一个测试,以下数字是2015年9月1日00:00:00 GMT
1441065600
如果您转到Epoch Converter并使用该值,它是否为您提供了正确的GMT?(如果没有,则有些地方确实错误。)然后查看本地时间值,看看您是否获得了GMT午夜的预期值。(请注意,我使用GMT,因为Epoch Converter使用该缩写,但正确的缩写是UTC。)
在我看来,您的代码很可能提取了正确的时间,但是本地时间的历元转换器在您的计算机上出现故障
请注意,你可以在C++程序中用类似的方法测试:
std::cerr << ctime(&buf->st_mtime) << std::endl;
一年后,我遇到了类似的问题,但情况却不太一样。但这次我明白了为什么有一个+2 30h的差距。我通过Perl脚本执行C++程序,实习生设置了时区<代码> GMT-3”/CODE >,我的机器已经在时区GMT +5:30。“2:30小时”的e部分。
为什么?正如哈利在书中提到的
在Perl中更改时区可能会导致设置TZ环境变量,这会影响C运行时库
两种情况下都是同一个文件系统?我知道一些Linux文件系统不存储修改日期,这可以解释为什么它没有提供正确的数据?@MatstPetersson是的,它是windows上的NTFS7@MatsPetersson:好奇:那是哪一个?@Olaf:啊,我可能错了,我想是“访问时间”这在某些文件系统上是不受支持的……这可能是时区问题吗?如果差异是恒定的,我会朝这个方向研究。
1441065600
std::cerr << ctime(&buf->st_mtime) << std::endl;