DirectoryInfo.createtime返回陌生日期
本文关键字:生日 日期 返回 createtime DirectoryInfo | 更新日期: 2023-09-27 18:06:06
我使用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共享中的文件夹,有些文件夹返回正确的值,有些文件夹返回错误的值我做了以下测试:
- 重新启动我的机器,检查数据和时间设置正确
- 从另一台机器运行应用程序
- 使用。net 4.0 VS2010重建应用程序
- 从不同的操作系统运行应用程序windows 7
都返回相同的值。但是,如果我选择文件夹属性,则创建日期设置为2008年。这是臭虫吗?
我可以解释一下这个"奇怪的日期"。
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 一口>
看起来您的文件系统正在向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相同)。
关于CreationTime的msdn文档讨论了一系列可能导致这种情况的问题
查看下面这个链接的备注部分
http://msdn.microsoft.com/en-IN/library/system.io.filesysteminfo.creationtime.aspx它可能是一个未更新的缓存值。为此,您可以使用Refresh方法。正如评论中所指出的,一些旧的平台也可能会给你带来麻烦。