如何将默认时间设置为 asp.net 中任何创建的文件夹或文件的本地时间



在我的Web应用程序中,我动态创建文件夹和文件,而创建文件夹/文件CreatedDateModifiedDate则作为服务器时间。

我想将CreatedDateModifiedDate设置为我的本地时间。如何做到这一点..

我用于创建文件夹的代码

DirectoryInfo dirDptFolder = new DirectoryInfo(strDptRoot);
if (dirDptFolder.Exists == false)
{
    dirDptFolder.Create();
}

服务器创建时间与本地时间相同

如果您的时钟是最新的,则服务器上的创建时间将与本地时间相同。

这可能看起来不同,因为您可能位于不同的时区。

最好的考虑方法是将所有时间保存为 UTC。它们以本地时间显示,具体取决于操作系统中的时区设置。

您可以按 UTC 格式获取实际文件创建时间,如下所示:

FileInfo file = new FileInfo(filePath);  
creationTimeUTC = file.CreationTimeUtc;
Console.WriteLine("The files creation time in UTC: {0}", file.CreationTimeUtc);

如果您的本地计算机使用中部标准时间,则可以将服务器上的文件创建时间转换为显示为 CST 时间,如下所示:

TimeZoneInfo cstZone = TimeZoneInfo.FindSystemTimeZoneById("Central Standard Time");
DateTime cstTime = TimeZoneInfo.ConvertTimeFromUtc(file.CreationTimeUtc, cstZone);
Console.WriteLine("The files creation time in CST: {0}", cstTime);

因此,没有必要将服务器上的创建时间更改为本地时间,文件始终保存为 UTC。

如果您希望服务器时间

与本地时间完全相同,请更改服务器时区以匹配本地计算机的时区,反之亦然。

只要您的文件系统是 NTFS,那么文件时间就始终存储为 UTC。

如果您查看 System.IO.FileInfo.CreationTime 的实现,您将看到以下内容:

public DateTime CreationTime
{
  get
  {
    return this.CreationTimeUtc.ToLocalTime();
  }
  set
  {
    this.CreationTimeUtc = value.ToUniversalTime();
  }
}

如您所见,它是CreationTimeUtc的包装器,只是为了方便起见而转换为当地时间。 LastWriteTimeLastAccessTime 属性的工作方式相同。

因此,您无法更改要用不同时区标记的文件,因为它们永远不会以任何特定时区的本地时间开始标记。 它们以 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 文件系统并非如此。 对于这些文件系统,使用服务器的本地时间戳。 将文件从一个位置带到另一个位置可能会导致误解时间戳。

如果不同的用户有不同的时区怎么办?在向用户显示数据时仅转换为用户时间怎么样?:)

您可以要求用户输入他们的时区,也可以使用 javascript 检测它并将其存储在 cookie 中。 有多种方法可以做到这一点,但这里有一个脚本可以做到这一点 https://bitbucket.org/pellepim/jstimezonedetect

cookie也可以通过多种方式保存,但我喜欢jquery。http://plugins.jquery.com/cookie/

然后,您可以在服务器端读取cookie,并使用其他人提到的方法将您的时间转换为该时区。

最新更新