У меня проблема со временем
Мой сервер находится в США, а я нахожусь в Дании (Европа), и я хотел бы, чтобы мой сайт отображал время по моему местному времени. Как я могу это сделать?
Я пробую это
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(1,0,0)).DateTime;
и он работает, но он будет работать только тогда, когда я нахожусь в GMT + 1 / UTC + 1, а не когда я нахожусь в GMT + 2 / UTC + 2. Есть ли другой способ сделать это - более простой способ?





Вы можете получить время вне сервера и сделать это.
DateTime myTimeGMT = ServerTime.ToUniversalTime();
Это сделайте так:
DateTime myTimeLocal = myTimeGMT.ToLocalTime();
Единственное ограничение здесь - компьютер, на котором вы находитесь, должен быть настроен на часовой пояс, в который вы конвертируете.
По моему опыту, .NET имеет проблемы с преобразованием часовых поясов, когда ни время «От», ни время «До» не являются местным часовым поясом.
Надеюсь, это поможет.
Вам нужно посмотреть на класс TimeZoneInfo для выполнения преобразований. Показываемое преобразование игнорирует проблемы с переходом на летнее время.
Единственный способ сделать это:
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 + "'");
}
Следует отметить, что TimeZoneInfo правильно учитывает разницу в летнее время в будущем и в прошлом. Не поддавайтесь соблазну выполнить преобразование самостоятельно, используя BaseUtcOffset или GetUtcOffset (). Вы также можете проверить недопустимое и неоднозначное время с помощью TimeZoneInfo.
Если часовой пояс неизвестен? для всех в разных странах, как мы можем это сделать?
@JhoonBey позволяет людям выбирать свою страну или использовать службу, которая определяет страну по их IP-адресу. например stackoverflow.com/q/13921563/14033
Я сделал преобразование для отображения в сетке с использованием поля шаблона.
<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;
Вы можете изменить свой TimeSpan, например:
Datetime localtime = DateTimeOffset.Now.ToOffset(new TimeSpan(3,0,0)).DateTime;
в соответствии с часовым поясом.
DateTime myTimeLocal = myTimeGMT.ToLocalTime (); который преобразует его обратно в серверное время