65.9K
CodeProject 正在变化。 阅读更多。
Home

在 .NET Framework 2.0 中,如何获取正确的文件时间

starIconstarIconstarIconstarIconstarIcon

5.00/5 (7投票s)

2009 年 1 月 9 日

CPOL
viewsIcon

48901

一种解决方法,无论您的计算机具有什么日期设置,都能获取文件的正确本地时间。

引言

.NET Framework 2.0 会错误报告文件日期时间信息。通过 TimeTimeInfo 函数,您可能会获得错误的文件时间信息。这里提供了一个解决方法,以及重现这种奇怪行为的说明。

背景

有人向 MS 报告了这个问题,但该问题被驳回,因为他们无法重现它(C# LastWriteTime BUG)。

要重现此问题,您可以设置以下条件:

  1. 创建一个日期时间为 2008 年 9 月 11 日晚上 11:51 的文件。
  2. 将您的系统日期设置为 2009 年 1 月 9 日。
  3. 将您的系统时区设置为 GMT -2 中大西洋时区。
  4. 将您的系统时间设置为“自动调整时钟以进行夏令时更改”。

image003.jpg

image002.jpg

第 3 步可能不是必需的。

然后,只需执行 Console.Write(File.GetLastWriteTime(filename).ToString()));,您就会得到错误的日期。

9/12/2008 12:51:43AM

如果您禁用“自动调整时钟以进行夏令时更改”,则报告的日期变为正确的日期:2008/9/11 23:51:43。在两种情况下,Windows 资源管理器都报告 23:51:43。

使用代码

以下是一个获取正确的系统日期时间信息的函数:

static DateTime GetExplorerFileDate(string filename)
{
    DateTime now = DateTime.Now;
    TimeSpan localOffset = now - now.ToUniversalTime();
    return File.GetLastWriteTimeUtc(filename) + localOffset;
}

关注点

使用 GetExplorerFileDate,您可以获得文件的“真实”日期,即使该错误尚未修复……

历史

  • 2008/01/09 - 初始报告。
© . All rights reserved.