c# - DirectoryInfo.CreationTime 返回奇怪的日期

标签 c# .net-3.5

我正在使用 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共享的文件夹,有些文件夹返回正确的值有些不 我做了以下测试:

  1. 重启我的机器并检查数据和时间设置是否正确
  2. 从另一台机器运行应用程序
  3. 使用 .NET 4.0 VS2010 重新创建应用程序
  4. 从不同的操作系统 windows 7 运行应用程序

所有返回相同的值。但是,如果我选择文件夹属性,创建日期将设置为 2008 年。 这是一个错误吗?

最佳答案

我可以解释一下“奇怪的约会”。

Windows 文件时间基于 1/1/1601。

A file time is a 64-bit value that represents the number of 100-nanosecond intervals that have elapsed since 12:00 A.M. January 1, 1601 Coordinated Universal Time (UTC). The system records file times when applications create, access, and write to files.

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

您的文件系统似乎正在向 DirectoryInfo(它继承自 FileSystemInfo 类,它正在调用 GetFileAttributesEx())报告 16 年的偏移量。

.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 错误或闰年,即使是累积了几个世纪。

我确实认为 CreationTimeCreationTimeUtc 返回完全相同的日期(除非您的本地时间与 UTC 相同)是很奇怪的。

关于c# - DirectoryInfo.CreationTime 返回奇怪的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15650218/

相关文章:

c# - Ajax TimerControl 和实例变量?

c# - 什么时候应该避免扩展方法?

c# - 如何使用 C# 获取 Excel 工作表中给定行的列数?

c# - 我如何将 linq 转换为 lambda

wpf - 如何避免 .Net 3.5 上 WPF 的大量内存泄漏?

.net - 客户资料与完整

c# - 解耦命令(模式)从接收者发送类?

c# - 构造函数链接或使用命名/可选参数

.net-3.5 - 我将如何编译 IronPython 以在 .NET 3.5 项目中使用?

asp.net - 如何在 IIS7 中进行 gzip 压缩?