文件时间戳错误与解决方案

在软件开发过程中,经常需要处理文件的日期和时间信息。然而,有时可能会遇到一些意想不到的问题,比如文件的时间戳信息出现错误。本文将介绍一个在特定条件下导致文件时间戳错误的C#问题,并提供一个有效的解决方案。

这个问题最初是由一位用户向微软报告的,但因为无法复现该问题,所以该话题被忽略了。然而,这个问题确实存在,并且可以通过特定的步骤来复现。

复现问题的步骤

要复现这个问题,需要按照以下步骤操作:

  1. 创建一个文件,其日期时间为2008年9月11日,23:51。
  2. 将系统日期设置为2009年1月9日。
  3. 将系统时区设置为GMT -2 Mid-Atlantic。
  4. 将系统时间设置为“自动调整夏令时”。
  5. 执行以下代码: Console.Write(File.GetLastWriteTime(filename).ToString());

在执行上述步骤后,会发现得到的日期是错误的:

9/12/2008 12:51:43AM

如果禁用“自动调整夏令时”选项,报告的日期就会变成正确的:9/11/2008 11:51:43PM。在这两种情况下,Windows资源管理器都显示为11:51:43PM。

解决方案

为了解决这个问题,可以编写一个函数来获取正确的系统日期时间信息。以下是一个C#函数的示例:

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

使用这个函数,即使在bug未修复的情况下,也可以获取到文件的“真实”日期。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485