2008-11-26 3 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"); 

Использование класса TimeZoneInfo является единственным надежным способом в .NET, чтобы конвертировать в/из разных часовых поясов и получить соответствующие преобразования DST.

TimeZoneInfo.ConvertTimeToUtc(dtLocal,tzi) - это обратное преобразование с местного времени на время utc.


Для строк TimeZone Id, вы можете запустить бит кода здесь ...

foreach(var tz in TimeZoneInfo.GetSystemTimeZones()) 
{ 
    Console.WriteLine(tz.DisplayName + " is Id=','" + tz.Id + "'"); 
} 
0

Вы можете получить свободное время от сервера и сделать это.

DateTime myTimeGMT = ServerTime.ToUniversalTime(); 

Это сделать это:

DateTime myTimeLocal = myTimeGMT.ToLocalTime(); 

Единственное ограничение здесь компьютер вы на должны быть установлены в часовом поясе вы превращающего в.

В моем опыте .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; 

Вы можете изменить TimeSpan like--

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

в соответствии с часовым поясом.