只要您的文件系统是 NTFS,那么文件时间始终存储为 UTC。
如果您查看 的实现System.IO.FileInfo.CreationTime
,您将看到以下内容:
public DateTime CreationTime
{
get
{
return this.CreationTimeUtc.ToLocalTime();
}
set
{
this.CreationTimeUtc = value.ToUniversalTime();
}
}
正如你所看到的,它是一个包装器CreationTimeUtc
,只是为了方便而转换为本地时间。LastWriteTime
和LastAccessTime
属性的工作方式相同。
因此,您不能将文件更改为使用不同的时区标记,因为它们从一开始就从未使用任何特定时区的本地时间标记。它们以 UTC 标记。
如果您想将其转换为其他时区,请在阅读时进行。
FileInfo fi = new FileInfo(path);
DateTime utc = fi.CreationTimeUtc;
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById("Eastern Standard Time");
DateTime eastern = TimeZoneInfo.ConvertTimeFromUtc(utc, tzi);
请注意,类之外有类似的方法System.IO.File
,例如File.GetCreationTimeUtc()
,它们基本上做同样的事情。使用任何你觉得舒服的。
另请注意, FAT/FAT32 文件系统并非如此。对于那些文件系统,使用服务器的本地时间戳。将文件从一个位置转移到另一个位置可能会导致对时间戳的误解。