Asp.net 如何将服务器时间转换为本地时间
我的时间有问题Asp.net 如何将服务器时间转换为本地时间,asp.net,datetime,c#-3.0,Asp.net,Datetime,C# 3.0,我的时间有问题 我的服务器在美国,我在丹麦(欧罗巴),我想让我的网站显示我当地时间的时间。我该怎么做 我试试这个 Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime; 它是有效的,但它只在GMT+1/UTC+1时有效,而在GMT+2/UTC+2时无效。 还有其他方法吗?更简单的方法吗?你可以从服务器上抽出时间来做这件事 DateTime myTimeGMT = ServerTime.ToU
我的服务器在美国,我在丹麦(欧罗巴),我想让我的网站显示我当地时间的时间。我该怎么做 我试试这个
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime;
它是有效的,但它只在GMT+1/UTC+1时有效,而在GMT+2/UTC+2时无效。
还有其他方法吗?更简单的方法吗?你可以从服务器上抽出时间来做这件事
DateTime myTimeGMT = ServerTime.ToUniversalTime();
这样做:
DateTime myTimeLocal = myTimeGMT.ToLocalTime();
这里唯一的限制是您所在的计算机必须设置为您要转换到的时区
根据我的经验,.NET在“从”时间和“到”时间都不是本地时区的情况下在时区之间转换时遇到问题
我希望这能有所帮助。您应该做的唯一方法如下:
string zoneId = "Central European Standard Time";
TimeZoneInfo tzi = TimeZoneInfo.FindSystemTimeZoneById(zoneId);
DateTime result = TimeZoneInfo.ConvertTimeFromUtc(DateTime.UtcNow,tzi);
Console.WriteLine("Time is " + result + " in Denmark");
在.Net中,使用TimeZoneInfo类是在不同时区之间进行转换并获得正确的DST转换的唯一可靠方法
TimeZoneInfo.ConvertTimeToUtc(dtLocal,tzi)
是从本地时间到utc时间的反向转换
对于时区Id字符串,您可以在此处运行代码位
foreach( var tz in TimeZoneInfo.GetSystemTimeZones() )
{
Console.WriteLine(tz.DisplayName + " is Id=','" + tz.Id + "'");
}
我使用一个模板字段进行了在gridview中显示的转换
<asp:TemplateField HeaderText="Last Activity">
<ItemTemplate>
<asp:Label ID="LastActivityLBL" runat="server" Text='<%# Convert.ToDateTime(Eval("LastActivityDate")).ToLocalTime() %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Last Login">
<ItemTemplate>
<asp:Label ID="LastLoginLBL" runat="server" Text='<%# Convert.ToDateTime(Eval("LastLoginDate")).ToLocalTime() %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
你可以像这样改变你的时间跨度--
根据时区。DateTime myTimeLocal=myTimeGMT.ToLocalTime();这将把它转换回ServerTime您需要查看TimeZoneInfo类来执行转换。您显示的转换忽略了DST问题。应该注意的是,TimeZoneInfo正确地考虑了未来和过去时间的DST差异。不要试图使用BaseUtcofset或GetUtcofset()自己进行转换。您还可以使用时区信息检查无效和不明确的时间。如果时区未知?对于不同国家的每个人来说,我们如何才能做到这一点?@JhoonBey允许人们选择自己的国家,或者使用一种根据IP地址确定国家的服务。例如
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime;
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(3,0,0)).DateTime;