2011-07-31 66 views
0

GetFileAttributesEx返回文件系統未修改的日期。 NTFS以UTC存儲日期,FAT將它們存儲在本地時區中。不知道時區,日期是毫無價值的。如何獲取UTC中的修改日期

什麼是最好的方式來可靠地得到UTC的文件的最後修改日期?真的只是檢查NTFS和FAT是最好的方法嗎?如果你正在使用不同的文件系統呢?我可以使用不同的API嗎?有人可以在這裏發佈一些優雅的代碼嗎?

+0

該函數可能會返回「未修改」的時間戳,但它仍然需要從FAT時間格式轉換爲FILETIME格式。它可能在內部調用['DosDateTimeToFileTime'](http://msdn.microsoft.com/en-us/library/ms724247%28v=VS.85%29.aspx),但該函數的文檔似乎沒有意義。 –

+0

偉大的問題 - 我處於同樣的情況,並且我希望有人能夠粘貼一個可以做到這一點的函數,以避免爲了填寫MSDN文檔模糊的地方而進行研究。例如,他們舉了一個例子http://msdn.microsoft.com/en-us/library/ms724926(VS.85).aspx,這似乎認爲文件時間總是以UTC返回...... – tenfour

回答

3

使用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也會考慮夏令時。

相關問題