ASP.Net Time Localization - PullRequest
       10

ASP.Net Time Localization

6 голосов
/ 14 февраля 2009

Я работаю над сайтом, который позволяет пользователям добавлять записи календаря. На главной странице все пользователи могут видеть эти записи с некоторым текстом, показывающим, как долго эти записи актуальны, например

Запись 1: 5 минут
Вход 2: 7 часов
Вступление 3: 4 дня

У меня проблема в том, что все могут находиться в разных часовых поясах. Я решил, что хочу хранить все время / даты в GMT.

То, с чем я сталкиваюсь, - это когда пользователь отправляет запись календаря, скажем, 01.01.2009 10:30. Затем мне нужно выяснить, что это время даты в GMT для хранения. Есть ли способ узнать, какой часовой пояс / время у пользователя используется, чтобы я мог сравнить его с временем сервера (GMT), чтобы выполнить преобразование?

Я действительно надеюсь, что это имеет смысл. Я надеюсь, что смогу сделать это, не спрашивая пользователя, в каком часовом поясе он находится, и не заставляя пользователя вводить все даты в GMT.

Ответы [ 3 ]

5 голосов
/ 14 февраля 2009

CЧтобы преобразовать дату на сервер, конвертируйте дату и время в клиентское время по Гринвичу (в JavaScript, если это веб-приложение). Пусть сервер работает только с GMT (я бы сказал UTC). То же самое для отображения даты / времени. Отправьте GMT ​​/ UTC клиенту и позвольте JS локализоваться. По моему мнению, это единственный полностью безопасный способ, потому что вы позволяете оператору системы определять, какое время должно быть.

Существуют и другие подходы к делу, и если вам нужно только узнать, какое сейчас время у клиента, вы можете просто получить из него смещение (можно получить через JS и т. Д.). Но если вам нужны точные даты / время в разных местах для исторических и будущих дат / времени, вам лучше позволить клиенту справиться с этим.

PS: В моей реализации TimeZone я также использую формат времени UNIX для связи между клиентом и сервером. Это просто легче разобрать, и я верю, что это родной формат даты и времени для JS. Я не могу сейчас представить свой код для вас, но для этого мне будет относительно легко найти Google.

1 голос
/ 15 февраля 2009

Если кто-то заинтересован, я нашел сайт, который дает хороший рабочий пример этого в действии

http://www.tellingmachine.com/post/2008/05/Rendering-ASPNET-UTC-time-as-local-time-of-the-browsers-time-zone.aspx

1 голос
/ 14 февраля 2009

Ваша единственная опция (помимо явного выбора пользователя) - получить смещение часового пояса из браузера:

var tzOffset = new Date().getTimezoneOffset(); // Minutes

Затем вам нужно отправить его на сервер, используя скрытое поле или другой подходящий подход.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...