如何将默认时间设置为 asp.net 中任何创建的文件夹或文件的本地时间
本文关键字:时间 创建 文件夹 文件 任何 net 默认 设置 asp | 更新日期: 2023-09-27 18:34:54
在我的Web应用程序中,我动态创建文件夹和文件,而创建文件夹/文件CreatedDate
或ModifiedDate
则作为服务器时间。
我想将CreatedDate
或ModifiedDate
设置为我的本地时间。如何做到这一点..
我用于创建文件夹的代码
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
的包装器,只是为了方便起见而转换为当地时间。 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 文件系统并非如此。 对于这些文件系统,使用服务器的本地时间戳。 将文件从一个位置带到另一个位置可能会导致误解时间戳。
如果不同的用户有不同的时区怎么办?在向用户显示数据时仅转换为用户时间怎么样?:)
您可以要求用户输入他们的时区,也可以使用 javascript 检测它并将其存储在 cookie 中。 有多种方法可以做到这一点,但这里有一个脚本可以做到这一点 https://bitbucket.org/pellepim/jstimezonedetect
cookie也可以通过多种方式保存,但我喜欢jquery。http://plugins.jquery.com/cookie/
然后,您可以在服务器端读取cookie,并使用其他人提到的方法将您的时间转换为该时区。