在我的网络应用程序中,我正在动态创建文件夹和文件,而创建文件夹/文件CreatedDate
或ModifiedDate
则视为服务器时间..
我想将CreatedDate
或ModifiedDate
设置为当地时间..
该怎么做..
我创建文件夹的代码
DirectoryInfo dirDptFolder = new DirectoryInfo(strDptRoot);
if (dirDptFolder.Exists == false)
{
dirDptFolder.Create();
}
答案 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
的包装器,为方便起见,只是转换为本地时间。 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文件系统的情况不。对于这些文件系统,使用服务器的本地时间戳。将文件从一个位置移到另一个位置可能会导致错误解释时间戳。