0

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

我想设置CreatedDateModifiedDate作为我的当地时间..如何做到这一点..

我创建文件夹的代码

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

3 回答 3

2

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

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

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

考虑它的最佳方式是所有时间都保存为 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。

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

于 2013-10-10T08:27:58.597 回答
0

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

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

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

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

于 2013-10-10T08:15:05.600 回答
0

只要您的文件系统是 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 文件系统并非如此。对于那些文件系统,使用服务器的本地时间戳。将文件从一个位置转移到另一个位置可能会导致对时间戳的误解。

于 2013-10-10T15:50:59.613 回答