如何获取 UTC 格式的修改日期
GetFileAttributesEx
返回文件系统返回的日期(未修改)。 NTFS 以 UTC 格式存储日期,FAT 以本地时区存储日期。如果不知道时区,约会就毫无价值。
可靠地获取文件最后修改日期(UTC)的最佳方法是什么?最好的方法真的是只检查 NTFS 与 FAT 吗?如果您使用不同的文件系统怎么办?我可以使用其他 API 吗?有人可以在这里发布一些优雅的代码吗?
GetFileAttributesEx
returns the date that the filesystem returns, unmodified. NTFS stores dates in UTC, and FAT stores them in the local time zone. Without knowing the time zone, a date is pretty worthless.
What is the best way to reliably get the last modified date of a file in UTC? Is the best way really to just check for NTFS vs. FAT? What if you are using a different filesystem? Is there a different API I can use? Is there some elegant code someone can post here?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
使用 Win32 API GetFileTime,它返回其所有 UTC 时间。是的,FAT 文件系统确实以本地时间存储这些值,但 Win32 API 正在为您进行 UTC 转换。
引用自 'FileTimes' MSDN文档:
Use the Win32 API GetFileTime, it returns all its times in UTC. Yes, FAT file system does store these values in local time, but the Win32 API is doing the UTC conversion for you.
Quote from the 'FileTimes' MSDN documentation:
来自 http://msdn.microsoft.com/ en-us/library/ms724290%28v=vs.85%29.aspx
FAT 文件系统以本地时间记录磁盘上的时间。 GetFileTime 从 FAT 文件系统检索缓存的 UTC 时间。当夏令时到来时,GetFileTime 检索到的时间会减少一个小时,因为缓存没有更新。当您重新启动计算机时,GetFileTime 检索到的缓存时间是正确的。 FindFirstFile 从 FAT 文件系统检索本地时间,并使用当前时区和夏令时设置将其转换为 UTC。因此,如果是夏令时,FindFirstFile 也会考虑夏令时,即使您要转换的文件时间是标准时间。
from http://msdn.microsoft.com/en-us/library/ms724290%28v=vs.85%29.aspx
The FAT file system records times on disk in local time. GetFileTime retrieves cached UTC times from the FAT file system. When it becomes daylight saving time, the time retrieved by GetFileTime is off an hour, because the cache is not updated. When you restart the computer, the cached time that GetFileTime retrieves is correct. FindFirstFile retrieves the local time from the FAT file system and converts it to UTC by using the current settings for the time zone and daylight saving time. Therefore, if it is daylight saving time, FindFirstFile takes daylight saving time into account, even if the file time you are converting is in standard time.