2016-02-02 3 views
0

Я использую asp.net C#. Когда пользователь выполняет действие, я сохраняю действие datetime в db, используя время UTC. Теперь, когда настало время представить действия, я отправляю json клиенту с datetime из db. Теперь проблема в том, что она присутствует в utc, и это действительно запутывает пользователя. Каковы дополнительные решения для моей проблемы? должны ли они основываться на клиентах или на сервере?C# показать локальное время клиента вместо UTC из базы данных

+0

Нам нужно будет воссоздать: пожалуйста, 1. сделайте минимальным, 2. укажите код на стороне сервера, который отправляет время для клиента и 3. любой код на клиенте, который взаимодействует с датой перед показом. – Richard

+0

Также укажите информацию, как вы отправляете этот JSON. Используете ли вы ASP.NET (MVC/WebAPI) или другую веб-инфраструктуру? –

+3

Это вообще не похоже на проблему с C# - это звучит как проблема с презентационной логикой. Отправка времени UTC клиенту, вероятно, правильная вещь, и вы можете преобразовать ее в локальное клиентское время в Javascript. –

ответ

0

Конвертировать UTC-время по местному времени в зависимости от часового пояса клиента. Если это делается на стороне сервера или на стороне клиента, это вопрос дизайна, разделение логического/презентационного уровня.

Если вы решите сделать это на стороне сервера, вам понадобится информация о локальном часовом поясе клиента. Учитывая, что вы можете написать:

TimeZoneInfo.ConvertTimeFromUtc(utcdate, clients_timezoneinfo) 

Beyond C# части, есть хорошее покрытие на временных сдвигах зон в клиентских браузерах, например get client time zone from browser

1

Я ответил на этот точный вопрос здесь:

How to get current user timezone in c#

В принципе, в вашей базе данных вы должны хранить время в UTC. Затем вам нужно получить свой JavaScript, чтобы позвонить в ваш веб-сервис WCF и передать ему локальный часовой пояс пользователя.

Ваша услуга может добавить это временное смещение к времени UTC и вернуть дату-время в локальное время пользователя.

1

Я считаю, что наиболее правильным способом является отправка данных клиенту так же, как и сейчас (в формате 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, но по крайней мере он должен работать с локальным