我正在使用DirectoryInfo.CreationTime来获取创建目录的日期
但它会返回奇怪的日期{21/11/1617 0:00:00}
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共享中的文件夹,某些文件夹返回正确的值,而某些文件夹则没有 我做了以下测试:
All返回相同的值。但是,如果我选择文件夹属性,则创建日期设置为2008。 这是一个错误吗?
答案 0 :(得分:3)
我可以对“奇怪的约会”有所了解。
Windows文件时间基于1/1/1601。
文件时间是一个64位值,表示数量 自上午12:00起经过的100纳秒间隔1月1日, 1601世界协调时间(UTC)。系统记录文件时间 当应用程序创建,访问和写入文件时。
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724290(v=vs.85).aspx
您的文件系统似乎报告了DirectoryInfo
的16年偏移量(从FileSystemInfo
类继承,该类正在调用GetFileAttributesEx()
)。
.Net包装
public DateTime CreationTimeUtc
{
get{
long fileTime = (long)((ulong)this._data.ftCreationTimeHigh << 32 | (ulong)this._data.ftCreationTimeLow);
return DateTime.FromFileTimeUtc(fileTime);
}
}
DateTime.FromFileTimeUtc
添加等于1/1/1601的值:
long ticks = fileTime + 504911232000000000L;
return new DateTime(ticks, DateTimeKind.Utc);
我找不到偏移的任何重要性(16年)。 DST错误或闰年似乎太大了,甚至累积了几个世纪。
我确实认为CreationTime
和CreationTimeUtc
返回完全相同的日期(除非您的当地时间与UTC相同)是特殊的。
答案 1 :(得分:0)
关于CreationTime的msdn文档讨论了一系列可能导致此问题的问题
查看以下链接的备注部分
http://msdn.microsoft.com/en-IN/library/system.io.filesysteminfo.creationtime.aspx
它可能是未更新的缓存值。为此,您可以使用Refresh方法。如评论中所示,一些旧平台也可能给你带来麻烦。