2013-03-27 115 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相同)。