как перевести время на сервере местное время
У меня проблема со временем
Мой сервер находится в США, и я в Дании (Европа), и я хотел бы, чтобы мой сайт показывал время в моем местном времени. Как я могу это сделать?
Я пробую это
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime;
и он работает, но он будет работать только тогда, когда я в GMT+1 / UTC+1, а не когда я в GMT+2 / UTC+2. Есть ли другой способ сделать это-более простой способ сделать это?
4 ответов
единственный способ сделать это следующим образом:
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.
для строк идентификатора часового пояса вы можете запустить бит кода здесь...
foreach( var tz in TimeZoneInfo.GetSystemTimeZones() )
{
Console.WriteLine(tz.DisplayName + " is Id=','" + tz.Id + "'");
}
Вы можете получить время с сервера и сделать это.
DateTime myTimeGMT = ServerTime.ToUniversalTime();
этого этого:
DateTime myTimeLocal = myTimeGMT.ToLocalTime();
единственное ограничение здесь-компьютер, на котором вы находитесь, должен быть установлен в часовой пояс, в который вы конвертируете.
по моему опыту, .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;
Вы можете изменить промежуток времени, как...
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(3,0,0)).DateTime;
согласно часовому поясу.