2008-11-26 107 views
8

我的時間有問題
我的服務器在美國,我在丹麥(歐洲),我希望我的網站在當地時間顯示時間。我怎樣才能做到這一點?如何將服務器時間轉換爲當地時間

我試試這個

Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime; 

和它的作品,但是當我在GMT + 1/UTC + 1,它只會工作不會當我在GMT + 2/UTC + 2。 有沒有另外一種方式來做到這一點 - 一個更簡單的方法呢?

回答

11

你唯一需要做的事情是這樣的,如下所示:

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 + "'"); 
} 
0

你可以得到服務器的時間,並做到這一點。

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

0

我做了轉換,以顯示在使用模板領域一個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> 
0
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime; 

您可以根據時區改變你的時間跨度like--

Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(3,0,0)).DateTime; 

相關問題