【问题标题】:How to get modified date in UTC如何在 UTC 中获取修改日期
【发布时间】:2011-10-17 01:16:45
【问题描述】:

GetFileAttributesEx 返回文件系统返回的日期,未经修改。 NTFS 以 UTC 存储日期,而 FAT 以本地时区存储它们。不知道时区,约会是毫无价值的。

可靠地获取 UTC 文件的最后修改日期的最佳方法是什么? 最好的方法真的是检查 NTFS 与 FAT 吗?如果您使用不同的文件系统怎么办?我可以使用不同的 API 吗?有人可以在这里发布一些优雅的代码吗?

【问题讨论】:

  • 该函数可能会返回“未修改”时间戳,但仍需要将 FAT 时间格式转换为 FILETIME 格式。它可能在内部调用DosDateTimeToFileTime,但该函数的文档似乎没有启发性。
  • 好问题 - 我处于同样的情况,而且我希望有人只是粘贴一个可以做到这一点的函数,以避免为了填写 MSDN 文档的位置而进行研究是朦胧的。例如,他们在msdn.microsoft.com/en-us/library/ms724926(VS.85).aspx 给出了一个示例,这似乎假设文件时间总是以 UTC 格式返回...

标签: winapi filesystems


【解决方案1】:

使用 Win32 API GetFileTime,它以 UTC 格式返回所有时间。是的,FAT 文件系统确实在本地时间存储这些值,但 Win32 API 正在为您进行 UTC 转换。

引用自“FileTimes”MSDN 文档:

GetFileTime 从 FAT 文件系统中检索缓存的 UTC 时间。

【讨论】:

    【解决方案2】:

    来自http://msdn.microsoft.com/en-us/library/ms724290%28v=vs.85%29.aspx

    FAT 文件系统以本地时间在磁盘上记录时间。 GetFileTime 从 FAT 文件系统中检索缓存的 UTC 时间。当它变成夏令时时,GetFileTime 检索到的时间是一个小时,因为缓存没有更新。当您重新启动计算机时,GetFileTime 检索的缓存时间是正确的。 FindFirstFile 从 FAT 文件系统中检索本地时间,并使用时区和夏令时的当前设置将其转换为 UTC。因此,如果是夏令时,FindFirstFile 会考虑夏令时,即使您要转换的文件时间是标准时间。

    【讨论】:

      猜你喜欢
      • 2021-04-13
      • 2017-05-28
      • 1970-01-01
      • 2015-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 2018-01-17
      相关资源
      最近更新 更多