Проблема с DateTime.Now на сервере

У меня есть большая проблема, и я не знаю, как ее решить

Я создал веб-приложение и разместил его на сервере в США, а пользователи, которые обращаются к этому веб-приложению из Египта

Проблема в том, что я использую метод DateTime.Now внутри приложения, и этот метод возвращает время сервера в США, а не время машины, которая использует его в Египте.

Как я могу решить эту проблему ? Пожалуйста, помогите мне, как только сможете

Заранее спасибо


person Amira Elsayed Ismail    schedule 04.10.2010    source источник


Ответы (4)


Что ж, вы можете начать с использования DateTime.UtcNow, передачи этого клиенту, а затем выполнения соответствующих преобразований часовых поясов на клиенте. Обычно это разумный способ работы - если вы можете выполнять обработку на клиенте (например, в JavaScript).

В качестве альтернативы спросите у пользователя его часовой пояс, чтобы вы могли обслуживать страницы, использующие местное время, используя TimeZoneInfo. Конечно, если вы знаете, что все ваши пользователи находятся в Египте, потенциально вы можете просто жестко запрограммировать это.

person Jon Skeet    schedule 04.10.2010
comment
Спасибо, мистер Джон, вы имели в виду, что я должен использовать метод DateTime.UtcNow в своем приложении, тогда я могу определить переменную с часовым поясом Египта, например = 2, затем я добавляю это значение в DateTime.UtcNow каждый раз, когда я вставить данные в базу - person Amira Elsayed Ismail; 04.10.2010
comment
@Amira Elsayed - Если ваши пользователи не всегда будут находиться в одном и том же часовом поясе, вы можете сохранить время как универсальное время в базе данных. - person James Black; 04.10.2010
comment
@Amira: Как говорит Джеймс, обычно рекомендуется хранить базу данных в формате UTC. Выполняйте преобразования, когда вы отображаете данные. - person Jon Skeet; 04.10.2010
comment
я сохранил дату как DateTime.UtcNow и преобразовал местное время в Arab Standard Time, как ответил @Dirk Vollmar, но сохраняет ли stackoveflow все свое время в UTCNow, потому что все пользователи из разных часовых поясов? - person Shaiju T; 02.12.2015
comment
@stom: я не уверен, что это действительно имеет отношение к вопросу, но да, я считаю, что Stack Overflow делает все с точки зрения UTC. - person Jon Skeet; 02.12.2015

Вам нужно преобразовать значение даты и времени в часовой пояс ваших пользователей. Одним из простых способов сделать это было бы вызвать ConvertTime и передать желаемый часовой пояс следующим образом:

DateTime now = TimeZoneInfo.ConvertTime(DateTime.UtcNow, 
    TimeZoneInfo.FindSystemTimeZoneById("Egypt Standard Time"));
person Dirk Vollmar    schedule 04.10.2010
comment
здесь Time Zone Index Values из msdn, может кому поможет. - person Shaiju T; 02.12.2015

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

Вы также можете прочитать это: Создание DateTime в определенном часовом поясе в c# fx 3.5

person James Black    schedule 04.10.2010

Ну, вы можете использовать DateTime.UTCNow, а затем конвертировать к местному времени.

person Doctor Blue    schedule 04.10.2010
comment
Преобразование в местное время не годится, потому что оно будет местным для США. - person Dirk Vollmar; 04.10.2010
comment
Я имею в виду, конвертировать в нужное местное время. В данном случае египетское время. - person Doctor Blue; 04.10.2010