如何将服务器时间转换为当地时间

问题描述:

我的时间有问题
我的服务器在美国,我在丹麦(欧洲),我希望我的网站在当地时间显示时间。我怎样才能做到这一点?如何将服务器时间转换为当地时间

我试试这个

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在时区之间转换时遇到问题。

我希望这会有所帮助。

+0

DateTime myTimeLocal = myTimeGMT.ToLocalTime(); ,它会将其转换回servertime – Nesizer 2008-11-26 00:44:16

+2

您需要查看TimeZoneInfo类来执行转换。您显示的转换不知道DST问题。 – 2008-11-26 00:55:53

我做了转换,以显示在使用模板领域一个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;