如何将服务器时间转换为当地时间
问题描述:
我的时间有问题
我的服务器在美国,我在丹麦(欧洲),我希望我的网站在当地时间显示时间。我怎样才能做到这一点?如何将服务器时间转换为当地时间
我试试这个
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime;
和它的作品,但是当我在GMT + 1/UTC + 1,它只会工作不会当我在GMT + 2/UTC + 2。 有没有另外一种方式来做到这一点 - 一个更简单的方法呢?
答
你唯一需要做的事情是这样的,如下所示:
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 + "'");
}
答
你可以得到服务器的时间,并做到这一点。
DateTime myTimeGMT = ServerTime.ToUniversalTime();
该这样做:
DateTime myTimeLocal = myTimeGMT.ToLocalTime();
这里唯一的限制是你是必须设置为要转换到的时区的计算机。
根据我的经验,当'From'时间或'To'时间都不是当地时区时,.NET在时区之间转换时遇到问题。
我希望这会有所帮助。
答
我做了转换,以显示在使用模板领域一个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 localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime;
您可以根据时区改变你的时间跨度like--
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(3,0,0)).DateTime;
。
DateTime myTimeLocal = myTimeGMT.ToLocalTime(); ,它会将其转换回servertime – Nesizer 2008-11-26 00:44:16
您需要查看TimeZoneInfo类来执行转换。您显示的转换不知道DST问题。 – 2008-11-26 00:55:53