Смещение часового пояса ASP.NET MVC

194
20 октября 2018, 14:40

У меня есть сайт и сервер. Хочу, чтобы клиентам из разных часовых поясов показывалось разное время. Всю конвертацию провожу на сервере:

от клиента -

return new DateTimeOffset(dateTime, TimeZoneInfo.Local.BaseUtcOffset);

клиенту -

return ((DateTimeOffset)dateTime).LocalDateTime;

При тесте выяснил, что ASP.NET не умеет сам определять часовой пояс клиента, и его надо определять с помощью JS и передавать при помощи кукис:

new Date().getTimezoneOffset();//gets the timezone offset

Вот тут время для вопроса. Каким образом прокидывать смещение от сайта до самого сервера? Я хочу реализовать что-то наподобие

Thread.CurrentThread.CurrentUICulture = CultureInfo.***;

, без всяких хелперов и обёрток. Но раз в интернете я нигде не нашёл такого способа, значит люди реализовывают смещение времени по другому. Как правильно поступить, если я хочу делать конвертацию смещения именно на сервере и желательно стандартными средствами .NET?

UPD: схема такая: пользователь -> ASP.NET MVC 4 -> .exe служба на .NET -> SQL Server

Answer 1

Стандартного механизма нет по двум причинам.

Первая из них - местным временем в .NET называют именно системное местное время, а не какое-то еще. А потому TimeZoneInfo.Local возвращает одно и то же для всех потоков и не может быть переопределено.

Вторая - браузер не передает свой часовой пояс через заголовки HTTP (в отличии от языка, который передается в заголовке Accept-Language).

Так что без хелперов и оберток не обойтись.

Answer 2

Мы храним объект с разницей во времени между клиентом и сервером в сессии. Вернее, разницу между клиентским временем и UTC. B мастер-странице, при отсутствии этого объекта в сессии, вставляем вызов ajax-а, который отправляет getTimezoneOffset на сервер - в специальный контроллер, который создает объект и кладет его в сессию.

Клиент - браузер.

Сервер - компьютер с ASP.NET веб-приложением.

Дату/время в базе данных следует хранить как UTC.

READ ALSO
Парсинг значения json с помощью Newtonsoft на с#

Парсинг значения json с помощью Newtonsoft на с#

Задача: получить значение "lastPriceProtected"

214
Изменить .cs на .cshtml

Изменить .cs на .cshtml

После обновления vs все вьюшки изменились сcshtml в g

175
Как можно по условию переданному в конструктор, выбрать переопределяемые методы в C#

Как можно по условию переданному в конструктор, выбрать переопределяемые методы в C#

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

185
Дополнить интерфейс Unity, Custom Inspector

Дополнить интерфейс Unity, Custom Inspector

Появилось требование к дополнению интерфейса самого unity, и хотелось бы узнать, это вообще возможно или нет

200