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

时间:2013-10-10 08:03:30

标签: c# asp.net timezone

在我的网络应用程序中,我正在动态创建文件夹和文件,而创建文件夹/文件CreatedDateModifiedDate则视为服务器时间..

我想将CreatedDateModifiedDate设置为当地时间.. 该怎么做..

我创建文件夹的代码

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

3 个答案:

答案 0 :(得分:2)

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

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

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

考虑它的最佳方式是所有时间都保存为UTC。它们会根据您操作系统中的时区设置显示在当地时间。

您可以像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。

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

答案 1 :(得分:0)

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

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

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

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

答案 2 :(得分: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文件系统的情况。对于这些文件系统,使用服务器的本地时间戳。将文件从一个位置移到另一个位置可能会导致错误解释时间戳。