2013-03-27 118 views
4

我使用DirectoryInfo.CreationTime創建 但它返回奇怪的日期{21/11/1617 0:00:00}DirectoryInfo.CreationTime返回奇怪的日期

var directoryInfo = new DirectoryInfo("C:\\testFolder"); 
var lastWriteTime = directoryInfo.LastWriteTime; // correct value 
var creationTime = directoryInfo.CreationTime; // Date = {21/11/1617 0:00:00} 
var creationTimeUtc = directoryInfo.CreationTimeUtc; // Date = {21/11/1617 0:00:00} 

任何想法目錄時來獲得日期?

另外:

位於NAS共享的文件夾,某些文件夾返回正確的值,有些不是 我做了如下測試:

  1. 重新啓動我的機器,並檢查數據並且時間設置正確
  2. 從另一臺機器運行應用程序
  3. 使用.NET 4.0重新創建應用程序VS2010
  4. 從不同的操作系統窗口運行應用程序7

全部返回相同的值。但是,如果我選擇文件夾屬性創建日期設置爲2008. 這是一個錯誤?

+0

如果你去'testFolder'的屬性是否顯示不同的日期?另外,你在使用什麼操作系統 – RAS 2013-03-27 01:46:24

+1

當谷歌什麼都沒有時,你就知道你正處在黃昏時分。 :)也許關於你的環境的一些其他信息將有助於......你在開發什麼系統,你是否在做一些不同的東西,比如在Linux上使用虛擬機或者酒等等。 – 2013-03-27 01:48:19

+0

當*爲*創建的目錄時? – Gabe 2013-03-27 03:05:54

回答

3

我可以在「奇怪的日期」上點亮一些。

Windows文件時間基於1/1/1601。

的文件時間是一個64位值,該值表示自上午12時起已經過的的 100納秒間隔的數量1月1日, 1601協調世界時(UTC)。當應用程序創建,訪問和寫入文件時,系統會記錄文件時間 。

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724290(v=vs.85).aspx

這樣看來,你的文件系統報告16年的偏移DirectoryInfo(從FileSystemInfo類,它調用GetFileAttributesEx()繼承)。

The。Net組件

public DateTime CreationTimeUtc 
{ 
    get{ 
     long fileTime = (long)((ulong)this._data.ftCreationTimeHigh << 32 | (ulong)this._data.ftCreationTimeLow); 
     return DateTime.FromFileTimeUtc(fileTime); 
    } 
} 

DateTime.FromFileTimeUtc增加等於1601年1月1日的值:

long ticks = fileTime + 504911232000000000L; 
return new DateTime(ticks, DateTimeKind.Utc); 

我找不到偏移(16歲)的任何意義。 DST錯誤或閏年看起來太大了,甚至幾個世紀以來也是如此。

我認爲這是奇怪的,CreationTimeCreationTimeUtc返回完全相同的日期(除非您的本地時間與UTC相同)。