在 .NET Framework 2.0 中,如何获取正确的文件时间
一种解决方法,无论您的计算机具有什么日期设置,都能获取文件的正确本地时间。
引言
.NET Framework 2.0 会错误报告文件日期时间信息。通过 Time
和 TimeInfo
函数,您可能会获得错误的文件时间信息。这里提供了一个解决方法,以及重现这种奇怪行为的说明。
背景
有人向 MS 报告了这个问题,但该问题被驳回,因为他们无法重现它(C# LastWriteTime BUG)。
要重现此问题,您可以设置以下条件:
- 创建一个日期时间为 2008 年 9 月 11 日晚上 11:51 的文件。
- 将您的系统日期设置为 2009 年 1 月 9 日。
- 将您的系统时区设置为 GMT -2 中大西洋时区。
- 将您的系统时间设置为“自动调整时钟以进行夏令时更改”。
第 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 - 初始报告。