Я использую asp.net C#. Когда пользователь выполняет действие, я сохраняю действие datetime в db, используя время UTC. Теперь, когда настало время представить действия, я отправляю json клиенту с datetime из db. Теперь проблема в том, что она присутствует в utc, и это действительно запутывает пользователя. Каковы дополнительные решения для моей проблемы? должны ли они основываться на клиентах или на сервере?C# показать локальное время клиента вместо UTC из базы данных
ответ
Конвертировать UTC-время по местному времени в зависимости от часового пояса клиента. Если это делается на стороне сервера или на стороне клиента, это вопрос дизайна, разделение логического/презентационного уровня.
Если вы решите сделать это на стороне сервера, вам понадобится информация о локальном часовом поясе клиента. Учитывая, что вы можете написать:
TimeZoneInfo.ConvertTimeFromUtc(utcdate, clients_timezoneinfo)
Beyond C# части, есть хорошее покрытие на временных сдвигах зон в клиентских браузерах, например get client time zone from browser
Я ответил на этот точный вопрос здесь:
How to get current user timezone in c#
В принципе, в вашей базе данных вы должны хранить время в UTC. Затем вам нужно получить свой JavaScript, чтобы позвонить в ваш веб-сервис WCF и передать ему локальный часовой пояс пользователя.
Ваша услуга может добавить это временное смещение к времени UTC и вернуть дату-время в локальное время пользователя.
Я считаю, что наиболее правильным способом является отправка данных клиенту так же, как и сейчас (в формате UTC), тогда вы сможете преобразовать его в местный или любой другой часовой пояс, как вы хотите во время но продолжайте использовать UTC в расчетах, если таковые имеются.
Существует несколько вопросов о том, как это сделать в javascript, например. here
Append 'UTC' в строку до его преобразования даты в JavaScript:
дата вар = новый Дата ('6/29/2011 4:52:48 PM UTC');
Date.toString() // "ср 29 июня 2011 9:52:48 GMT-0700 (PDT)"
P.S. Не уверен, что вы можете выполнять различные часовые пояса в js, но по крайней мере он должен работать с локальным
Нам нужно будет воссоздать: пожалуйста, 1. сделайте минимальным, 2. укажите код на стороне сервера, который отправляет время для клиента и 3. любой код на клиенте, который взаимодействует с датой перед показом. – Richard
Также укажите информацию, как вы отправляете этот JSON. Используете ли вы ASP.NET (MVC/WebAPI) или другую веб-инфраструктуру? –
Это вообще не похоже на проблему с C# - это звучит как проблема с презентационной логикой. Отправка времени UTC клиенту, вероятно, правильная вещь, и вы можете преобразовать ее в локальное клиентское время в Javascript. –