Как перевести время сервера в местное время

У меня проблема со временем
Мой сервер находится в США, а я нахожусь в Дании (Европа), и я хотел бы, чтобы мой сайт отображал время по моему местному времени. Как я могу это сделать?

Я пробую это

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

и он работает, но он будет работать только тогда, когда я нахожусь в GMT + 1 / UTC + 1, а не когда я нахожусь в GMT + 2 / UTC + 2. Есть ли другой способ сделать это - более простой способ?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
9
0
15 334
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

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

DateTime myTimeGMT = ServerTime.ToUniversalTime();

Это сделайте так:

DateTime myTimeLocal = myTimeGMT.ToLocalTime();

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

По моему опыту, .NET имеет проблемы с преобразованием часовых поясов, когда ни время «От», ни время «До» не являются местным часовым поясом.

Надеюсь, это поможет.

DateTime myTimeLocal = myTimeGMT.ToLocalTime (); который преобразует его обратно в серверное время

Nesizer 26.11.2008 03:44

Вам нужно посмотреть на класс TimeZoneInfo для выполнения преобразований. Показываемое преобразование игнорирует проблемы с переходом на летнее время.

Robert Paulson 26.11.2008 03:55
Ответ принят как подходящий

Единственный способ сделать это:

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.

Robert Paulson 26.11.2008 05:43

Если часовой пояс неизвестен? для всех в разных странах, как мы можем это сделать?

Jeyhun Rahimov 25.03.2013 11:18

@JhoonBey позволяет людям выбирать свою страну или использовать службу, которая определяет страну по их IP-адресу. например stackoverflow.com/q/13921563/14033

Robert Paulson 04.09.2013 14:29

Я сделал преобразование для отображения в сетке с использованием поля шаблона.

<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;

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

Другие вопросы по теме