Как получить дату изменения в UTC - PullRequest
0 голосов
/ 01 августа 2011

GetFileAttributesEx возвращает дату, которую возвращает файловая система, без изменений. NTFS хранит даты в UTC, а FAT сохраняет их в местном часовом поясе. Не зная часового пояса, свидание довольно бесполезно.

Каков наилучший способ надежно получить дату последнего изменения файла в UTC? Является ли лучший способ действительно проверить NTFS или FAT? Что делать, если вы используете другую файловую систему? Могу ли я использовать другой API? Кто-нибудь может написать здесь какой-нибудь элегантный код?

Ответы [ 2 ]

3 голосов
/ 01 августа 2011

Используйте Win32 API GetFileTime , он возвращает все свои времена в UTC. Да, файловая система FAT хранит эти значения по местному времени, но Win32 API выполняет преобразование UTC для вас.

Цитата из документации MSDN ' FileTimes ':

GetFileTime извлекает кэшированное время UTC из файловой системы FAT.

2 голосов
/ 01 августа 2011

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

Файловая система FAT записывает время на диске по местному времени. GetFileTime извлекает кэшированное время UTC из файловой системы FAT. Когда наступает переход на летнее время, время, полученное с помощью GetFileTime, отключается на час, поскольку кэш не обновляется. Когда вы перезагружаете компьютер, время кэширования, которое получает GetFileTime, является правильным. FindFirstFile извлекает местное время из файловой системы FAT и преобразует его в UTC, используя текущие настройки часового пояса и летнего времени. Поэтому, если это летнее время, FindFirstFile учитывает переход на летнее время, даже если время преобразования файла указано в стандартном времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...